Häufig gestellte Frage (FAQ)

Ist für die Ausführung einer SQL-Anweisung mit zusätzlichen räumlichen relationalen Operatoren in Oracle der Operator st_envintersects erforderlich?

Last Published: January 13, 2021

Antwort

Hinweis: Die ArcSDE-Software, einschließlich Anwendungsserver, Befehlswerkzeugen und SDK mit C- und Java-APIs, wird in ArcSDE 10.2.2 nicht mehr unterstützt und nicht mehr ausgeliefert.

Wenn Sie eine SQL-Anweisung mit einem räumlichen relationalen Operator wie "st_intersects", "st_within" oder "st_crosses" erstellen, ist es nicht nötig, zusätzlich den räumlichen Operator "st_envintersects" als Filter für die Ermittlung von geeigneten Geometrien für den räumlichen relationalen Operator einzubinden. Die Angabe des Operators "st_envintersects" ist redundant und würde lediglich die Rechenzeit der Abfrage verlängern. Wenn Sie einen räumlichen Index verwenden, filtern räumliche relationale Operatoren zunächst die geeigneten Shapes, wobei als primärer Filter der Envelope der Eingabe-Geometrien verwendet wird, und anschließend wird der räumliche relationale Vergleich durchgeführt.

Die folgenden SQL-Beispiele zeigen die Verwendung des Operators "st_envintersects" als Prädikatfilter und in einer Unterabfrage. In beiden Fällen ist er nicht erforderlich. Ziel der SQL-Anweisung ist die Ermittlung aller Flurstücksschwerpunkte in einem Stadtviertel.

Im ersten Beispiel wird der Operator "st_envintersects" als Prädikatfilter hinzugefügt. Der Prädikatfilter und der Operator "st_within" sind redundant, weil der Operator "st_within" anhand des Shape-Envelopes der eingegebenen Stadtviertel alle geeigneten parcel_cent-Shapes ermittelt und dann den relationalen Vergleich durchführt.

Code: SQL> SELECT a.owner, a.address 2 FROM parcel_cent a, neighborhoods b 3 WHERE b.name = 'SOUTHGATE' 4 AND sde.st_within(a.shape,b.shape) = 1 5 AND sde.st_envintersects(a.shape,b.shape) = 1;

Im zweiten Beispiel wird der Filter "st_envintersects" auf eine Unterabfrage angewendet, und als Filter für die primäre Abfrage, die den räumlichen relationalen Operator enthält, wird eine Reihe von geeigneten Geometrien und ObjectID-Werten zurückgegeben.

Code: SQL> SELECT owner, address 2 FROM parcel_cent 3 WHERE objectid IN 4 (SELECT objectid 5 FROM parcel_cent a, neighborhoods b 6 WHERE b.name = 'SOUTHGATE' 7 AND sde.st_envintersects(a.shape,b.shape) = 1);

In beiden Beispielen führen die Abfragen zu einem erhöhten Bedarf an Rechenressourcen, ohne dass sich dadurch die Abfrage-Performance verbessert. In der richtigen Syntax für SQL-Abfragen dieser Art sollten der Prädikatfilter und der räumliche relationale Operator enthalten sein.

Code: SQL> SELECT a.owner, a.address 2 FROM parcel_cent a, neighborhoods b 3 WHERE b.name = 'SOUTHGATE' 4 AND sde.st_within(a.shape,b.shape) = 1;

Artikel-ID:000010468

Hilfe von ArcGIS-Expert*innen erhalten

Technischen Support kontaktieren

Die Esri Support-App herunterladen

Zu den Download-Optionen

Zugehörige Informationen

Weitere Informationen zu diesem Thema erkunden