Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


ST_OVERLAPS

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

功能描述

如果几何图形 A 和 B 空间重叠,则返回 TRUE。

语法格式

sql
BOOLEAN ST_OVERLAPS( GEOMETRY geomA , GEOMETRY geomB );

参数说明

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

函数返回类型

BOOLEAN 类型

使用说明

  1. 如果两个几何图形具有相同的维度,并且内部在同一维度中相交,并且至少有一个点在另一个点之外,则称两个几何重叠。
  2. 重叠关系是对称且不自反的。
  3. 数学术语: ST_OVERLAPS(A, B) ⇔ ( dim(A) = dim(B) = dim( Int(A) ⋂ Int(B) )) ∧ (A ⋂ B ≠ A) ∧ (A ⋂ B ≠ B )
  4. 此功能自动包括利用几何上可用的任何空间索引的边界框比较。
  5. 此函数由 GEOS 模块实现。
  6. 此函数支持 GEOMETRYCOLLECTION。

示例

包含 LINESTRING 上的点,但由于它的维度较低,因此不会重叠或交叉:

sql
SQL> SELECT 
     ST_OVERLAPS(a,b) AS a_overlaps_b,
     ST_CROSSES(a,b) AS a_crosses_b,
     ST_INTERSECTS(a, b) AS a_intersects_b,
     ST_CONTAINS(b,a) AS b_contains_a
     FROM (SELECT ST_GEOMFROMTEXT('POINT (100 100)') As a,
                  ST_GEOMFROMTEXT('LINESTRING (30 50, 40 160, 160 40, 180 160)')  AS b) AS t;

+--------------+-------------+----------------+--------------+
| A_OVERLAPS_B | A_CROSSES_B | A_INTERSECTS_B | B_CONTAINS_A |
+--------------+-------------+----------------+--------------+
| F            | F           | T              | T            |
+--------------+-------------+----------------+--------------+

(1 row)

线串与多边形的相交和交叉,部分覆盖,但维度不同,则不重叠:

sql
SQL> SELECT
      ST_OVERLAPS(a,b) AS a_overlaps_b,
      ST_CROSSES(a,b) AS a_crosses_b,
      ST_INTERSECTS(a, b) AS a_intersects_b,
      ST_CONTAINS(a,b) AS b_contains_a,
      ST_DIMENSION(a) AS dim_a,
      ST_DIMENSION(b) AS dim_b
      FROM (SELECT ST_GEOMFROMTEXT('POLYGON ((40 170, 90 30, 180 100, 40 170))') AS a,
           ST_GEOMFROMTEXT('LINESTRING(10 10, 190 190)') AS b) AS t;

+--------------+-------------+----------------+--------------+-------+-------+
| A_OVERLAPS_B | A_CROSSES_B | A_INTERSECTS_B | B_CONTAINS_A | DIM_A | DIM_B |
+--------------+-------------+----------------+--------------+-------+-------+
| F            | T           | T              | F            | 2     | 1     |
+--------------+-------------+----------------+--------------+-------+-------+

(1 row)

两个多边形相交,不交叉,彼此都不包含对方,交集具有相同的维度,重叠:

sql
SQL> SELECT
     ST_OVERLAPS(a,b) AS a_overlaps_b,
     ST_CROSSES(a,b) AS a_crosses_b,
     ST_INTERSECTS(a, b) AS a_intersects_b,
     ST_CONTAINS(b, a) AS b_contains_a,
     ST_DIMENSION(a) AS dim_a,
     ST_DIMENSION(b) AS dim_b,
     ST_DIMENSION(ST_Intersection(a,b)) AS dim_int
     FROM (SELECT ST_GEOMFROMTEXT('POLYGON ((40 170, 90 30, 180 100, 40 170))') AS a,
                  ST_GEOMFROMTEXT('POLYGON ((110 180, 20 60, 130 90, 110 180))') AS b) As t;

+--------------+-------------+----------------+--------------+-------+-------+---------+
| A_OVERLAPS_B | A_CROSSES_B | A_INTERSECTS_B | B_CONTAINS_A | DIM_A | DIM_B | DIM_INT |
+--------------+-------------+----------------+--------------+-------+-------+---------+
| T            | F           | T              | F            | 2     | 2     | 2       |
+--------------+-------------+----------------+--------------+-------+-------+---------+

(1 row)