ST_Covers — 测试 B 的每个点是否都位于 A 中
boolean ST_Covers(
geometry geomA, geometry geomB)
;
boolean ST_Covers(
geography geogpolyA, geography geogpointB)
;
如果几何/地理 B 中的每个点都位于几何/地理 A 内部(即与其内部或边界相交),则返回 true
。同样,测试 B 中没有点位于 A 外部(外部)。
用数学术语来说:ST_Covers(A, B) ⇔ A ⋂ B = B
ST_Covers 与 ST_CoveredBy相反。 因此,ST_Covers(A,B) = ST_CoveredBy(B,A)
。
一般来说,应该使用这个函数而不是ST_Contains,因为它有一个更简单的定义,不存在“几何图形不包含其边界”的奇怪情况。
此功能自动包括利用几何上可用的任何空间索引的边界框比较。 为了避免使用索引,请使用函数 |
增强:3.0.0 启用了对 |
请勿将此函数用于无效的几何图形。 你会得到意想不到的结果。 |
它是通过GEOS模块实现的
增强:2.4.0 为地理类型添加了对多边形中的多边形和多边形中的线的支持
增强:对于 2.3.0 几何图形,PIP 短路(仅限于多边形和点的快速判断)已得到增强,以支持由更少点组成的多点。 以前的版本仅支持面和点组合。
可用性:1.5 - 引入了地理支持。
可用性:1.2.2
注意:这是返回布尔值而不是整数的“允许”版本。
不是 OGC 标准,但 Oracle 也有。
几何示例
--a circle covering a circle SELECT ST_Covers(smallc,smallc) As smallinsmall, ST_Covers(smallc, bigc) As smallcoversbig, ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior, ST_Contains(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior 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 | smallcoversbig | bigcoversexterior | bigcontainsexterior --------------+----------------+-------------------+--------------------- t | f | t | f (1 row)
地理示例
-- a point with a 300 meter buffer compared to a point, a point and its 10 meter buffer SELECT ST_Covers(geog_poly, geog_pt) As poly_covers_pt, ST_Covers(ST_Buffer(geog_pt,10), geog_pt) As buff_10m_covers_cent FROM (SELECT ST_Buffer(ST_GeogFromText('SRID=4326;POINT(-99.327 31.4821)'), 300) As geog_poly, ST_GeogFromText('SRID=4326;POINT(-99.33 31.483)') As geog_pt ) As foo; poly_covers_pt | buff_10m_covers_cent ----------------+------------------ f | t