Name

ST_Relate — Prüft, ob zwei Geometrien eine topologische Beziehung haben, die einem Schnittpunktmatrixmuster entspricht, oder berechnet ihre Schnittpunktmatrix

Synopsis

boolean ST_Relate(geometry geomA, geometry geomB, text intersectionMatrixPattern);

text ST_Relate(geometry geomA, geometry geomB);

text ST_Relate(geometry geomA, geometry geomB, integer boundaryNodeRule);

Beschreibung

Diese Funktionen ermöglichen die Prüfung und Bewertung der räumlichen (topologischen) Beziehung zwischen zwei Geometrien, wie sie durch das Dimensionally Extended 9-Intersection Model (DE-9IM) definiert sind.

DE-9IM wird als 9-Element-Matrix spezifiziert, die die Dimension der Schnittpunkte zwischen dem Inneren, dem Rand und dem Äußeren von zwei Geometrien angibt. Sie wird durch eine 9-stellige Zeichenkette mit den Symbolen "F", "0", "1", "2" dargestellt (z. B. "FF1FF0102").

Eine bestimmte Art von räumlicher Beziehung kann getestet werden, indem die Kreuzungsmatrix mit einem Muster der Kreuzungsmatrix verglichen wird. Muster können die zusätzlichen Symbole 'T' (bedeutet "Schnittpunkt ist nicht leer") und '*' (bedeutet "beliebiger Wert") enthalten. Allgemeine räumliche Beziehungen werden durch die benannten Funktionen ST_Contains, ST_ContainsProperly, ST_Covers, ST_CoveredBy, ST_Crosses, ST_Disjoint, ST_Equals, ST_Intersects, ST_Overlaps, ST_Touches und ST_Within bereitgestellt. Die Verwendung eines expliziten Musters ermöglicht es, mehrere Bedingungen für Überschneidungen, Kreuzungen usw. in einem Schritt zu testen. Es ermöglicht auch das Testen räumlicher Beziehungen, die keine benannte räumliche Beziehungsfunktion haben. Zum Beispiel hat die Beziehung "Interior-Intersects" das DE-9IM-Muster T********, das von keinem benannten Prädikat ausgewertet wird.

Weitere Informationen finden Sie unter Section 5.1, “Räumliche Beziehungen feststellen”.

Variante 1: Prüft, ob zwei Geometrien nach dem vorgegebenen intersectionMatrixPattern räumlich zusammenhängen.

[Note]

Im Gegensatz zu den meisten benannten räumlichen Beziehungsprädikaten enthält dieses NICHT automatisch einen Indexaufruf. Der Grund dafür ist, dass einige Beziehungen für Geometrien wahr sind, die sich NICHT schneiden (z. B. Disjoint). Wenn Sie ein Beziehungsmuster verwenden, das eine Überschneidung erfordert, dann schließen Sie den Indexaufruf && ein.

[Note]

Es ist besser, eine benannte Beziehungsfunktion zu verwenden, wenn sie verfügbar ist, da sie automatisch einen räumlichen Index verwendet, wenn einer vorhanden ist. Außerdem können sie Leistungsoptimierungen implementieren, die bei einer vollständigen Beziehungsauswertung nicht verfügbar sind.

Variante 2: Gibt die DE-9IM-Matrixzeichenfolge für die räumliche Beziehung zwischen den beiden Eingabegeometrien zurück. Die Matrixzeichenfolge kann mit ST_RelateMatch auf Übereinstimmung mit einem DE-9IM-Muster getestet werden.

Variante 3: Wie Variante 2, erlaubt aber die Angabe einer Boundary Node Rule. Eine Boundary Node Rule erlaubt eine feinere Kontrolle darüber, ob die Endpunkte von MultiLineStrings als im DE-9IM Interior oder Boundary liegend betrachtet werden. Die boundaryNodeRule Werte sind:

  • 1: OGC-Mod2 - Linienendpunkte befinden sich in der Boundary, wenn sie eine ungerade Anzahl von Malen vorkommen. Dies ist die vom OGC SFS-Standard definierte Regel und ist die Vorgabe für ST_Relate.

  • 2: Endpunkt - alle Endpunkte befinden sich in der Boundary.

  • 3: MultivalentEndpoint - Endpunkte befinden sich in der Boundary, wenn sie mehr als einmal vorkommen. Mit anderen Worten, die Grenze sind alle "verbundenen" oder "inneren" Endpunkte (aber nicht die "unverbundenen/äußeren").

  • 4: MonovalenterEndpunkt - Endpunkte befinden sich in der Boundary, wenn sie nur einmal vorkommen. Mit anderen Worten, die Begrenzung sind alle "unverbundenen" oder "äußeren" Endpunkte.

Diese Funktion ist nicht in der OGC-Spezifikation enthalten, wird aber impliziert. siehe s2.1.13.2

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

Wird durch das GEOS Modul ausgeführt

Verbessert: 2.0.0 - Unterstützung für die Angabe von Grenzknotenregeln hinzugefügt.

[Important]

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

Beispiele

Verwendung der booleschen Funktion zur Prüfung räumlicher Beziehungen.

SELECT ST_Relate('POINT(1 2)', ST_Buffer( 'POINT(1 2)', 2), '0FFFFF212');
st_relate
-----------
t

SELECT ST_Relate(POINT(1 2)', ST_Buffer( 'POINT(1 2)', 2), '*FF*FF212');
st_relate
-----------
t

Testen eines benutzerdefinierten räumlichen Beziehungsmusters als Abfragebedingung, mit && , um die Verwendung eines räumlichen Indexes zu ermöglichen.

-- Find compounds that properly intersect (not just touch) a poly (Interior Intersects)

SELECT c.* , p.name As poly_name
    FROM polys AS p
    INNER JOIN compounds As c
          ON c.geom && p.geom
             AND ST_Relate(p.geom, c.geom,'T********');

Berechnung der Kreuzungsmatrix für räumliche Beziehungen.

SELECT ST_Relate( 'POINT(1 2)',
                  ST_Buffer( 'POINT(1 2)', 2));
-----------
0FFFFF212

SELECT ST_Relate( 'LINESTRING(1 2, 3 4)',
                  'LINESTRING(5 6, 7 8)' );
-----------
FF1FF0102

Verwendung verschiedener Boundary Node Rules zur Berechnung der räumlichen Beziehung zwischen einem LineString und einem MultiLineString mit einem doppelten Endpunkt (3 3):

  • Unter Verwendung der OGC-Mod2 Regel (1) liegt der doppelte Endpunkt im Inneren des MultiLineString, so dass der DE-9IM Matrixeintrag [aB:bI] 0 und [aB:bB] F ist.

  • Bei Anwendung der Regel Endpunkt (2) liegt der doppelte Endpunkt in der Grenze des MultiLineString, so dass der DE-9IM Matrixeintrag [aB:bI] F und [aB:bB] 0 ist.

WITH data AS (SELECT
  'LINESTRING(1 1, 3 3)'::geometry AS a_line,
  'MULTILINESTRING((3 3, 3 5), (3 3, 5 3))':: geometry AS b_multiline
)
SELECT ST_Relate( a_line, b_multiline, 1) AS bnr_mod2,
       ST_Relate( a_line, b_multiline, 2) AS bnr_endpoint
    FROM data;

 bnr_mod2  | bnr_endpoint
-----------+--------------
 FF10F0102 | FF1F00102