名称

ST_ContainsProperly — 测试 B 的每个点是否都位于 A 的内部

大纲

boolean ST_ContainsProperly(geometry geomA, geometry geomB);

描述

如果 B 的每个点都位于 A 的内部(或者等效地,B 的任何点都不位于 A 的边界或外部),则返回 true

用数学术语来说: ST_ContainsProperly(A, B) ⇔ Int(A) ⋂ B = B

如果两个几何图形的 DE-9IM 交集矩阵匹配 [T**FF*FF*],则 A 正确包含 B

A 没有正确地包含自身,但确实包含自身。

计算一组几何图形与大型多边形几何图形的交集时,请使用此谓词。 交叉点相当慢,因此您可以使用 ContainsProperly 提取完全位于该区域内的感兴趣的几何图形,这非常高效。 在这些场景中,直观地看出交集确实是原始目标几何体。

[注意]

此功能自动包括利用几何上可用的任何空间索引的边界框比较。 要避免使用索引,请使用函数 _ST_ContainsProperly

[注意]

该谓词相对于 ST_ContainsST_Intersects 的优点是可以更有效地计算,无需计算各个点的拓扑。

这个函数是由 GEOS 模块执行的。

可用性:1.4.0

增强:3.0.0 启用了对 GEOMETRYCOLLECTION 的支持

[重要]

请勿将此函数用于无效的几何图形。 你会得到意想不到的结果。

示例

This example tests a circle within another circle.

Code
WITH circles AS (
  SELECT ST_Buffer(center, 10) AS smallc,
         ST_Buffer(center, 20) AS bigc
  FROM (SELECT 'POINT(1 2)'::geometry AS center) AS p
)
SELECT
  ST_ContainsProperly(smallc, bigc) AS smallcontainspropbig,
  ST_ContainsProperly(bigc, smallc) AS bigcontainspropsmall,
  ST_ContainsProperly(bigc, ST_Union(smallc, bigc)) AS bigcontainspropunion,
  ST_Equals(bigc, ST_Union(smallc, bigc)) AS bigisunion,
  ST_Covers(bigc, ST_ExteriorRing(bigc)) AS bigcoversexterior,
  ST_ContainsProperly(bigc, ST_ExteriorRing(bigc)) AS bigcontainsexterior
FROM circles;
栅格输出
-[ RECORD 1 ]-----
smallcontainspropbig   | f
bigcontainspropsmall   | t
bigcontainspropunion   | f
bigisunion             | t
bigcoversexterior      | t
bigcontainsexterior    | f
Figure
Geometry figure for visual-st-containsproperly-01

This example demonstrates the difference between contains and contains-properly predicates.

Code
WITH input(geom) AS (VALUES
  (ST_Buffer(ST_Point(1, 1), 5, 1)),
  (ST_MakeLine(ST_Point(1, 1), ST_Point(-1, -1))),
  (ST_Point(1, 1))
)
SELECT ST_GeometryType(geom) AS geomtype,
       ST_Contains(geom, geom) AS acontainsa,
       ST_ContainsProperly(geom, geom) AS acontainspropa,
       ST_Contains(geom, ST_Boundary(geom)) AS acontainsba,
       ST_ContainsProperly(geom, ST_Boundary(geom)) AS acontainspropba
FROM input;
栅格输出
geomtype    | acontainsa | acontainspropa | acontainsba | acontainspropba
--------------+------------+----------------+-------------+-----------------
ST_Polygon    | t          | f              | f           | f
ST_LineString | t          | f              | f           | f
ST_Point      | t          | t              | f           | f
 
Figure
Geometry figure for visual-st-containsproperly-02