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_Contains 和 ST_Intersects 的优点在于,它可以更有效地计算,而无需计算各个点的拓扑。 |
由 GEOS 模块执行。
可用性:1.4.0
|
|
|
增强功能:3.0.0 启用了对 |
|
|
|
请勿将此函数与无效的几何体一起使用。您将获得意外的结果。 |
--a circle within a circle
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 (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,
ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;
--Result
smallcontainspropbig | bigcontainspropsmall | bigcontainspropunion | bigisunion | bigcoversexterior | bigcontainsexterior
------------------+------------------+------------------+------------+-------------------+---------------------
f | t | f | t | t | f
--example demonstrating difference between contains and contains properly
SELECT ST_GeometryType(geomA) As geomtype, ST_Contains(geomA,geomA) AS acontainsa, ST_ContainsProperly(geomA, geomA) AS acontainspropa,
ST_Contains(geomA, ST_Boundary(geomA)) As acontainsba, ST_ContainsProperly(geomA, ST_Boundary(geomA)) As acontainspropba
FROM (VALUES ( ST_Buffer(ST_Point(1,1), 5,1) ),
( ST_MakeLine(ST_Point(1,1), ST_Point(-1,-1) ) ),
( ST_Point(1,1) )
) As foo(geomA);
geomtype | acontainsa | acontainspropa | acontainsba | acontainspropba
--------------+------------+----------------+-------------+-----------------
ST_Polygon | t | f | f | f
ST_LineString | t | f | f | f
ST_Point | t | t | f | f