栅格和栅格波段空间关系函数

ST_Contains

ST_Contains — 如果栅格栅格B的点没有位于栅格RASTA的外部,并且栅格B的内部至少有一个点位于RASTA的内部,则返回TRUE。

语法

st_contains ::=

参数

rast1

raster 类型

nband1

int 类型

rast2

raster 类型

nband2

int 类型

返回值

Rasta包含rastB当且仅当rastB的点没有位于rastA的外部并且rastB的内部至少有一个点位于rastA的内部。返回TRUE。

示例

SELECT r1.rid, r2.rid, ST_Contains(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 1;
RID(int)      |RID(int)      |ST_CONTAINS(boolean)      |
------------------------------------------------------
1             |1             |null                      |
------------------------------------------------------
1             |2             |false                     |
总数目:2

SELECT r1.rid, r2.rid, ST_Contains(r1.rast, r2.rast) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 1;
RID(int)      |RID(int)      |ST_CONTAINS(boolean)      |
------------------------------------------------------
1             |1             |true                      |
------------------------------------------------------
1             |2             |false                     |
总数目:2

ST_ContainsProperly

ST_ContainsProperly — 如果rastB与Rasta的内部相交,但不与Rasta的边界或外部相交,则返回TRUE。

语法

st_containsproperly ::=

参数

rast1

raster 类型

nband1

int 类型

rast2

raster 类型

nband2

int 类型

返回值

如果rastB与Rasta的内部相交,但不与Rasta的边界或外部相交,则返回TRUE。

示例

SELECT r1.rid, r2.rid, ST_ContainsProperly(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_CONTAINSPROPERLY(boolean)      |
--------------------------------------------------------------
2             |1             |false                             |
--------------------------------------------------------------
2             |2             |false                             |
总数目:2

SELECT r1.rid, r2.rid, ST_ContainsProperly(r1.rast, r2.rast) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_CONTAINSPROPERLY(boolean)      |
--------------------------------------------------------------
2             |1             |false                             |
--------------------------------------------------------------
2             |2             |false                             |
总数目:2

ST_Covers

ST_Covers — 如果栅格栅格B的点没有位于栅格RASTA之外,则返回TRUE。

语法

st_covers ::=

参数

rast1

raster 类型

nband1

int 类型

rast2

raster 类型

nband2

int 类型

返回值

如果栅格栅格B的点没有位于栅格RASTA之外,则返回TRUE。

示例

SELECT r1.rid, r2.rid, ST_Covers(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_COVERS(boolean)      |
----------------------------------------------------
2             |1             |false                   |
----------------------------------------------------
2             |2             |true                    |
总数目:2

SELECT r1.rid, r2.rid, ST_Covers(r1.rast, r2.rast) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_COVERS(boolean)      |
----------------------------------------------------
2             |1             |false                   |
----------------------------------------------------
2             |2             |true                    |
总数目:2

ST_CoveredBy

ST_CoveredBy — 如果没有栅格RASTA的点位于栅格B之外,则返回TRUE。

语法

st_coveredby ::=

参数

rast1

raster 类型

nband1

int 类型

rast2

raster 类型

nband2

int 类型

返回值

如果没有栅格RASTA的点位于栅格B之外,则返回TRUE。

示例

SELECT r1.rid, r2.rid, ST_CoveredBy(r1.rast, r2.rast) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_COVEREDBY(boolean)      |
-------------------------------------------------------
2             |1             |false                      |
-------------------------------------------------------
2             |2             |true                       |
总数目:2

SELECT r1.rid, r2.rid, ST_CoveredBy(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_COVEREDBY(boolean)      |
-------------------------------------------------------
2             |1             |false                      |
-------------------------------------------------------
2             |2             |true                       |
总数目:2

ST_Disjoint

ST_Disjoint — 如果栅格RASTA在空间上不与rastB相交,则返回TRUE。

语法

st_disjoint ::=

参数

rast1

raster 类型

nband1

int 类型

rast2

raster 类型

nband2

int 类型

返回值

如果栅格RASTA在空间上不与rastB相交,则返回TRUE。

示例

SELECT r1.rid, r2.rid, ST_Disjoint(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_DISJOINT(boolean)      |
------------------------------------------------------
2             |1             |null                      |
------------------------------------------------------
2             |2             |false                     |
总数目:2

SELECT r1.rid, r2.rid, ST_Disjoint(r1.rast, r2.rast) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_DISJOINT(boolean)      |
------------------------------------------------------
2             |1             |true                      |
------------------------------------------------------
2             |2             |false                     |
总数目:2

ST_Intersects

ST_Intersects — 如果栅格RASTA与栅格栅格B在空间上相交,则返回TRUE。

语法

st_intersects ::=

参数

rast1

raster 类型

nband1

int 类型

rast2

raster 类型

nband2

int 类型

geom

geometry 类型

rast

raster 类型

nband

int 类型,默认值 NULL

nband2

int 类型

返回值

如果栅格RASTA与栅格栅格B在空间上相交,则返回TRUE。

示例

WITH foo AS (
SELECT 0 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0) AS rast UNION ALL
SELECT 1, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, 0, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0) AS rast
UNION ALL
SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, 0, 1, -1, 0, 0, 0), 1, '16BUI', 3, 0) AS rast
UNION ALL
SELECT 3, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -2, 1, -1, 0, 0, 0), 1, '16BUI', 10, 0) AS rast
UNION ALL
SELECT 4, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -2, 1, -1, 0, 0, 0), 1, '16BUI', 20, 0) AS rast
UNION ALL
SELECT 5, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -2, 1, -1, 0, 0, 0), 1, '16BUI', 30, 0) AS rast
UNION ALL
SELECT 6, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, -4, 1, -1, 0, 0, 0), 1, '16BUI', 100, 0) AS rast
UNION ALL
SELECT 7, ST_AddBand(ST_MakeEmptyRaster(2, 2, 2, -4, 1, -1, 0, 0, 0), 1, '16BUI', 200, 0) AS rast
UNION ALL
SELECT 8, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -4, 1, -1, 0, 0, 0), 1, '16BUI', 300, 0) AS rast
)
SELECT
t1.rid,
ST_MapAlgebra(
ARRAY[ROW(ST_Union(t2.rast), 1)]::rastbandarg[],
'sample_callbackfunc(double precision[], int[], text[])'::regprocedure,
'32BUI','CUSTOM', t1.rast,1, 1) AS rast
FROM foo t1
CROSS JOIN foo t2
WHERE t1.rid = 4
AND t2.rid BETWEEN 0 AND 8
AND ST_Intersects(t1.rast, t2.rast)
GROUP BY t1.rid, t1.rast;
RID(int)      |RAST(RASTER)      |
--------------------------------
4             |010000010000000000|
              |0000F03F000000000|
              |000F0BF0000000000|
              |00004000000000000|
              |000C0000000000000|
              |00000000000000000|
              |00000000000020002|
              |00680000000000000|
              |00000000000000000|
              |0000000000        |
总数目:1


SELECT ST_Intersects(rast, 2, rast, 3) FROM dummy_rast WHERE rid = 2;
ST_INTERSECTS(boolean)      |
----------------------------
true                        |
总数目:1


SELECT ST_AsText(ST_Union(pixpolyg)) As shadow
FROM (SELECT ST_Translate(ST_MakeEnvelope(
ST_UpperLeftX(rast), ST_UpperLeftY(rast),
ST_UpperLeftX(rast) + ST_ScaleX(rast),
ST_UpperLeftY(rast) + ST_ScaleY(rast), 0
), ST_ScaleX(rast)*x, ST_ScaleY(rast)*y ) As pixpolyg, ST_Value(rast, 2, x, y) As b2val
FROM dummy_rast CROSS JOIN
generate_series(1,1000) As x CROSS JOIN generate_series(1,1000) As y
WHERE rid = 2
AND x <= ST_Width(rast) AND y <= ST_Height(rast) order by pixpolyg, b2val) As foo
WHERE
ST_Intersects(
pixpolyg,
ST_GeomFromText('POLYGON((3427928 5793244,3427927.75 5793243.75,3427928 5793243.75,3427928 5793244))',0)
) AND b2val != 254;
SHADOW(text)      |
------------------
MULTIPOLYGON(((342|
7928 5793243.9,34|
27928 5793243.85,|
3427927.95 579324|
3.85,3427927.95 5|
793243.9,3427927.|
95 5793243.95,342|
7928 5793243.95,3|
427928.05 5793243|
.95,3427928.05 57|
93243.9,3427928 5|
793243.9)),((3427|
927.9 5793243.85,|
3427927.85 579324|
3.85,3427927.85 5|
793243.9,3427927.|
9 5793243.9,34279|
27.9 5793243.95,3|
427927.95 5793243|
.95,3427927.95 57|
93243.9,3427927.9|
5 5793243.85,3427|
927.9 5793243.85)|
),((3427927.85 57|
93243.75,3427927.|
85 5793243.7,3427|
927.8 5793243.7,3|
427927.8 5793243.|
75,3427927.8 5793|
243.8,3427927.8 5|
793243.85,3427927|
.85 5793243.85,34|
27927.85 5793243.|
8,3427927.85 5793|
243.75)),((342792|
8.05 5793243.75,3|
427928.05 5793243|
.7,3427928 579324|
3.7,3427927.95 57|
93243.7,3427927.9|
5 5793243.75,3427|
927.95 5793243.8,|
3427927.95 579324|
3.85,3427928 5793|
243.85,3427928 57|
93243.8,3427928.0|
5 5793243.8,34279|
28.05 5793243.75)|
),((3427927.95 57|
93243.75,3427927.|
95 5793243.7,3427|
927.9 5793243.7,3|
427927.85 5793243|
.7,3427927.85 579|
3243.75,3427927.8|
5 5793243.8,34279|
27.85 5793243.85,|
3427927.9 5793243|
.85,3427927.95 57|
93243.85,3427927.|
95 5793243.8,3427|
927.95 5793243.75|
)))               |
总数目:1

ST_Overlaps

ST_Overlaps — 如果栅格RastA和rastB相交,但其中一个没有完全包含另一个,则返回TRUE。

语法

st_overlaps ::=

参数

rast1

raster 类型

nband1

int 类型

rast2

raster 类型

nband2

int 类型

返回值

如果栅格RastA和rastB相交,但其中一个没有完全包含另一个,则返回TRUE。

示例

SELECT ST_Overlaps(rast, 1, rast, 2) FROM dummy_rast WHERE rid = 2;
ST_OVERLAPS(boolean)      |
--------------------------
false                     |
总数目:1

SELECT ST_Overlaps(rast, rast) FROM dummy_rast WHERE rid = 2;
ST_OVERLAPS(boolean)      |
--------------------------
false                     |
总数目:1

ST_Touches

ST_Touches — 如果栅格RastA和rastB至少有一个共同点,但其内部不相交,则返回TRUE。

语法

st_touches ::=

参数

rast1

raster 类型

nband1

int 类型

rast2

raster 类型

nband2

int 类型

返回值

如果栅格RastA和rastB至少有一个共同点,但其内部不相交,则返回TRUE。

示例

SELECT r1.rid, r2.rid, ST_Touches(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_TOUCHES(boolean)      |
-----------------------------------------------------
2             |1             |false                    |
-----------------------------------------------------
2             |2             |false                    |
总数目:2

SELECT r1.rid, r2.rid, ST_Touches(r1.rast, r2.rast) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_TOUCHES(boolean)      |
-----------------------------------------------------
2             |1             |false                    |
-----------------------------------------------------
2             |2             |false                    |
总数目:2

ST_SameAlignment

ST_SameAlignment — 如果栅格具有相同的倾斜、比例、空间参考和偏移量(像素可以放在相同的网格上,而不会剪切成像素),则返回True,如果没有注意细节问题,则返回False。

语法

st_samealignment ::=

参数

ulx1

float8 类型

uly1

float8 类型

scalex1

float8 类型

scaley1

float8 类型

skewx1

float8 类型

skewy1

float8 类型

ulx2

float8 类型

uly2

float8 类型

scalex2

float8 类型

scaley2

float8 类型

skewx2

float8 类型

skewy2

float8 类型

返回值

如果栅格具有相同的倾斜、比例、空间参考和偏移量(像素可以放在相同的网格上,而不会剪切成像素),则返回True,如果没有注意细节问题,则返回False。

示例

SELECT ST_SameAlignment(ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0),ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0)) as sm;
SM(boolean)      |
-----------------
true             |
总数目:1

SELECT ST_SameAlignment(A.rast,b.rast) FROM dummy_rast AS A CROSS JOIN dummy_rast AS B;
ST_SAMEALIGNMENT(boolean)      |
-------------------------------
true                           |
-------------------------------
false                          |
-------------------------------
false                          |
-------------------------------
true                           |
总数目:4

ST_SameAlignment

ST_SameAlignment — 如果栅格具有相同的倾斜、比例、空间参考和偏移量(像素可以放在相同的网格上,而不会剪切成像素),则返回True,如果没有注意细节问题,则返回False。

语法

st_samealignment ::=

参数

rast1

raster 类型

rast2

raster 类型

返回值

如果栅格具有相同的倾斜、比例、空间参考和偏移量(像素可以放在相同的网格上,而不会剪切成像素),则返回True,如果没有注意细节问题,则返回False。

示例

SELECT ST_SameAlignment(ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0),ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0)) as sm;
SM(boolean)      |
-----------------
true             |
总数目:1

SELECT ST_SameAlignment(A.rast,b.rast) FROM dummy_rast AS A CROSS JOIN dummy_rast AS B;
ST_SAMEALIGNMENT(boolean)      |
-------------------------------
true                           |
-------------------------------
false                          |
-------------------------------
false                          |
-------------------------------
true                           |
总数目:4

ST_NotSameAlignmentReason

ST_NotSameAlignmentReason — 返回文本,说明栅格是否对齐,如果未对齐,则说明原因。

语法

st_notsamealignmentreason ::=

参数

rast1

raster 类型

rast2

raster 类型

返回值

返回文本,说明栅格是否对齐,如果未对齐,则说明原因。

示例

SELECT
ST_SameAlignment(
ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0),
ST_MakeEmptyRaster(1, 1, 0, 0, 1.1, 1.1, 0, 0)
),
ST_NotSameAlignmentReason(
ST_MakeEmptyRaster(1, 1, 0, 0, 1, 1, 0, 0),
ST_MakeEmptyRaster(1, 1, 0, 0, 1.1, 1.1, 0, 0)
) ;
ST_SAMEALIGNMENT(boolean)      |ST_NOTSAMEALIGNMENTREASON(text)      |
--------------------------------------------------------------------
false                          |The rasters have different scales on |
                               |the X axis                           |
总数目:1

ST_Within

ST_Within — 如果栅格RastA的点没有位于栅格rastB的外部,并且Rasta的内部至少有一个点位于rastB的内部,则返回TRUE。

语法

st_within ::=

参数

rast1

raster 类型

nband1

int 类型

rast2

raster 类型

nband2

int 类型

返回值

如果栅格RastA的点没有位于栅格rastB的外部,并且Rasta的内部至少有一个点位于rastB的内部,则返回TRUE。

示例

SELECT r1.rid, r2.rid, ST_Within(r1.rast, 1, r2.rast, 1) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_WITHIN(boolean)      |
----------------------------------------------------
2             |1             |false                   |
----------------------------------------------------
2             |2             |true                    |
总数目:2

SELECT r1.rid, r2.rid, ST_Within(r1.rast, r2.rast) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_WITHIN(boolean)      |
----------------------------------------------------
2             |1             |false                   |
----------------------------------------------------
2             |2             |true                    |
总数目:2

ST_DWithin

ST_DWithin — 如果栅格RastA和rastB彼此在指定距离内,则返回TRUE。

语法

st_dwithin ::=

参数

rast1

raster 类型

nband1

int 类型

rast2

raster 类型

nband2

int 类型

distance

float8 类型

返回值

如果栅格RASTA在空间上不与rastB相交,则返回TRUE。

示例

SELECT r1.rid, r2.rid, ST_DWithin(r1.rast, r2.rast, 3.14) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_DWITHIN(boolean)      |
-----------------------------------------------------
2             |1             |false                    |
-----------------------------------------------------
2             |2             |true                     |
总数目:2

SELECT r1.rid, r2.rid, ST_DWithin(r1.rast, 1, r2.rast, 1, 3.14) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_DWITHIN(boolean)      |
-----------------------------------------------------
2             |1             |false                    |
-----------------------------------------------------
2             |2             |true                     |
总数目:2

ST_DFullyWithin

ST_DFullyWithin — 如果栅格RastA和rastB彼此完全在指定距离内,则返回TRUE。

语法

st_dfullywithin ::=

参数

rast1

raster 类型

nband1

int 类型

rast2

raster 类型

nband2

int 类型

distance

float8 类型

返回值

如果栅格RastA和rastB彼此完全在指定距离内,则返回TRUE。

示例

SELECT r1.rid, r2.rid, ST_DFullyWithin(r1.rast, r2.rast, 3.14) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_DFULLYWITHIN(boolean)      |
----------------------------------------------------------
2             |1             |false                         |
----------------------------------------------------------
2             |2             |true                          |
总数目:2

SELECT r1.rid, r2.rid, ST_DFullyWithin(r1.rast, 1, r2.rast, 1, 3.14) FROM dummy_rast r1 CROSS JOIN dummy_rast r2 WHERE r1.rid = 2;
RID(int)      |RID(int)      |ST_DFULLYWITHIN(boolean)      |
----------------------------------------------------------
2             |1             |false                         |
----------------------------------------------------------
2             |2             |true                          |
总数目:2