Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


ST_CONTAINS

📄字数 1.5K
👁️阅读量 加载中...

功能描述

如果几何图形 A 包含几何图形 B,则返回 TRUE。

语法格式

sql
BOOLEAN ST_CONTAINS( GEOMETRY geomA , GEOMETRY geomB );

参数说明

  • geomA:第一个目标 GEOMETRY 对象。
  • geomB:第二个目标 GEOMETRY 对象。

函数返回类型

BOOLEAN 类型

使用说明

  1. 当且仅当 B 的所有点都位于 A 内部(即在 A 的内部或边界中)时,A 包含 B(等效于:B 中没有点位于 A 的外部),并且 A 和 B 的内部至少有一个共同点。
  2. 数学术语: ST_CONTAINS(A, B) ⇔ (A ⋂ B = B) ∧ (Int(A) ⋂ Int(B) ≠ ∅)
  3. 包含关系是自反的:每个几何图形都包含其自身。(相反,ST_CONTAINSPROPERLY 函数,几何图形未正确包含自身。)
  4. 该关系是反对称的:如果 ST_CONTAINS(A,B) = TRUEST_CONTAINS(B,A) = TRUE,则两个几何图形在拓扑上相等 ( ST_EQUALS(A,B) = TRUE)。
  5. ST_CONTAINS 与 ST_WITHIN 相反。 即:ST_CONTAINS(A,B) = ST_WITHIN(B,A)
  6. 因内部必须有一个公共点,所以多边形和线不包含完全位于其边界内的线和点。 ST_COVERS 提供了更具包容性的关系。
  7. 此功能自动包括利用几何上可用的任何空间索引的边界框比较。
  8. 此函数是通过GEOS模块实现的。
  9. 此函数支持 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)