Um eine optimale Performance zu erzielen, sollten Sie immer Methoden wie ST_Within oder ST_Touches verwenden, um spezifische Beziehungen zwischen Geometrien zu testen. Wenn Sie jedoch mehrere Beziehungen testen müssen, empfiehlt sich die Methode ST_Relate, da damit auf mehrere Beziehungen gleichzeitig getestet werden kann. ST_Relate ist ebenfalls geeignet, um auf eine andere Interpretation eines Prädikats zu testen.
ST_Relate wird am häufigsten als Prädikat verwendet, wobei Sie die zu testenden Beziehungen präzise angeben. Sie können ST_Relate jedoch auch verwenden, um alle möglichen Beziehungen zwischen zwei Geometrien zu ermitteln.
ST_Relate bestimmt anhand von Schnittpunkttests ihrer Innenbereiche, Begrenzungen und Außenbereiche, in welcher Beziehung Geometrien zueinander stehen. Die Beziehung zwischen den Geometrien wird dann in einer 9-stelligen Zeichenfolge in DE-9IM-Format (Dimensionally Extended 9 Intersection Model) beschrieben, wobei jedes Zeichen der Zeichenfolge die Dimension des Ergebnisses eines Schnittpunkttests darstellt.
Wenn Sie ST_Relate als Prädikat verwenden, übergeben Sie eine DE-9IM-Zeichenfolge, die die zu testenden Schnittpunktergebnisse widerspiegelt. Wenn die Geometrien die angegebenen Bedingungen in der DE-9IM-Zeichenfolge erfüllen, gibt ST_Relate 1 zurück. Wenn die Bedingungen nicht erfüllt sind, wird 0 zurückgegeben. Wenn eine oder beide Geometrien NULL sind, wird NULL zurückgegeben.
Die 9-stellige DE-9IM-Zeichenfolge ist eine abgeflachte Darstellung einer paarweisen Matrix der Schnittpunkttests zwischen Innenbereichen, Begrenzungen und Außenbereichen. Die folgende Tabelle zeigt die 9 Schnittpunkttests in der Reihenfolge, in der sie durchgeführt werden: von links nach rechts und von oben nach unten:
g2-Innenbereich | g2-Begrenzung | g2-Außenbereich | |
g1-Innenbereich | Interior(g1) ∩ Interior(g2) |
Interior(g1) ∩ Boundary(g2) |
Interior(g1) ∩ Exterior(g2) |
g1-Begrenzung | Boundary(g1) ∩ Interior(g2) |
Boundary(g1) ∩ Boundary(g2) |
Boundary(g1) ∩ Exterior(g2) |
g1-Außenbereich | Exterior(g1) ∩ Interior(g2) |
Exterior(g1) ∩ Boundary(g2) |
Exterior(g1) ∩ Exterior(g2) |
Wenn Sie die DE-9IM-Zeichenfolge festlegen, können Sie für jedes der 9 Zeichen *, 0, 1, 2, T oder F angeben. Diese Werte beziehen sich auf die Anzahl der Bemessungen der durch den Schnittpunkt entstandenen Geometrie.
Sie geben z. B. Folgendes an: | Der Schnittpunkttest muss Folgendes zurückgeben: |
---|---|
T | Ein Wert von 0, 1, 2 (ein Schnittpunkt einer beliebigen Bemessung) |
F | -1 |
* | -1, 0, 1, 2 (beliebiger Wert) |
0 | 0 |
1 | 1 |
2 | 2 |
Sie möchten z. B. mit ST_Relate und einer benutzerdefinierten DE-9IM-Zeichenfolge für das "innerhalb"-Prädikat testen, ob sich eine Geometrie innerhalb einer anderen Geometrie befindet:
SELECT new ST_Polygon('Polygon(( 2 3, 8 3, 4 8, 2 3 ))').ST_Relate( new ST_Polygon('Polygon((-3 3, 3 3, 3 6, -3 6, -3 3))'), 'T*F**F***' ); |
Dies entspricht der Prüfung auf folgende Bedingungen mit ST_Relate, wenn die Schnittpunkttests durchgeführt werden:
g2-Innenbereich | g2-Begrenzung | g2-Außenbereich | |
g1-Innenbereich | Ein Wert von 0, 2, -1 | Ein Wert von 0, 1, 2, -1 | -1 |
g1-Begrenzung | Ein Wert von 0, 1, 2, -1 | Ein Wert von 0, 1, 2, -1 | -1 |
g1-Außenbereich | Ein Wert von 0, 1, 2, -1 | Ein Wert von 0, 1, 2, -1 | Ein Wert von 0, 1, 2, -1 |
Wenn Sie die Abfrage ausführen, gibt ST_Relate jedoch 0 zurück. Dadurch wird angezeigt, dass die erste Geometrie sich nicht innerhalb der zweiten Geometrie befindet.
Um die zwei Geometrien anzuzeigen und ihr Erscheinungsbild im Rahmen des Tests zu vergleichen, führen Sie folgende Anweisung im Spatial Viewer von Interactive SQL aus (Extras » Spatial Viewer):
SELECT NEW ST_Polygon('Polygon(( 2 3, 8 3, 4 8, 2 3 ))') UNION ALL SELECT NEW ST_Polygon('Polygon((-3 3, 3 3, 3 6, -3 6, -3 3))'); |
Wenn ST_Relate nicht als Prädikat verwendet wird, wird die vollständige Beziehung zwischen zwei Geometrien zurückgegeben.
Beispiel: Sie haben die beiden Geometrien, die im vorigen Beispiel verwendet wurden, und möchten wissen, in welcher Beziehung sie miteinander stehen. Sie führen folgende Anweisung in Interactive SQL aus, um die DE-9IM-Zeichenfolge zurückzugeben, die ihre Beziehung definiert:
SELECT new ST_Polygon('Polygon(( 2 3, 8 3, 4 8, 2 3 ))').ST_Relate(new ST_Polygon('Polygon((-3 3, 3 3, 3 6, -3 6, -3 3))')); |
ST_Relate gibt die DE-9IM-Zeichenfolge zurück, 212111212
.
Die Matrixansicht dieses Wertes zeigt, dass eine Reihe von Schnittpunkten vorliegen:
g2-Innenbereich | g2-Begrenzung | g2-Außenbereich | |
g1-Innenbereich | 2 | 1 | 2 |
g1-Begrenzung | 1 | 1 | 1 |
g1-Außenbereich | 2 | 1 | 2 |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |