栅格类型

本节列出了 oscargis raster 安装的数据类型。

类型名 表示
raster 是一种用于存储和分析栅格数据的数据类型
rastbandarg 为数据库提供了对地理空间对象的支持
geomval 复合类型,由geom字段引用的几何图形对象和val组成组成。
addbandarg 复合类型,它是函数ST_AddBand的输入类型
summarystats 复合类型,它是ST_SummaryStats和ST_SummaryStatsAgg函数返回的类型值
aggcount 用于对指定维度数据进行计数,即对非空的单元格个数进行统计
reclassarg 复合类型,用于作为输入到 ST_Reclass 函数中,以定义重分类的行为
agg_samealignment 用于处理与空间数据相关的聚合操作
unionarg 用于 ST_Union 函数的复合类型。它定义了要处理的波段和 UNION 操作的行为。

raster

Raster - 是一种用于存储和分析栅格数据的数据类型。这种数据类型通常用于地理信息系统(GIS)中,以处理和分析栅格图像或栅格数据。Raster类型的数据可以包含多个波段的信息,每个波段可以视为图像的一个层面,用于捕捉不同类型的信息,如颜色、高度、温度等。这种数据类型在遥感、地理信息系统、环境科学等领域有着广泛的应用。

drop table dummy_rast;
CREATE TABLE dummy_rast(rid integer, rast raster);
INSERT INTO dummy_rast(rid, rast)
VALUES (1,
('01' -- little endian (uint8 ndr)
|| '0000' -- version (uint16 0)
|| '0000' -- nBands (uint16 0)
|| '0000000000000040' -- scaleX (float64 2)
|| '0000000000000840' -- scaleY (float64 3)

|| '000000000000E03F' -- ipX (float64 0.5)
|| '000000000000E03F' -- ipY (float64 0.5)
|| '0000000000000000' -- skewX (float64 0)
|| '0000000000000000' -- skewY (float64 0)
|| '00000000' -- SRID (int32 0)
|| '0A00' -- width (uint16 10)
|| '1400' -- height (uint16 20)
)::raster
),
-- Raster: 5 x 5 pixels, 3 bands, PT_8BUI pixel type, NODATA = 0
(2, ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A' ||
'41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEF' ||
'EFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::raster);


SELECT st_astext(ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 0.1,-0.1, 0, 0, 4326), 1, '8BUI', 1, 0), 2, '8BUI', 2, 0), 3, '8BUI', 3, 0)::geometry);
ST_ASTEXT(text)      |
---------------------
POLYGON((0 0,0.2 0,0.|
2 -0.2,0 -0.2,0 0))  |
总数目:1


SELECT st_astext(ST_AddBand(ST_MakeEmptyRaster(20, 20, 0, 0, 1, -1, 0, 0, 4326), '16BSI'::text, 1, 0)::geometry);
ST_ASTEXT(text)      |
---------------------
POLYGON((0 0,20 0,20 |
-20,0 -20,0 0))      |
总数目:1


SELECT * FROM ST_BandMetadata(
    ST_AddBand(
        ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '2BUI', 1, 0),
        ARRAY[
            ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '4BUI', 1, 0),
            ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '8BUI', 1, 0),
            ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0),
            ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BUI', 1, 0),
            ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '64BF', 1, 0)
        ]::raster[]
    ), ARRAY[]::int[]
);
BANDNUM(int)      |PIXELTYPE(text)      |NODATAVALUE(double precision)      |ISOUTDB(boolean)      |PATH(text)      |OUTDBBANDNUM(tinyint)      |FILESIZE(bigint)      |FILETIMESTAMP(bigint)      |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1                 |2BUI                 |0                                  |false                 |null            |null                       |null                  |null                       |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2                 |4BUI                 |0                                  |false                 |null            |null                       |null                  |null                       |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3                 |8BUI                 |0                                  |false                 |null            |null                       |null                  |null                       |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4                 |16BUI                |0                                  |false                 |null            |null                       |null                  |null                       |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5                 |32BUI                |0                                  |false                 |null            |null                       |null                  |null                       |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6                 |64BF                 |0                                  |false                 |null            |null                       |null                  |null                       |
总数目:6

rastbandarg

rastbandarg - 它为数据库提供了对地理空间对象的支持,包括点、线、多边形等地理空间数据的存储和查询。

/*
WITH apple AS (
SELECT ST_AddBand(
ST_MakeEmptyRaster(350, 246, 0, 0, 1, -1, 0, 0, 0),
'/root/llq/stgis/tmp/oscar/oscargis/doc/html/images/apple.png'::text,
NULL::int[]
) AS rast
)
SELECT
ST_AsPNG(rast) AS original_png,
ST_AsPNG(ST_Grayscale(rast)) AS grayscale_png
FROM apple;


WITH apple AS (
SELECT ST_AddBand(
ST_MakeEmptyRaster(350, 246, 0, 0, 1, -1, 0, 0, 0),
'/root/llq/stgis/tmp/oscar/oscargis/doc/html/images/apple.png'::text,
NULL::int[]
) AS rast
)
SELECT
ST_AsPNG(rast) AS original_png,
ST_AsPNG(ST_Grayscale(
ARRAY[
ROW(rast, 1)::rastbandarg, -- red
ROW(rast, 2)::rastbandarg, -- green
ROW(rast, 3)::rastbandarg -- blue
]::rastbandarg[]
)) AS grayscale_png
FROM apple;
*/

geomval

geomval - 是一种复合数据类型,由geom字段引用的几何图形对象和val组成,val是表示栅格标注栏中特定几何位置的像素值的双精度值。它由ST_DumpAsPolygon和栅格交点函数系列用作输出类型,用于将栅格标注栏分解为几何图形多边形。

SELECT
foo.rid,
foo.gid,
ST_AsText((foo.geomval).geom) As geomwkt, (foo.geomval).val
FROM (
SELECT
A.rid, g.gid,
ST_Intersection(A.rast, g.geom) As geomval
FROM dummy_rast AS A
CROSS JOIN (
SELECT 1 AS gid, ST_Point(3427928, 5793243.85) AS geom
UNION ALL
SELECT 2, ST_GeomFromText('LINESTRING(3427927.85 5793243.75,3427927.8 5793243.75,3427927.8 5793243.8)')
UNION ALL
SELECT 3, ST_GeomFromText('LINESTRING(1 2, 3 4)')
) As g(gid,geom)
WHERE A.rid = 2
) As foo;
RID(int)      |GID(int)      |GEOMWKT(text)      |VAL(double precision)      |
--------------------------------------------------------------------------
2             |1             |POINT(3427928 57932|249                        |
              |              |43.85)             |                           |
--------------------------------------------------------------------------
2             |1             |POINT(3427928 57932|253                        |
              |              |43.85)             |                           |
--------------------------------------------------------------------------
2             |2             |POINT(3427927.85 57|254                        |
              |              |93243.75)          |                           |
--------------------------------------------------------------------------
2             |2             |POINT(3427927.8 579|251                        |
              |              |3243.8)            |                           |
--------------------------------------------------------------------------
2             |2             |POINT(3427927.8 579|253                        |
              |              |3243.8)            |                           |
--------------------------------------------------------------------------
2             |2             |LINESTRING(3427927.|252                        |
              |              |8 5793243.75,34279|                           |
              |              |27.8 5793243.8)    |                           |
--------------------------------------------------------------------------
2             |2             |MULTILINESTRING((34|250                        |
              |              |27927.8 5793243.8,|                           |
              |              |3427927.8 5793243.|                           |
              |              |75),(3427927.8 579|                           |
              |              |3243.75,3427927.85|                           |
              |              | 5793243.75))      |                           |
--------------------------------------------------------------------------
2             |3             |GEOMETRYCOLLECTION |null                       |
              |              |EMPTY              |                           |
总数目:8


SELECT '#299', round(ST_Y(geometry(ST_Intersection(ST_GeographyFromText('POINT(1.2456 2)'), ST_GeographyFromText('POINT(1.2456 2)')))));
?COLUMN?(varchar)      |ROUND(double precision)      |
----------------------------------------------------
#299                   |2                            |
总数目:1

addbandarg

addbandarg - 是一个复合数据类型,它是函数ST_AddBand的输入类型。这个函数用于定义一个新波段的属性和属性的初始值。

SELECT
    St_Value(rast, 1, 3, 3),
    St_Value(rast, 2, 3, 3)
FROM (
    SELECT
        ST_AddBand(
            ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0, 0),
            ARRAY[
                ROW(1, '64BF', 1234.567, NULL),
                ROW(2, '8BUI', 255, NULL)
            ]::addbandarg[]
        ) AS rast
) foo;
ST_VALUE(double precision)      |ST_VALUE(double precision)      |
----------------------------------------------------------------
1234.567                        |255                             |
总数目:1

summarystats

summarystats - 是一个复合数据类型,它是ST_SummaryStats和ST_SummaryStatsAgg函数返回的类型值。这种类型用于计算一个raster对象的指定波段集的统计值信息,通过提供语法和参数,可以计算相关统计信息,如摘要统计信息。

CREATE TYPE summarystats AS (
    count int,
    sum double precision,
    mean double precision,
    stddev double precision,
    min double precision,
    max double precision
);

aggcount

aggcount - 用于对指定维度数据进行计数,即对非空的单元格个数进行统计.

CREATE TYPE aggcount AS (
    count bigint,
    nband integer,
    exclude_nodata_value boolean,
    sample_percent double precision
);

reclassarg

reclassarg - 是一个复合类型,用于作为输入到 ST_Reclass 函数中,以定义重分类的行为。

CREATE TYPE reclassarg AS (
    nband int,
    reclassexpr text,
    pixeltype text,
    nodataval double precision
);

agg_samealignment

agg_samealignment - 是一个数据类型,用于处理与空间数据相关的聚合操作。

CREATE TYPE agg_samealignment AS (
    refraster raster,
    aligned boolean
);

unionarg

unionarg - 用于 ST_Union 函数的复合类型。它定义了要处理的波段和 UNION 操作的行为。

CREATE TYPE unionarg AS (
    nband int,
    uniontype text
);