ST_CoveredBy — 测试 A 的每个点是否都位于 B 中
boolean ST_CoveredBy(
geometry geomA, geometry geomB)
;
boolean ST_CoveredBy(
geography geogA, geography geogB)
;
如果几何/地理 A 中的每个点都位于几何/地理 B 的内部(即与其内部或边界相交),则返回 true
。换句话说,测试 A 是否没有位于 B 之外的点。
用数学术语来说: ST_CoveredBy(A, B) ⇔ A ⋂ B = A
ST_CoveredBy 与 ST_Covers相反。 因此,ST_CoveredBy(A,B) = ST_Covers(B,A)
。
一般来说,应该使用此函数而不是ST_Within,因为它具有更简单的定义,不存在“边界不在其几何形状内”的奇怪情况。
此功能自动包括利用几何上可用的任何空间索引的边界框比较。 要避免使用索引,请使用函数 |
增强:3.0.0 启用了对 |
请勿将此函数用于无效的几何图形。 你会得到意想不到的结果。 |
它是通过GEOS模块实现的
可用性:1.2.2
注意:这是返回布尔值而不是整数的“允许”版本。
不是 OGC 标准,但 Oracle 也有。
--a circle coveredby a circle SELECT ST_CoveredBy(smallc,smallc) As smallinsmall, ST_CoveredBy(smallc, bigc) As smallcoveredbybig, ST_CoveredBy(ST_ExteriorRing(bigc), bigc) As exteriorcoveredbybig, ST_Within(ST_ExteriorRing(bigc),bigc) As exeriorwithinbig FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc, ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo; --Result smallinsmall | smallcoveredbybig | exteriorcoveredbybig | exeriorwithinbig --------------+-------------------+----------------------+------------------ t | t | t | f (1 row)