SQL und raumbezogene Suche

Es ist möglich, im Rahmen der SQL-Funktionalität eine raumbezogene Suche durchzuführen. Raumbezogene Suchvorgänge können entweder implizit durch die im Dialogfeld SQL ausgewählten Optionen erfolgen oder explizit, indem das Schlüsselwort SPATIAL in einer schriftlichen Abfrage verwendet wird.

Implizite raumbezogene Suchvorgänge

Implizite raumbezogene Suchvorgänge werden vollständig im Dialogfeld SQL definiert und können zwischen zwei beliebigen Netzlayern oder zwischen einem Netzlayer und einem GIS-Layer durchgeführt werden, wie unten beschrieben:

  1. Wählen Sie den Suchtyp aus:
    • Kreuzen: Sucht nach Netzobjekten, die eine Layerlinie oder Polygonfläche schneiden.
    • Innen: Sucht innerhalb eines Layerpolygons nach Netzobjekten.
    • Enthält: Sucht nach Netzpolygonen mit Layerobjekten innerhalb des Polygons.
    • Entfernung: Sucht innerhalb des Suchabstands eines Layerpunkts, einer Linie oder einer Polygonfläche nach Netzobjekten.
    • Nächstliegend: Sucht innerhalb einer angegebenen Entfernung nach dem nächstgelegenen Netzobjekt. Wenn sich innerhalb des angegebenen Abstands mehrere Objekte befinden, wird das zuerst gefundene Objekt als Ergebnis zurückgegeben.
  2. Wählen Sie den Layertyp aus:
    • Netzlayer: Objektlayer im aktuellen Netz
    • GIS-Layer: Im GeoPlan hinter dem Netz angezeigter GIS-Hintergrundlayer
  3. Wählen Sie im Feld Layer den Layer aus.
    Anmerkung: Wenn Sie mit einem GIS-Layer suchen, muss der Layer in die GeoPlan-Ansicht geladen werden.
    Anmerkung: Der Layer wird in der Abfrage als gislayer bezeichnet (auch wenn ein Netz als Layertyp verwendet wird).
  4. Definieren Sie ggf. einen Wert für Entfernung.
    Wichtig: Ein Entfernungswert ist nur erforderlich/wird nur verwendet, wenn Sie den Suchtyp Entfernung oder Nächstliegend verwenden.

Um ein Feld bei der raumbezogenen Layersuche zu berücksichtigen, wählen Sie es unter Feld aus, oder nehmen Sie direkt im Bearbeitungsfeld eine Eingabe vor. Verwenden Sie dabei die unten dargestellte Syntax, wobei der Feldname mithilfe der Syntax gislayer.<field_name> einbezogen wird.

Anmerkung: Raumbezogene Felder können in Abfragen genauso verwendet werden wie Netzobjektfelder.

Beispiele für diesen Abfragetyp sind unten aufgeführt und stehen im Hilfethema SQL-Beispiel: Kritische Rohre zur Verfügung.

Reihenfolge der Operationen

Wenn in der Abfrage sowohl Auswahloptionen für eine raumbezogene Suche als auch für den Objekttyp definiert sind, wird die raumbezogene Suche zuerst durchgeführt. Die Hauptabfrage mithilfe von Objekttypkriterien wird anschließend anhand der Ergebnisse der raumbezogenen Suche durchgeführt. Beispiel:

SQL query context:
  • Objekttyp: Rohr
  • [Raumbezogener] Suchtyp: Kreuzen
  • [Raumbezogener] Layertyp: GIS-Layer
  • [Raumbezogener] Layer: [SHP] Straßen


diameter > 200

Diese Abfrage führt folgende Schritte durch:

  1. Suche nach Rohren, die Straßen auf dem Layer [SHP] Roads kreuzen
  2. Verwenden Sie die Rohre aus Schritt 1, um die Rohre auszuwählen, deren Durchmesser größer als 200 ist.

Beispiel 1

SQL query context:
  • Objekttyp: Rohr
  • [Raumbezogener] Suchtyp: Entfernung
  • [Raumbezogener] Layertyp: GIS-Layer
  • [Raumbezogener] Layer: [SHP] Straßen
  • [Raumbezogene] Entfernung: 2.0


diameter > 200

Verwendet GIS-Daten, um alle Rohre mit einem Durchmesser über 200 innerhalb von 2 Metern von einer Straße zu finden.

Beispiel 2

SQL query context:
  • Objekttyp: Alle Knoten
  • [Raumbezogener] Suchtyp: Innen
  • [Raumbezogener] Layertyp: Netzlayer
  • [Raumbezogener] Layer: Polygone


z < 100 AND gislayer.area > 150

Wählt alle Knoten mit einer Höhe unter 100 aus, die sich innerhalb eines Polygons mit einer Fläche größer als 150 befinden.

Explizite raumbezogene Suche mit dem Schlüsselwort SPATIAL

Der Hauptvorteil der Verwendung des Schlüsselworts SPATIAL bei der raumbezogenen Suche besteht darin, dass sich die Zeilen im SQL-Block aus solchen mit und ohne raumbezogener Suche kombinieren lassen.

Das Durchführen einer expliziten raumbezogenen Suche mithilfe des Schlüsselworts SPATIAL erfordert auch die Definition der Objekttabelle, anhand derer die Abfrage die Suche durchführen soll. Dies erfolgt über eine einfache SELECT-Klausel. Die Reihenfolge, in der diese geschrieben werden, lautet:

  1. SPATIAL-Abfrageblock
  2. SELECT-Abfrageblock
Wichtig: Die Klauseln SPATIAL und SELECT sind als separate Abfrageblöcke definiert und müssen durch ein Semikolon (;) getrennt werden (wie bei der Trennung von Abfrageblöcken im Allgemeinen), obwohl sie sich wie ein einzelner Block verhalten.

Die Syntax für die Verwendung der raumbezogenen Suche in Abfragen lautet:

SPATIAL 
  <geometry type> 
  <layer type> 
  <layer name>;
SELECT
 FROM <object type>;
SPATIAL 
  <geometry type> 
  <layer type> 
  <layer name> 
  <distance>;
SELECT
 FROM <object type>;
SPATIAL-Syntaxfunktion Syntaxoptionen Beschreibung
Geometrietyp Kreuzen Sucht nach Netzobjekten, die eine Layerlinie oder Polygonfläche schneiden.
Innen Sucht nach Netzobjekten innerhalb eines Layerpolygons.
Enthält Sucht nach Netzpolygonen mit Layerobjekten innerhalb des Polygons.
Abstand Sucht nach Netzobjekten innerhalb des Suchabstands eines Layerpunkts, einer Linie oder einer Polygonfläche.
Nächster Sucht innerhalb eines angegebenen Abstands nach dem nächstgelegenen Netzobjekt. Wenn sich innerhalb des angegebenen Abstands mehrere Objekte befinden, wird das zuerst gefundene Objekt als Ergebnis zurückgegeben.
Layertyp Netz Objektlayer im aktuellen Netz
GIS Im GeoPlan hinter dem Netz angezeigter GIS-Hintergrundlayer
Layername Muss für GIS-Layer eine in Anführungszeichen gesetzte Zeichenfolge und für Netzobjekte ein Tabellenname sein (nicht in Anführungszeichen gesetzt; bei einzelnen Wörtern ohne Leerzeichen optional bzw. bei mehreren Wörtern zwingend in [ ] gesetzt).
Abstand
Wichtig: Ein Wert für Entfernung ist nur erforderlich/wird nur verwendet, wenn der Geometrietyp Entfernung oder Nächstliegend verwendet wird.
Tipp: Der Eingabewert im Feld Entfernung kann eine numerische Konstante oder eine skalare Variable sein.

Regeln zur Verwendung von SPATIAL-Schlüsselwörtern

  1. Wie Standardabfragen beachten auch raumbezogene Abfragen die Prioritätsregeln des Dialogfelds SQL, d. h., die in den Kombinationsfeldern und im Textfeld angegebenen Optionen dienen als anfängliche raumbezogene Konfiguration, bis diese durch eine SPATIAL-Anweisung geändert wird. Beispiel:
    SQL query context:
    • Objekttyp: Alle Knoten
    • [Raumbezogener] Suchtyp: Innen
    • [Raumbezogener] Layertyp: Netzlayer
    • [Raumbezogener] Layer: Polygone


    SPATIAL
      Distance
      Network
      Reservoir
      30.5;
    SELECT
     FROM [All Nodes]

    Bei dieser Abfrage werden zunächst alle Knoten ausgewählt, die sich innerhalb eines Netzpolygons befinden, und dann alle Knoten, die sich im Abstand von 30.5 Einheiten von einem Reservoirobjekt befinden.

  2. Jede SPATIAL-Klausel bleibt nur bis zum Ende des Blocks in Kraft, der sie enthält. Dies bedeutet:
    • Wenn sie sich innerhalb eines IF-/ELSE-/ELSEIF-Blocks befindet, dann hat sie am Ende dieses Blocks keine Auswirkungen mehr.
    • Wenn sie sich in einem WHILE-Block befindet, hat sie am Ende dieses Blocks keine Auswirkungen mehr.
    • Sie bleibt in allen verschachtelten IF-/WHILE-Blöcken in einem vorhandenen Block in Kraft.

Ausschließen der raumbezogenen Suche aus Abfragen

Mit der folgenden Syntax ist es auch möglich, die raumbezogene Suche aus Abfragesegmenten auszuschließen:

SPATIAL NONE;

Wenn SPATIAL NONE als Block zu einer Abfrage hinzugefügt wird, wird die SPATIAL-Klausel (implizit oder explizit) abgebrochen/aufgehoben, die für den Rest der Abfrage gültig ist, d. h., die SQL-Klausel hat ihre normale Bedeutung und wirkt sich auf die Daten im Netz ohne Bezug auf eine raumbezogene Suche aus. Nach einem SPATIAL NONE-Block können einer Abfrage zusätzliche SPATIAL-Klauseln hinzugefügt werden, um bei Bedarf neue Klauseln für die raumbezogene Suche einzuführen.

Dies ermöglicht eine Mischung aus Zeilen in einem SQL-Block, von denen einige die raumbezogene Suche verwenden und andere nicht, wodurch eine größere Flexibilität ermöglicht wird.

Raumbezogener Suchtyp und Geometrie

Die folgende Tabelle zeigt die kompatiblen Kombinationen aus Geometrien für jeden Suchtyp.

Anmerkung:
  • Bei ArcGIS Engine- und ArcGIS Desktop-GIS-Layern ermittelt der Suchtyp Innen Objekte, die sich vollständig innerhalb eines Polygons befinden.
  • Bei MapXtreme-GIS-Layern, Netzlayern und Hintergrundnetzlayern ermittelt der Suchtyp Innen Objekte, deren Mittelpunkt innerhalb einer Polygonbegrenzung liegt.
  • Der Suchtyp Kreuzen ermittelt alle Objekte innerhalb eines Layerpolygons sowie alle Objekte, die die Begrenzung schneiden.
  • Der Suchtyp Enthält ermittelt Netzpolygone, deren Layerobjekte vollständig innerhalb des Netzpolygons liegen.
  • Der Suchtyp Nächstliegend sucht nach dem nächstgelegenen Netzobjekt innerhalb einer bestimmten Entfernung. Wenn sich innerhalb des angegebenen Abstands mehrere Objekte befinden, wird das zuerst gefundene Objekt als Ergebnis zurückgegeben.

Raumbezogener Suchtyp

Beschreibung des Suchtyps

Kompatible Geometriekombinationen

Kreuzen

Sucht nach Netzobjekten, die eine Layerlinie oder Polygonfläche schneiden.

InfoWorks WS Pro-Geometrie

Layergeometrie
Linie

Linie

Polygon

Polygon

Linie

Polygon

Innen

Sucht nach Netzobjekten innerhalb eines Layerpolygons.

InfoWorks WS Pro-Geometrie

Layergeometrie
Punkt Polygon
Linie Polygon
Polygon Polygon

Enthält

Sucht nach Netzpolygonen mit Layerobjekten innerhalb des Polygons.

InfoWorks WS Pro-Geometrie

Layergeometrie
Polygon

Punkt

Linie

Polygon

Abstand

Sucht nach Netzobjekten innerhalb des Suchabstands eines Layerpunkts, einer Linie oder einer Polygonfläche.

InfoWorks WS Pro-Geometrie

Layergeometrie
Punkt

Punkt

Linie

Polygon

Linie

Punkt

Linie

Polygon

Polygon

Punkt

Linie

Polygon

Nächster

Sucht innerhalb eines angegebenen Abstands nach dem nächstgelegenen Netzobjekt. Wenn sich innerhalb des angegebenen Abstands mehrere Objekte befinden, wird das zuerst gefundene Objekt als Ergebnis zurückgegeben.

InfoWorks WS Pro-Geometrie

Layergeometrie
Punkt

Punkt

Linie

Polygon

Linie

Punkt

Linie

Polygon

Polygon

Punkt

Linie

Polygon