ST_CONTAINS
📄字数 1.5K
👁️阅读量 加载中...
功能描述
如果几何图形 A 包含几何图形 B,则返回 TRUE。
语法格式
sql
BOOLEAN ST_CONTAINS( GEOMETRY geomA , GEOMETRY geomB );参数说明
- geomA:第一个目标 GEOMETRY 对象。
- geomB:第二个目标 GEOMETRY 对象。
函数返回类型
BOOLEAN 类型
使用说明
- 当且仅当 B 的所有点都位于 A 内部(即在 A 的内部或边界中)时,A 包含 B(等效于:B 中没有点位于 A 的外部),并且 A 和 B 的内部至少有一个共同点。
- 数学术语:
ST_CONTAINS(A, B) ⇔ (A ⋂ B = B) ∧ (Int(A) ⋂ Int(B) ≠ ∅)。 - 包含关系是自反的:每个几何图形都包含其自身。(相反,ST_CONTAINSPROPERLY 函数,几何图形未正确包含自身。)
- 该关系是反对称的:如果
ST_CONTAINS(A,B) = TRUE且ST_CONTAINS(B,A) = TRUE,则两个几何图形在拓扑上相等 (ST_EQUALS(A,B) = TRUE)。 - ST_CONTAINS 与 ST_WITHIN 相反。 即:
ST_CONTAINS(A,B) = ST_WITHIN(B,A)。 - 因内部必须有一个公共点,所以多边形和线不包含完全位于其边界内的线和点。 ST_COVERS 提供了更具包容性的关系。
- 此功能自动包括利用几何上可用的任何空间索引的边界框比较。
- 此函数是通过GEOS模块实现的。
- 此函数支持 GEOMETRYCOLLECTION。
示例
一个圆在圆内部时:
sql
SQL> SELECT ST_CONTAINS(smallc, bigc) As smallcontainsbig,
ST_CONTAINS(bigc,smallc) As bigcontainssmall,
ST_CONTAINS(bigc, ST_Union(smallc, bigc)) as bigcontainsunion,
ST_EQUALS(bigc, ST_Union(smallc, bigc)) as bigisunion,
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;
+------------------+------------------+------------------+------------+-------------------+---------------------+
| SMALLCONTAINSBIG | BIGCONTAINSSMALL | BIGCONTAINSUNION | BIGISUNION | BIGCOVERSEXTERIOR | BIGCONTAINSEXTERIOR |
+------------------+------------------+------------------+------------+-------------------+---------------------+
| F | T | T | T | T | F |
+------------------+------------------+------------------+------------+-------------------+---------------------+
(1 row)ST_CONTAINS 和 ST_CONTAINSPROPERLY 示例:
sql
SQL> 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 (
SELECT ST_BUFFER(ST_Point(1,1), 5,1) union all
SELECT ST_MAKELINE(ST_POINT(1,1), ST_POINT(-1,-1)) union all
SELECT 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 |
+---------------+------------+----------------+-------------+-----------------+
(3 rows)