Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


ST_CONTAINSPROPERLY

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

功能描述

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

语法格式

sql
BOOLEAN ST_CONTAINSPROPERLY( GEOMETRY geomA , GEOMETRY geomB );

参数说明

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

函数返回类型

BOOLEAN 类型

使用说明

  1. 数学术语: ST_CONTAINSPROPERLY(A, B) ⇔ Int(A) ⋂ B = B
  2. 如果两个几何图形的 DE-9IM 交集矩阵匹配 [T**FF*FF*],则 A 正确包含 B。
  3. 此功能自动包括利用几何上可用的任何空间索引的边界框比较。
  4. 此函数是由 GEOS 模块执行的。
  5. 此函数支持 GEOMETRYCOLLECTION。

示例

一个圆在圆内部时:

sql
SQL> 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;

+----------------------+----------------------+----------------------+------------+-------------------+---------------------+
| SMALLCONTAINSPROPBIG | BIGCONTAINSPROPSMALL | BIGCONTAINSPROPUNION | BIGISUNION | BIGCOVERSEXTERIOR | BIGCONTAINSEXTERIOR |
+----------------------+----------------------+----------------------+------------+-------------------+---------------------+
| F                    | T                    | F                    | 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)