Name

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

Synopsis

boolean ST_Overlaps(geometry A, geometry B);

Beschreibung

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)

[Note]

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 _ST_Overlaps.

Wird durch das GEOS Modul ausgeführt

[Important]

Verbessert: 3.0.0 ermöglicht die Unterstützung von GEOMETRYCOLLECTION

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

Beispiele

ST_Overlaps gibt TRUE in den folgenden Situationen zurück:

MEHRPUNKT / MEHRPUNKT

LINESTRING / LINESTRING

VIELECK / VIELECK

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