Abfragen erstellen
  • lizensierte Funktion
  • hinzugefügte Abfragen sollten einen eindeutigen Titel und eine Beschreibung erhalten. Mit dem Speichern der Abfragen werden diese für alle GeoSQL Nutzer freigegeben.
Erstellung einer Abfrage
  1. Über den Button b_neueabfrage.png wird eine neue Abfrage hinzugefügt.
  2. Vergeben Sie nun einen Namen, eine Kategorie und eine Beschreibung.
  3. Im Feld Abfrage SQL notieren Sie die entsprechnde Abfrage.
    geosql_001.png

  4. Die zur Abfrage benötigten Ebenen finden Sie im rechten Oberflächenbereich.
  5. Durch Doppelklick wird die Ebene geladen und schwarz dargestellt.
  6. im Bereich darunter sehen Sie die Spaltenliste, also die Anzeige aller zur Verfügung stehenden Spalten einer Ebene.
  7. Speichern Sie Ihre Abfrage und starten Sie diese danach über den Button b_abfrageausfuehren.png.

 

Hinzufügen von Parametern:

Parameter werden im SQL mit @ hinzugefügt.

 

Hinzufügen von Filtern:

Filter werden im SQL mit $ hinzugefügt.

Hinzufügen von Parametern

Werte des SQL-Statementes können durch vom Anwender abzufragende Parameter ersetzt werden. Dazu muss ein neuer Parameter definiert werden. Dessen Schlüssel kann dann wiederum im SQL-Statement an Stelle des konkreten Wertes verwendet werden und muss mit einem vorangestellten @ kenntlich gemacht werden.

Beschreibung: Beschreibung für den Parameter

Standard: Definieren Sie einen Standardwert, mit welchem die Abfrage standardmäßig belegt ist (der Parameter ist für den Nutzer beim Start der Abfrage schon vorbelegt.)

Beispiel, wenn ein Parameter mit dem Schlüssel 'puffer' definiert wurde:

Select ... ST_BUFFER(haltestellen.gdo_geometry, @puffer) ...

---------------

Beispiel: Betroffenheitsrecherche: Liegt das ausgewählte Flurstück im Gewässerrandstreifen und/oder in einem Überschwemmungsgebiet und/oder Trinkwasserschutzgebiet?

Definition eines Parameters für den Abstand zum Flurstück:

Umsetzung in der Abfrage:

st_buffer(flst.geom, @MAX_DIST)

 

Beispiel  für eine Abfrage mit Parameterdefinition:

Anforderung: Auflistung der Gewässer in einer Gemeinde. Die Gemeinde kann durch eine Benutzereingabe bestimmt werden. 

Lösung: für die Gemeinde wird ein Parameter definiert.

Parameter..png

Titel: Geben Sie einen Titel für das Eingabefeld des Parameters an.

Schlüssel: Geben Sie eine Bezeichnung des Schlüssels an, welcher in der Abfrage verwendet wird.

Datentyp: Geben Sie den Datentyp des abzufragendenen Datenfeldes an.

Beschreibung: Die Beschreibung erscheint im Tooltip des Parametereingabefeldes. Formulieren Sie hier einen entsprechenden Text. Diese Angabe ist optional.

Standard: Hier können Sie einen Standardwert festlegen, mit welchem das Parameterfeld initialisiert werden soll. Diese Angabe ist optional.

Text der Abfrage:

select  gewaesser.gewkz , gewaesser.name , gewaesser.laenge as gesamtlaenge
from L276 as gewaesser
inner join (select * from L416 as gemeinden where gemeinden.kreis='Demokreis' and replace(ortsname, ', Stadt', '')=@gemeinde) gemeinden
    on match(gemeinden.shapeGeometry, gewaesser.geom) and st_intersects(gemeinden.shapeGeometry, gewaesser.geom)
order by gewaesser.laenge desc;

Erläuterungen zur Abfrage:

L276: Source ID der Ebene, welche abgefragt werden soll.(im Beispiel die Gewässerebene - Layertyp: PostgreSQL - Geometrien und das Geometriefeld heißt geom.

L416: Source ID der Ebene zur Verschneidung.(im Beispiel die Gemeinden - Layertyp: Shape und das Geometriefeld heißt shapeGeometry).

match(gemeinden.shapeGeometry, gewaesser.geom): Verschneidung der Geometrien => Betroffenheit prüfen.

@gemeinde:Bezugnahme auf definierten Parameter

Parameterfeld im Abfragefenster:

Parameter2.png

 

Hinzufügen von Filtern

Filterausdrücke können durch vom Anwender abzufragende Bedingungen ersetzt werden. Dazu muss ein entsprechender Filter definiert werden. Dessen Parameter haben folgende Bedeutung:

Schlüssel - Name des Filters, welcher dann im SQL-Statement als Platzhalter gekennzeichnet mit einem vorangestellten $ verwendet werden kann

Spalte - Ergebnisspalte des SQL-Statements, welche gefiltert werden soll

Optional - Wenn gesetzt, kann die Abfrage auch ohne Angabe eines Filterwertes ausgeführt werden

Auswahl-SQL - Statement zur Generierung einer Nachschlageliste. Die erste Ergebnisspalte wird dabei als Wertespalte interpretiert.

Hinweis: Eine mit OR verknüpfte Abfrage mehrerer Werte kann über den IN-Operator umgesetzt werden.

Beschreibung: Beschreibung für den Filter

Standard: Definieren Sie einen Standardwert, mit welchem die Abfrage standardmäßig belegt ist (der Filter ist für den Nutzer beim Start der Abfrage schon vorbelegt.)

Beispiel für die Ersetzung im Statement:

... WHERE $id_filter AND name LIKE '%wasser%'

 

Beispiel  für eine Abfrage mit Filterdefinition:

Anforderung: Anzeige aller Einleitstellen in einer Gemeinde einer spez. Anlagenart bzw. alle Anlagen.
Die Gemeinde sowie die Anlagenart soll durch Benutzereingaben gewählt werden.

Lösung: Für die Gemeinde und die Anlagenart wird jeweils ein Filter definiert.

Definition Filter für die Gemeinde:

Filter1.png

Auswahl - Sql: Select distinct gemeinde from L416 order by gemeinde;

Durch Aktivieren der Angabe Optional, ist es möglich, die Abfrage auch ohne Einschränkung auf eine Gemeinde auszuführen.

Definition Filter Anlagenart:

Filter3.png

Auswahl - Sql: select distinct anlagenart from L493 order by anlagenart;

Durch Aktivieren der Angabe Optional, ist es möglich, die Abfrage auch ohne Einschränkung auf eine Anlagenart auszuführen.

Text der Abfrage:

select einleitstellen.anlagenart as "Anlagenart", einleitstellen.anlagentyp as "Anlagentyp", einleitstellen.pzlnodetitle as "Bezeichnung", einleitstellen.gewaessername as "Gewässer", einleitstellen.geom as "Punkt", gemeinden.ortsname as "Gemeinde"
from L493 as einleitstellen
inner join (select * from L416 as gemeinden where $GEMEINDE) gemeinden
    on match(gemeinden.shapeGeometry, einleitstellen.geom) and st_intersects(gemeinden.shapeGeometry, einleitstellen.geom)
where $ART
order by  einleitstellen.anlagenart asc, einleitstellen.pzlnodetitle asc;

Erläuterung der Abfrage:

L493:  Source ID der Ebene, welche abgefragt werden soll.(im Beispiel die Ebene Einleitstellen- Layertyp: PostgreSQL - Geometrien und das Geometriefeld heißt geom.

L416: Source ID der Ebene zur Verschneidung.(im Beispiel die Gemeinden - Layertyp: Shape und das Geometriefeld heißt shapeGeometry).

st_intersects(gemeinden.shapeGeometry, einleitstellen.geom)

match(gemeinden.shapeGeometry, einleitstellen.geom): Verschneidung der Geometrien => Betroffenheit prüfen.

$gemeinde: Bezugnahme auf definierten Filter gemeinde (Beim Ausführen der Abfrage wird durch das System die Angabe durch einen aus der Filterdefinition generierten Filterausdruck ersetzt. (z.B. gemeinden.ortsname ='Bautzen') ,

$Art: Bezugnahme auf definierten Filter gemeinde (Beim Ausführen der Abfrage wird durch das System die Angabe durch einen aus der Filterdefinition generierten Filterausdruck ersetzt. (z.B. einleitstellen.anlagenart ='Anlage am Gewässer') ,

 Definierte Filter im Abfragefenster:

Filter4.png

Kopieren einer Abfrage

Zum Kopieren einer Abfrage ist auf den gleichnamigen Button zu klicken.

geosql_kopieren.png

Abfrage WFS

Die Abfrage von WFS Diensten ist mit GeoSQL auch möglich.

Beachten Sie, dass bei WFS Diensten mit mehreren Layern nur ein Layer über die Eigenschaft wfsLayers eingerichtet ist.

Beispiel: Abfrage eines WFS-Dienstes

Anforderung:

Anzeige aller Querbauwerke einer Gemeinde. Eine Einschränkung auf die Gemeinde und Bauwerksart muss ermöglicht werden.

Nutzen Sie zur Auswertung den WFS-Dienst der Fließgewässerstrukturkartierung 2009 vom LfULG

URL: https://www.umwelt.sachsen.de/umwelt/infosysteme/ags/services/wasser/
strukturguete_utm/MapServer/WFSServer?

Layer: wasser_strukturguete_utm:Querbauwerke

Lösung: Definition Gemeinde und Bauwerksart als Filter 

 WFS_FILTER1.png

WFS_FILTER2.png

 Abfragetext:

select Querbauwerke.[WEHR-ID__aus_WEHR-Datenbank_]  as "Wehr_ID", Querbauwerke.Querbauwerksart_Strukturkartierung as "Bauwerksart",Querbauwerke.Gewaesserkennzahl as "GewKz",
Querbauwerke.gewaessername as "Gewässername", Querbauwerke.[Absturzhoehe__cm_] as "[Absturzhöhe in cm]", Querbauwerke.Hochwert as "Hochwert", Querbauwerke.Rechtswert as "Rechtswert",  Querbauwerke.shape as "Punkt", gemeinden.ortsname as "Gemeinde"
from "L497.Querbauwerke" as Querbauwerke
inner join (select * from L416 as gemeinden where gemeinden.kreis='Bautzen' and $GEMEINDE) gemeinden
    on match(Querbauwerke.shape,gemeinden.shapeGeometry) and st_intersects(Querbauwerke.shape,gemeinden.shapeGeometry)
where $ART
order by  Querbauwerke.gewaessername,Querbauwerke.Querbauwerksart_Strukturkartierung asc;

Erläuterung der Abfrage:

 "L497.Querbauwerke": Zugriff auf die cardo-Ebene mit SoureId: L497. Layertype OGC - WFS Dienst ausgewählter WFSLayer - Querbauwerke;

- Syntax für den Zugriff: "SoureID.WFSLayername"

(Beachten Sie die Anführungszeichen!)

 L416: Zugriff aus cardo Ebene gemeinden mit der SoureID: 416.

match(Querbauwerke.shape,gemeinden.shapeGeometry)

st_intersects(Querbauwerke.shape,gemeinden.shapeGeometry): Verschneidung der WFS-Ebene mit den Gemeinden. Das Geometriefeld der Ebene L497 (WFS-Dienst) heißt "shape" und das Geometriefeld der Ebene L416 heißt "shapeGeometry"

$Gemeinde: Zugriff auf definierten Filter "Gemeinde" - Schlüssel: "Gemeinde"

$Art: Zugriff auf definierten Filter "Bauwerksart" - Schlüssel: "Art"