8.12. 栅格运算符
8.12.1. &&
&& — 如果输入对象 A 的 bounding box 与输入对象 B 的 bounding box 有交集,则返回 TRUE。
用法
boolean &&( raster A , raster B );
描述
如果输入栅格 A 的 bounding box 与输入栅格 B 的 bounding box 有交集,则返回 TRUE。
注意
这个函数会充分利用栅格上的任意索引。
样例
SELECT A.rid As a_rid, B.rid As b_rid, A.rast && B.rast As intersect FROM dummy_rast AS A CROSS JOIN dummy_rast AS B LIMIT 3; a_rid| b_rid| intersect -----+------+--------- 2 | 2 | t 2 | 3 | f 2 | 1 | f
8.12.2. &<
&< — 如果栅格 A 的缓冲区在 B 的左边,那么返回 true。
用法
boolean &<( raster A , raster B );
描述
如果输入栅格 A 的 bounding box 与输入栅格 B 的 bounding box 重合或者在后者的右边,则返回 TRUE。 或者更准确地说,覆盖或者不在栅格 B 的 bounding box 的右侧。
注意
这个函数会充分利用几何对象上的任意索引。
样例
SELECT A.rid As a_rid, B.rid As b_rid, A.rast &< B.rast As overleft FROM dummy_rast AS A CROSS JOIN dummy_rast AS B; a_rid| b_rid| overleft -----+------+---------- 2 | 2 | t 2 | 3 | f 2 | 1 | f 3 | 2 | t 3 | 3 | t 3 | 1 | f 1 | 2 | t 1 | 3 | t 1 | 1 | t
8.12.3. &>
&> — 如果 A 的 bounding box 覆盖或在 B 的 bounding box 的右侧,则返回 TRUE。
用法
boolean &>( raster A , raster B );
描述
如果 A 的 bounding box 覆盖或在 B 的 bounding box 的右侧,则返回 TRUE,或者更准确地说覆盖或者不在栅格 B 的 bounding box 的左侧。
注意
这个函数会充分利用几何对象上的任意索引。
样例
SELECT A.rid As a_rid, B.rid As b_rid, A.rast &> B.rast As overright FROM dummy_rast AS A CROSS JOIN dummy_rast AS B; a_rid| b_rid| overright -----+------+---------- 2 | 2 | t 2 | 3 | t 2 | 1 | t 3 | 2 | f 3 | 3 | t 3 | 1 | f 1 | 2 | f 1 | 3 | t 1 | 1 | t
8.12.4. =
= —— 如果栅格 A 的 bounding box 与 B 的 bounding box 相同,则返回 TRUE。注意:输入的栅格 A 和 B 的 bounding box 都是双精度。
用法
boolean =( raster A , raster B );
描述
如果 geometry 或 geography 对象 A 的 bounding box 与 geometry 或 geography 对象 B 的 bounding box 相同,则返回 TRUE。 KingbaseES 使用针对栅格定义的运算符 =,<和> 来进行内部排序和栅格之间的比较(例如在 GROUP BY 或 ORDER BY 这样的 SQL 子 句中)。
警告
这个运算符不会使用栅格上的任何索引,使用运算符~= 代替,这个运算符可以用于栅格列的聚合操作。
参考
~=
8.12.5. ~=
~= — 如果栅格 A 的缓冲区和栅格 B 的缓冲区相同,则返回 true。
用法
boolean ~=( raster A , raster B );
描述
如果栅格 A 的缓冲区和栅格 B 的缓冲区相同,则返回 true。
注意
这个函数会充分利用栅格上的任意索引。
样例
非常有用的用例是:以两套单波段栅格,但每一个栅格代表不同的主题,用来创建一个多波段的栅格。
SELECT ST_AddBand(prec.rast, alt.rast) As new_rast FROM prec INNER JOIN alt ON (prec.rast ~= alt.rast);
参考
ST_AddBand, =
8.13. 栅格和栅格波段空间关系函数
8.13.1. ST_Contains
ST_Contains — 当且仅当栅格 rastB 的所有点没有在栅格 rastA 的外部,并且 rastB 最少有一个点在 rastA 的内部。
用法
boolean ST_Contains( raster rastA , integer nbandA , raster rastB , integer nbandB ); boolean ST_Contains( raster rastA , raster rastB );
描述
当且仅当栅格 rastB 的所有点没有在栅格 rastA 的外部,并且 rastB 最少有一个点在 rastA 的内部。 如果没有指定是哪个波段(或设置为 NULL),只有栅格的凸包会被考虑,如果提供了波段号,只有值不为 NODATA 的像素会被考虑处理。
注意
这个函数会充分利用栅格上的任意索引。
注意
要想测试一个栅格和一个几何对象的空间关系,对栅格使用函数 ST_Polygon,ST_Contains (ST_Polygon (raster), geometry) 或 ST_Contains (geometry, ST_Polygon (raster)) 。
注意
函数 ST_Contains () 是函数 ST_Within () 相反效果的函数,因此函数 ST_Contains (rastA, rastB) 的结果和函数 ST_Within (rastB, rastA) 的结果一样。
样例
-- specified band numbers 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; NOTICE: The first raster provided has no bands rid| rid | st_contains ---+-----+------------- 1 | 1 | 1 | 2 | f -- no band numbers specified 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| rid | st_contains ---+-----+------------- 1 | 1 | t 1 | 2 | f
参考
ST_Intersects, ST_Within
8.13.2. ST_ContainsProperly
ST_ContainsProperly — 如果输入栅格 B 和栅格 A 的内部相交,但不和 A 的边界(或外部)有接触,那么返回 TRUE。
用法
boolean ST_ContainsProperly( raster rastA , integer nbandA , raster rastB , integer nbandB ); boolean ST_ContainsProperly( raster rastA , raster rastB );
描述
如果输入栅格 B 和栅格 A 的内部相交,但不和 A 的边界(或外部)有接触,那么返回 TRUE。 如果没有指定波段(或者设定为 NULL 值),那么该函数只适用于凸包型的栅格,如果指定了波段,那么只有有像元值(非 NODATA)的栅格适用于这个函数。
注意
这个函数会充分利用栅格上的任意索引。
注意
要想测试一个栅格和一个几何对象之间的关系,对栅格应用函数 ST_Polygon, 例如 ST_ContainsProperly (ST_Polygon (raster), geometry) 或 ST_ContainsProperly (geometry, ST_Polygon (raster)) 。
样例
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| rid | st_containsproperly ---+-----+--------------------- 2 | 1 | f 2 | 2 | f
参考
ST_Intersects, ST_Contains
8.13.3. ST_Covers
ST_Covers — 如果栅格 rastB 没有点在栅格 rastA 外,则返回 true。
用法
boolean ST_Covers( raster rastA , integer nbandA , raster rastB , integer nbandB ); boolean ST_Covers( raster rastA , raster rastB );
描述
如果栅格 rastB 没有点在栅格 rastA 外,则返回 true。如果没有指定波段(或者设定为 NULL 值),那么该函数只适用于凸包型的栅格, 如果指定了波段,那么只有有像元值(非 NODATA)的栅格适用于这个函数。
注意
这个函数会充分利用栅格上的任意索引。
注意
想要测试一个栅格和一个几何对象的空间关系,对栅格使用函数 ST_Polygon, 例如 ST_Covers (ST_Polygon (raster), geometry) 或 ST_Covers (geometry, ST_Polygon (raster)) 。
样例
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|rid| st_covers ---+---+----------- 2 | 1 | f 2 | 2 | t
参考
ST_Intersects, ST_CoveredBy
8.13.4. ST_CoveredBy
ST_CoveredBy — 如果栅格 rastA 没有点在栅格 rastB 外,则返回 true。
用法
boolean ST_CoveredBy( raster rastA , integer nbandA , raster rastB , integer nbandB ); boolean ST_CoveredBy( raster rastA , raster rastB );
描述
如果栅格 rastA 没有点在栅格 rastB 外,则返回 true。 如果没有指定波段(或者设定为 NULL 值),那么该函数只适用于凸包型的栅格,如果指定了波段,那么只有有像元值(非 NODATA)的栅格适用于这个函数。
注意
这个函数会充分利用栅格上的任意索引。
注意
想要测试一个栅格和一个几何对象的空间关系,对栅格使用函数 ST_Polygon, 例如 ST_CoveredBy (ST_Polygon (raster), geometry) 或 ST_CoveredBy (geometry, ST_Polygon (raster)) 。
样例
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|rid| st_coveredby ---+---+-------------- 2 | 1 | f 2 | 2 | t
参考
ST_Intersects, ST_Covers
8.13.5. ST_Disjoint
ST_Disjoint — 如果两个栅格 rastA 和栅格 rastB 没有空间相交,则返回 true。
用法
boolean ST_Disjoint( raster rastA , integer nbandA , raster rastB , integer nbandB ); boolean ST_Disjoint( raster rastA , raster rastB );
描述
如果两个栅格 rastA 和栅格 rastB 没有空间相交,则返回 true。 如果没有指定波段(或者设定为 NULL 值),那么该函数只适用于凸包型的栅格,如果指定了波段,那么只有有像元值(非 NODATA)的栅格适用于这个函数。
注意
该函数不使用任何索引。
注意
想要测试一个栅格和一个几何对象的空间关系,对栅格使用函数 ST_Polygon, 例如 ST_Disjoint (ST_Polygon (raster), geometry) 。
样例
-- rid = 1 has no bands, hence the NOTICE and the NULL value for st_disjoint 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; NOTICE: The second raster provided has no bands rid|rid| st_disjoint ---+---+------------- 2 | 1 | 2 | 2 | f -- this time, without specifying band numbers 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|rid| st_disjoint ---+---+------------- 2 | 1 | t 2 | 2 | f
参考
ST_Intersects
8.13.6. ST_Intersects
ST_Intersects — 如果栅格 rastA 和栅格 rastB 空间上相交,则返回 true。
用法
boolean ST_Intersects( raster rastA , integer nbandA , raster rastB , integer nbandB ); boolean ST_Intersects( raster rastA , raster rastB ); boolean ST_Intersects( raster rast , integer nband , geometry geommin); boolean ST_Intersects( raster rast , geometry geommin , integer nband=NULL ); boolean ST_Intersects( geometry geommin , raster rast , integer nband=NULL );
描述
如果栅格 rastA 和栅格 rastB 空间上相交,则返回 true。 如果没有指定波段(或者设定为 NULL 值),那么该函数只适用于凸包型的栅格,如果指定了波段,那么只有有像元值(非 NODATA)的栅格适用于这个函数。
注意
这个函数会充分利用栅格上的任意索引。
样例
-- different bands of same raster SELECT ST_Intersects(rast, 2, rast, 3) FROM dummy_rast WHERE rid = 2; st_intersects --------------- t
参考
ST_Intersection, ST_Disjoint
8.13.7. ST_Overlaps
ST_Overlaps — 如果栅格 rastA 和 rastB 相交,但是一个并没有完全包含另一个,则返回 true。
用法
boolean ST_Overlaps( raster rastA , integer nbandA , raster rastB , integer nbandB ); boolean ST_Overlaps( raster rastA , raster rastB );
描述
如果栅格 rastA 和 rastB 相交,但是一个并没有完全包含另一个,则返回 true。 如果没有指定波段(或者设定为 NULL 值),那么该函数只适用于凸包型的栅格,如果指定了波段,那么只有有像元值(非 NODATA)的栅格适用于这个函数。
注意
这个函数会充分利用栅格上的任意索引。
注意
想要测试一个栅格和一个几何对象的空间关系,在栅格上使用函数 ST_PolygonST_Overlaps (ST_Polygon (raster), geometry) 。
样例
-- comparing different bands of same raster SELECT ST_Overlaps(rast, 1, rast, 2) FROM dummy_rast WHERE rid = 2; st_overlaps ------------- f
参考
ST_Intersects
8.13.8. ST_Touches
ST_Touches — 如果两个栅格 rastA 和 rastB 有至少一个共同点,但内部并不相交,那么返回 true。
用法
boolean ST_Touches( raster rastA , integer nbandA , raster rastB , integer nbandB ); boolean ST_Touches( raster rastA , raster rastB );
描述
如果两个栅格 rastA 和 rastB 有至少一个共同点,但内部并不相交,那么返回 true。 如果没有指定波段(或者设定为 NULL 值),那么该函数只适用于凸包型的栅格,如果指定了波段,那么只有有像元值(非 NODATA)的栅格适用于这个函数。
注意
这个函数会充分利用栅格上的任意索引。
注意
想要测试一个栅格和一个几何对象的空间关系,在栅格上使用函数 ST_Polygon,例如 ST_Touches (ST_Polygon (raster), geometry) 。
样例
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|rid| st_touches ---+---+------------ 2 | 1 | f 2 | 2 | f
参考
ST_Intersects
8.13.9. ST_SameAlignment
ST_SameAlignment — 如果上之间有相同的特征值 skew, scale, spatial ref(即 SRID),则返回 true。如果有不同,则返回 false。
用法
boolean ST_SameAlignment( raster rastA , raster rastB ); boolean ST_SameAlignment( double precision ulx1 , double precision uly1 , double precision scalex1 , double precision scaley1, double precision skewx1 , double precision skewy1 , double precision ulx2 , double precision uly2 , double precision scalex2 ,double precision scaley2 , double precision skewx2 , double precision skewy2 ); boolean ST_SameAlignment( raster set rastfield );
描述
非聚合函数版本 (函数变体 1 和函数变体 2): 如果两个栅格(或者直接提供或者使用参数 upperleft, scale, skew 和 srid 的值)有相同的参数 scale, skew, srid 和至少有一个栅格的任意像素的任意角点和另一个栅格的任意像素的任意角点重叠,那么返回 true。如果不满足这些条件将会返回 false,并提示对齐方式的细节问题。
聚合版本 (函数变体 3):如果一个集合的栅格都 aligned(对齐),那么返回 true。函数 ST_SameAlignment () 从 KingbaseES 的术语来看是一个 “聚合” 函数。这意味着它的执行方式和 SQL 里面的函数 SUM () 和 AVG () 是类似的。
样例 : Rasters
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 ---- t SELECT ST_SameAlignment(A.rast,b.rast) FROM dummy_rast AS A CROSS JOIN dummy_rast AS B; NOTICE: The two rasters provided have different SRIDsNOTICE: The two rasters provided have different SRIDs st_samealignment ------------------ t f f f
参考
6.1 节,ST_NotSameAlignmentReason, ST_MakeEmptyRaster
8.13.10. ST_NotSameAlignmentReason
ST_NotSameAlignmentReason — 如果栅格对齐了那么返回描述信息,如果没有对齐,返回没有对齐的原因。
用法
boolean ST_SameAlignment(raster rastA, raster rastB);
描述
如果栅格对齐了那么返回描述信息,如果没有对齐,返回没有对齐的原因。
注意
如果栅格没有对齐有多种原因,那么只返回其中一个原因(第一个让对齐失败的理由)。
样例
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 |st_notsamealignmentreason ------------------+------------------------------------------------- f | The rasters have different scales on the X axis (1 row)
参考
6.1 节,ST_SameAlignment
8.13.11. ST_Within
ST_Within — 当且仅当栅格 rastA 的所有点没有在栅格 rastB 的外部,并且 rastA 最少有一个点在 rastB 的内部。
用法
boolean ST_Within( raster rastA , integer nbandA , raster rastB , integer nbandB ); boolean ST_Within( raster rastA , raster rastB );
描述
当且仅当栅格 rastA 的所有点没有在栅格 rastB 的外部,并且 rastA 最少有一个点在 rastB 的内部。
如果没有指定波段(或者设定为 NULL 值),那么该函数只适用于凸包型的栅格,如果指定了波段,那么只有有像元值(非 NODATA)的栅格适用于这个函数。
注意
这个函数会充分利用栅格上的任意索引。
注意
要想测试一个栅格和一个几何对象的空间关系,对栅格使用函数 ST_Polygon,例如 ST_Within (ST_Polygon (raster), geometry) 或 ST_Within (geometry, ST_Polygon (raster)) .
注意
函数 ST_Within () 是函数 ST_Contains () 的逆实现,因此函数 ST_Within (rastA, rastB) 与函数 ST_Contains (rastB, rastA) 调用结果相同。
样例
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|rid| st_within ---+---+----------- 2 | 1 | f 2 | 2 | t
参考
ST_Intersects, ST_Contains, ST_DWithin, ST_DFullyWithin
8.13.12. ST_DWithin
ST_DWithin — 如果栅格 rastA 和栅格 rastB 的距离在指定的距离内,则返回 true。
用法
boolean ST_DWithin( raster rastA , integer nbandA , raster rastB , integer nbandB , double precision distance_of_srid ); boolean ST_DWithin( raster rastA , raster rastB , double precision distance_of_srid );
描述
如果栅格 rastA 和栅格 rastB 的距离在指定的距离内,则返回 true。 如果没有指定波段(或者设定为 NULL 值),那么该函数只适用于凸包型的栅格,如果指定了波段,那么只有有像元值(非 NODATA)的栅格适用于这个函数。距离单位是由栅格所在的空间参考系所定义的。 要想使用这个函数,输入的源栅格必须都有相同的坐标参考系也就是有相同的 SRID。
注意
这个函数会充分利用栅格上的任意索引。
注意
想要测试栅格和几何对象之间的关系,需要对栅格使用函数 ST_Polygon,例如 ST_DWithin (ST_Polygon (raster), geometry) 。
样例
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|rid| st_dwithin ---+---+------------ 2 | 1 | f 2 | 2 | t
参考
ST_Within, ST_DFullyWithin
8.13.13. ST_DFullyWithin
ST_DFullyWithin — 如果栅格 rastA 和栅格 rastB 的距离完全在指定的距离内,则返回 true。
用法
boolean ST_DFullyWithin( raster rastA , integer nbandA , raster rastB , integer nbandB , double precision distance_of_srid ); boolean ST_DFullyWithin( raster rastA , raster rastB , double precision distance_of_srid );
描述
如果栅格 rastA 和栅格 rastB 的距离完全在指定的距离内,则返回 true。 如果没有指定波段(或者设定为 NULL 值),那么该函数只适用于凸包型的栅格,如果指定了波段,那么只有有像元值(非 NODATA)的栅格适用于这个函数。 距离单位是由栅格所在的空间参考系所定义的。要想使用这个函数,输入的源栅格必须都有相同的坐标参考系也就是有相同的 SRID。
注意
这个函数会充分利用栅格上的任意索引。
注意
想要测试栅格和几何对象之间的关系,需要在栅格上使用函数 ST_Polygon,例如:ST_DFullyWithin (ST_Polygon (raster), geometry) 。
样例
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|rid| st_dfullywithin ---+---+----------------- 2 | 1 | f 2 | 2 | t
参考
ST_Within, ST_DWithin