名稱

ST_Overlaps — 測試兩個幾何物件是否具有相同的維度並相交,但每個物件都至少有一個點不在另一個物件內

概要

boolean ST_Overlaps(geometry A, geometry B);

描述

如果幾何物件 A 和 B「空間重疊」,則返回 TRUE。兩個幾何物件重疊的條件是:它們具有相同的維度,它們的內部在該維度上相交,並且每個物件都至少有一個點在另一個物件內部(或者等效地說,沒有一個物件包含另一個物件)。重疊關係是對稱且非自反的。

用數學術語表示:ST_Overlaps(A, B) ⇔ ( dim(A) = dim(B) = dim( Int(A) ⋂ Int(B) )) ∧ (A ⋂ B ≠ A) ∧ (A ⋂ B ≠ B)

[Note]

此函數會自動包含邊界框比較,該比較會使用幾何物件上可用的任何空間索引。若要避免使用索引,請使用函數 _ST_Overlaps

由 GEOS 模組執行

[Important]

增強功能:3.0.0 版本啟用了對 GEOMETRYCOLLECTION 的支援

注意:這是返回布林值而不是整數的「允許」版本。

此方法實作了 OGC 簡單特徵 SQL 1.1 實作規範 s2.1.1.2 // s2.1.13.3

此方法實作了 SQL/MM 規範。SQL-MM 3: 5.1.32

範例

ST_Overlaps 在下列情況下返回 TRUE

MULTIPOINT / MULTIPOINT

LINESTRING / LINESTRING

POLYGON / POLYGON

線串上的點是被包含的,但由於其維度較低,因此它不重疊或交叉。

SELECT ST_Overlaps(a,b) AS overlaps,       ST_Crosses(a,b) AS crosses,
       ST_Intersects(a, b) AS intersects,  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

overlaps | crosses | intersects | b_contains_a
---------+----------------------+--------------
f        | f       | t          | t

部分覆蓋多邊形的線串相交和交叉,但由於其維度不同,因此不重疊。

SELECT ST_Overlaps(a,b) AS overlaps,        ST_Crosses(a,b) AS crosses,
       ST_Intersects(a, b) AS intersects,   ST_Contains(a,b) AS contains
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;

 overlap | crosses | intersects | contains
---------+---------+------------+--------------
 f       | t       | t          | f

兩個相交但彼此不包含的多邊形重疊,但由於它們的交集具有相同的維度,因此不交叉。

SELECT ST_Overlaps(a,b) AS overlaps,       ST_Crosses(a,b) AS crosses,
       ST_Intersects(a, b) AS intersects,  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;

 overlaps | crosses | intersects | b_contains_a | dim_a | dim_b | dim_int
----------+---------+------------+--------------+-------+-------+-----------
 t        | f       | t          | f            |     2 |     2 |       2