ST_Overlaps — Testar om två geometrier har samma dimension och skär varandra, men var och en har minst en punkt som inte finns i den andra
boolean ST_Overlaps(geometry A, geometry B);
Returnerar TRUE om geometri A och B "överlappar varandra spatialt". Två geometrier överlappar varandra om de har samma dimension, deras interiörer skär varandra i den dimensionen och var och en har minst en punkt inuti den andra (eller motsvarande, ingen av dem täcker den andra). Överlappningsrelationen är symmetrisk och irreflexiv.
I matematiska termer: ST_Overlaps(A, B) ⇔ ( dim(A) = dim(B) = dim( Int(A) ⋂ Int(B) )) ∧ (A ⋂ B ≠ A) ∧ (A ⋂ B ≠ B)
|
|
|
&index_aware; För att undvika indexanvändning, använd funktionen |
Utförs av GEOS-modulen
Förbättrad: 3.0.0 aktiverade stöd för GEOMETRYCOLLECTION
OBS: detta är den "tillåtna" versionen som returnerar ett boolean, inte ett heltal.
Denna metod implementerar OGC:s implementeringsspecifikation för enkla funktioner för SQL 1.1. s2.1.1.2 // s2.1.13.3
Denna metod implementerar SQL/MM-specifikationen. SQL-MM 3: 5.1.32
ST_Overlaps returnerar TRUE i följande situationer:
Two MultiPoints overlap when they share some, but not all, points.
SELECT ST_Overlaps(a, b) FROM (SELECT 'MULTIPOINT ((20 20),(40 90),(80 130),(140 100),(110 40),(120 170),(150 70))'::geometry AS a, 'MULTIPOINT ((180 10),(40 90),(80 130),(160 150),(110 40),(50 50),(50 160))'::geometry AS b ) AS example;
t
Two LineStrings overlap along part of their paths.
SELECT ST_Overlaps(a, b) FROM (SELECT 'LINESTRING (10 10,40 90,70 110,140 110,170 130,190 190)'::geometry AS a, 'LINESTRING (10 190,50 130,90 110,130 110,160 70,180 10)'::geometry AS b ) AS example;
t
Two Polygons overlap where their interiors intersect and neither contains the other.
SELECT ST_Overlaps(a, b) FROM (SELECT 'POLYGON ((140 140,140 122,135 105,126 100,118 99,110 94,100 86,97 73,102 59,98 49,87 38,70 30,55 29,40 30,28 38,20 50,14 66,10 84,6 100,4 119,4 143,6 166,10 180,18 191,28 195,40 190,55 189,67 186,86 179,112 165,124 158,133 148,140 140),(48 177,40 177,30 174,24 166,22 159,25 155,30 153,40 154,45 157,52 162,53 169,51 174,48 177))'::geometry AS a, 'POLYGON ((75 63,79 50,87 38,95 31,108 25,124 22,140 18,154 11,166 6,176 10,184 21,188 35,190 58,190 82,193 104,190 121,185 139,178 154,166 163,154 171,139 172,124 171,112 165,96 152,92 142,92 126,86 116,79 110,75 104,72 94,73 86,75 76,75 63))'::geometry AS b ) AS example;
t
En punkt på en LineString är innesluten, men eftersom den har en lägre dimension överlappar eller korsar den inte varandra.
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 'POINT (100 100)'::geometry As a,
'LINESTRING (30 50,40 160,160 40,180 160)'::geometry AS b) AS t
overlaps | crosses | intersects | b_contains_a ---------+----------------------+-------------- f | f | t | t
En LineString som delvis täcker en Polygon skär och korsar, men överlappar inte eftersom den har olika dimensioner.
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 'POLYGON ((40 170,90 30,180 100,40 170))'::geometry AS a,
'LINESTRING(10 10,190 190)'::geometry AS b) AS t;
overlap | crosses | intersects | contains ---------+---------+------------+-------------- f | t | t | f
Två polygoner som skär varandra men där ingen av dem är innesluten i den andra överlappar varandra, men korsar inte varandra eftersom deras skärningspunkt har samma dimension.
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 'POLYGON ((40 170,90 30,180 100,40 170))'::geometry AS a,
'POLYGON ((110 180,20 60,130 90,110 180))'::geometry AS b) As t;
overlaps | crosses | intersects | b_contains_a | dim_a | dim_b | dim_int ----------+---------+------------+--------------+-------+-------+----------- t | f | t | f | 2 | 2 | 2