栅格和栅格波段空间关系函数¶
ST_Contains¶
ST_Contains — 如果栅格栅格B的点没有位于栅格RASTA的外部,并且栅格B的内部至少有一个点位于RASTA的内部,则返回TRUE。
返回值¶
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。
返回值¶
如果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。
返回值¶
如果栅格栅格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。
返回值¶
如果没有栅格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。
返回值¶
如果栅格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。
参数¶
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。
返回值¶
如果栅格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。
返回值¶
如果栅格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。
参数¶
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。
返回值¶
如果栅格具有相同的倾斜、比例、空间参考和偏移量(像素可以放在相同的网格上,而不会剪切成像素),则返回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 — 返回文本,说明栅格是否对齐,如果未对齐,则说明原因。
返回值¶
返回文本,说明栅格是否对齐,如果未对齐,则说明原因。
示例¶
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。
返回值¶
如果栅格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。
返回值¶
如果栅格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。
返回值¶
如果栅格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