名称

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,因为它具有更简单的定义,没有“边界不在其几何中”的怪癖。

[Note]

此函数自动包含一个边界框比较,该比较利用几何上可用的任何空间索引。

要避免使用索引,请使用函数 _ST_CoveredBy

[Important]

增强:3.0.0 启用对 GEOMETRYCOLLECTION 的支持

[Important]

请勿对无效几何使用此函数。您将得到意外的结果。

由 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) 

另请参见

ST_ContainsST_CoversST_ExteriorRingST_Within