ST_Overlaps — Prüft, ob zwei Geometrien die gleiche Abmessung haben und sich schneiden, aber jede mindestens einen Punkt hat, der nicht in der anderen liegt
boolean ST_Overlaps(
geometry A, geometry B)
;
Gibt TRUE zurück, wenn sich Geometrie A und B "räumlich überschneiden". Zwei Geometrien überlappen sich, wenn sie dieselbe Dimension haben, ihre Innenräume sich in dieser Dimension schneiden und jede Geometrie mindestens einen Punkt im Inneren der anderen hat (oder äquivalent dazu, keine der beiden Geometrien die andere überdeckt). Die Überlappungsbeziehung ist symmetrisch und irreflexiv.
Mathematisch ausgedrückt: ST_Overlaps(A, B) ⇔ ( dim(A) = dim(B) = dim( Int(A) ⋂ Int(B) )) ∧ (A ⋂ B ≠ A) ∧ (A ⋂ B ≠ B)
Diese Funktion beinhaltet automatisch einen Bounding-Box-Vergleich, der alle räumlichen Indizes verwendet, die für die Geometrien verfügbar sind. Um die Verwendung des Index zu vermeiden, verwenden Sie die Funktion |
Wird durch das GEOS Modul ausgeführt
Verbessert: 3.0.0 ermöglicht die Unterstützung von |
HINWEIS: Dies ist die "zulässige" Version, die einen booleschen Wert und keine ganze Zahl zurückgibt.
Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 // s2.1.13.3
Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.32
ST_Overlaps
gibt TRUE
in den folgenden Situationen zurück:
|
|
|
Ein Punkt auf einem LineString ist enthalten, aber da er eine geringere Dimension hat, überschneidet oder kreuzt er sich nicht.
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
Ein LineString, der ein Polygon teilweise abdeckt, schneidet und kreuzt sich, überschneidet sich aber nicht, da er unterschiedliche Abmessungen hat.
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
Zwei Polygone, die sich schneiden, ohne dass das eine vom anderen enthalten ist, überschneiden sich, aber nicht, weil ihr Schnittpunkt die gleiche Dimension hat.
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