QGIS Advanced: Lektion 5

Tabellen Abfragen und Verbindungen

Beschreibung:

Häufig sind die Fragen, die an Geoinformationen gestellt werden, nicht lagebezogen, sondern inhaltlicher Natur. Um diese Fragen zu beantworten, benötigen wir Werkzeuge und Algorithmen, die sich nicht auf die Lage der Geometrien zueinander beziehen, sondern auf die Attribute (= Sachdaten).

Im Ersten Teil des Klicktutorials werden wir zwei Auswahl- bzw. Abfragewerkzeuge kennenlernen, im zweiten Teil werden wir uns mit den unterschiedlichen Verbindungsmöglichkeiten auseinandersetzen.

Lernziele:

  • Kennenlernen der Werkzeuge zu sachdatenbezogenen Abfragen
  • Kennenlernen der Werkzeuge zu sachdatenbezogenen Verbindungen

Attributive Abfrage/ Auswahl

Methode 1: „Objekte nach Ausdruck wählen…” (SELECT FEATURE USING AN EXPRESSION)

Ähnlich wie bei der lagebezogenen Auswahl gibt es zur attributiven Abfrage (TABLE QUERY) ein Werkzeug in der Auswahlwerkzeugleiste, dass für die Auswahl einzelner Sachdaten genutzt werden kann: **„**Objekte nach Ausdruck wählen…” . Du findest es, wenn du den schwarzen Pfeil neben dem zweiten Symbol in der Leiste drückst.

objekte-nach-ausdruck-waehlen.png

Diese Auswahlmöglichkeit werden wir jetzt anhand von drei Aufgaben testen:

Frage 1: Wie viele WEA mit einer Leistung über 2000kW/h gibt es in Thüringen?

Frage 2: Wie viele WEA mit einer Leistung unter 800kW/h wurden nach Baujahr 2000 errichtet?

Frage 3: Wie viele WEA des Typs VESTAS V 90 wurden nach Baujahr 2010 errichtet?

Zunächst brauchst du jedoch die Daten, die sich im Ordner 5_tabellen_auswahl_und_verbindungen befinden. Lade den „lverm_wka”-Layer aus der Thüringen-Geopackage in dein Projekt. Die drei Abfragen beziehen sich alle auf diesen Layer.

Los geht’s:

Erste Frage: Wie viele WEA mit einer Leistung über 2000kW/h gibt es in Thüringen?

  1. Wähle das „Objekte nach Ausdruck wählen”-Werkzeug aus.
  2. Jetzt musst du einen Ausdruck schreiben. Dies kannst du mit Hilfe des „Felder und Werte”-Unterpunktes in der Mitte des Ausdrucksfensters leicht zusammenstellen.
    Wähle mit Doppelklick „LEISTUNG” aus, so dass der Begriff in doppelten Anführungszeichen in deinem Ausdrucksfeld erscheint.
    Nun musst du nur noch das „größer als”-Zeichen und die Zahl 2000 einfügen. Danach kannst du unten rechts auf „Objekte wählen” klicken.

mit-ausdruck-waehlen-ueber2000_bessereAufloesung.png

  1. Im Ausdrucksfenster muss die folgende Zeile stehen:
"LEISTUNG" > 2000
  1. Antwort: 362 WKA

antwort_1_neu.png

Zweite Frage: Wie viele WKA mit einer Leistung unter 800kW/h wurden nach Baujahr 2000 errichtet?

  1. Wähle das „Objekte nach Ausdruck wählen”-Werkzeug aus.
  2. Den Ausdruck kannst du erneut mit Hilfe der grau unterlegten Gruppen zusammenklicken. Die Verknüpfung der zwei Bedingungen erzielst du mit dem Operator „AND”, den du unter dem Unterpunkt „Operatoren” findest.

leistung_800.png

  1. Im Ausdrucksfenster sollte die folgende Zeile stehen:
"LEISTUNG" < 800 AND "BAUJAHR" > 2000
  1. Antwort: 19 WKA

unter_800.png

Dritte Frage: Wie viele WEA des Typs VESTAS V 90 wurden nach Baujahr 2010 errichtet?

  1. Wähle das „Objekte nach Ausdruck wählen”-Werkzeug aus.
  2. Jetzt hast du die Möglichkeit, unter „Felder und Werte” den Typ (= das Feld, dass die WEA-Bezeichnung beinhaltet) anzuwählen und dann rechts auf „Alle eindeutigen” zu klicken. Dadurch werden dir die Werte dieses Feldes angezeigt und du kannst, wie beim Filtern auch, via Doppelklick die Bezeichnung „VESTAS V 90” in dein Ausdrucksfenster einfügen.

ausdruck_typ_alle-anzeigen-neu.png

  1. Der Ausdruck sollte wie folgt aussehen:
"TYP" = 'VESTAS V 90' AND "BAUJAHR" > 2010
  1. Antwort: 48 WEA

antwort_3_neu.png

Methode 2: „Objekte nach Wert wählen…” (SELECT FEATURES BY VALUE…)

Ein zweiter Weg, eine Auswahl der Sachdaten durchzuführen, ist ein Tool, das sich ebenfalls in der Auswahlwerkzeugleiste befindet und mit dem man oben beschriebene Ausdrücke mithilfe diverser Dropdownmenüs zusammenstellen kann.

objekte_nach_wert_waehlen.png

Los geht’s:

Aufgabe: Wähle alle WKA aus, deren Rotordurchmesser größer oder gleich 150 Meter ist.

  1. Wir arbeiten weiter mit dem lverm_wka-Layer aus der Thüringen-Geopackage.
    Ein Blick in die Attributtabelle zeigt uns, dass hier unter anderem auch der Rotordurchmesser der Windkraftanlagen gespeichert ist.
  2. Öffne das „Objekte nach Wert wählen…”-Werkzeug.
  3. Nun siehst du untereinander aufgeführt die einzelnen Felder deines Layers. Danach eine freie Zeile, in der du etwas eintragen kannst, dahinter den Button „Feld ausschließen…”. Drückst du auf diesen Knopf, kannst du weitere Operatoren für deine Abfrage auswählen.

felder_ausschlieen.png

  1. Trage bei „ROTORDURCH” den Wert 150 ein und wähle den Operator „Größer gleich” aus. Danach kannst du unten rechts auf „Objekte wählen” klicken.

rotordurch.png

  1. Nun solltest du als Ergebnis 41 Objekte ausgewählt haben.

rotordurch_neu.png

  1. Ähnlich wie beim Werkzeug für die räumlichen Abfragen, hast du auch hier die Möglichkeit zu steuern, ob eine neue Auswahl erstellt wird, oder die aktuellen Parameter zu einer bestehenden Auswahl hinzugezogen oder davon abgezogen werden sollen. Diese Optionen findest du, wenn du den kleinen schwarzen Pfeil neben dem Button „Objekte wählen” drückst.

objekte_aufleuchten_etc.png

Links daneben befinden sich noch zwei weitere Buttons. Der eine lässt deine Auswahl kurz mehrfach aufleuchten, der andere zoomt das Kartenfenster an die Stelle deiner Auswahl.

Attributive Verbindung

Während wir bisher nur die attributive Auswahl kennengelernt haben, wenden wir uns jetzt der attributiven Verbindung (TABLE JOIN) zu. Mithilfe einer attributiven Verbindung lassen sich Sachdaten aus Tabellen (.csv/ .txt/ .ods…) mit Vektorlayern verknüpfen. Hierfür ist eine gemeinsame Kennung in den zu verbindenden Datensätzen nötig. Zudem müssen beide Datensatze im QGIS-Projekt geladen sein.

Methode 1 - Verknüpfung im Eigenschaftenmenü

Die einfachste Methode, Sachdaten (aus Tabellen) mit Vektorlayern zu verbinden ist die Verknüpfungs-Funktion im Eigenschaften-Menü.
Anders als die feste Verbindung, die wir später als zweite Methode kennenlernen werden, ist diese Verbindung nicht statisch, die Daten innerhalb des QGIS-Projekts passen sich bei Veränderung des verknüpften Datensatzes mit an.
Diese Art der Verbindung ist außerdem nicht permanent. Die Verknüpfungen können über das Einstellungsmenü gelöscht, angepasst oder neu erstellt werden.

Los geht’s:

Aufgabe: Komplettiere die Gemeindegeometrien mit den Informationen zur Einwohnerdichte.

  1. Du benötigst hierfür den Layer „gemeinden” aus der Thüringen Geopackage aus dem „5_auswahl_und_verbindungen”-Ordner, sowie die „thueringen_gemeinden_ewz.csv”.

ACHTUNG: Öffne die csv-Datei über die Datenquellverwaltung, wie du es bereits im Basic-Tutorial für die Flughafen-csv gelernt hast. Wenn wir die Datei nur per Drag & Drop in das Projekt laden, dann wird ggf. Der Feldtyp deines Referenzfeldes nicht korrekt erkannt.

Datenquellverwaltung-csv_kurz_kleiner.png

Diesmal haben wir es allerdings nur mit einer Tabelle, nicht auch mit Punktkoordinaten zu tun.

  1. Nachdem du den Layer mit den Gemeinden geladen hast, kannst du mit einem Rechtsklick auf den Layer in der Layerübersicht das „Eigenschaften”-Fenster öffnen.

Eigenschaften_3.png

  1. Hier wählst du dann auf der linken Seite den Unterpunkt „Verknüpfungen” aus.

verknuepfungen-fenster.png

  1. Unten links findest du ein grünes Plus. Darüber kannst du neue Verknüpfungen hinzufügen.

gruenes_plus.png

  1. Jetzt wird dir schon der geladene csv-Layer in der obersten Zeile eingetragen. Darunter musst du das „Verknüpfungs”- und „Zielfeld” angeben. Wähle hier jeweils „DEBKG_ID” aus.

debkg_id_verknuepfungsfeld.gif

Hinweis gemeinsame Kennung:
Bei der Wahl der Referenz, über die die Datensätze zu verknüpfen sind, ist es wichtig darauf zu achten, dass es sich nicht um sich ändernde Daten handelt.
Eine automatisch vergebene ID oder die Einwohnerzahl einer Gemeinde bieten sich hier also nicht als gemeinsamer Marker an. In unserem Beispiel haben die zu verknüpfenden Dateien beide die Spalte „DEBKG_ID”, über die die Layer miteinander verknüpft werden. Dabei handelt es sich um eine fest vergebene Kennung des BKG.
Außerdem müssen nicht nur Feldname und -inhalt, sondern auch die Feldtypen übereinstimmen, um eine Verknüpfung zu gewährleisten.
Dass es sich in unserem Beispiel jeweils um ein Textfeld handelt (STRING), erkennst du an dem kleinen „abc” vor dem Layernamen.

  1. Im unteren Bereich dieses Fensters können wir jetzt angeben, welche Felder verknüpft werden sollen und ob sie ein Präfix erhalten.
    Setze dafür ein Häkchen bei „Verknüpfte Felder”.
    Danach kannst du beispielsweise das Feld mit der Einwohnerdichte auswählen („EWD”).

verknuepfte_felder_klein.png

  1. Anschließend solltest du einen Haken bei „Benutzerfeldnamenpräfix” setzen, um dein verknüpftes Feld von den layereigenen Feldern unterscheiden zu können.

benutzerfeldnamenpraefix.png

  1. Wenn du jetzt auf „OK” klickst und in die Attributtabelle deines Vektorlayers schaust, siehst du die verknüpften Informationen.

Att_EWD_verknuepft.png

Wunderbar, du hast die Aufgabe gelöst! 😊

  1. Mit Hilfe weiterer Einstellungen haben wir die Möglichkeit, die verknüpfte Datei bearbeitbar zu machen.
    Dafür ist es aber wichtig, sich zuerst über das Format der verknüpften Tabelle zu informieren.

Hinweis Änderbarkeit von Tabellendaten:
Die Möglichkeit eine verknüpfte Datei bereits beim Arbeiten mit einem Vektorlayer in QGIS zu editieren spart viel Zeit, da so Sachdaten nicht nachträglich angepasst werden müssen.
Während eine .csv- oder .txt-Datei nicht in QGIS änderbar ist, gibt es einige andere Tabellenformate, die man auch in QGIS bearbeiten kann.

Die einfachste Variante:
Speichert man eine in QGIS geladene .csv-Datei als gpkg-Tabelle ab (beim Exportieren „ohne Geometrie” wählen), erhält man eine veränderbare Tabelle, die nach Fertigstellung der Arbeiten problemlos wieder in das csv-Format umgewandelt werden kann.

Alternative:
Speichere dir deine CSV zunächst als OpenOffice-Tabelle ab (.ods). Diese ist nun via Drag & Drop in dein Projekt ladbar. Die Feldtypen werden dabei automatisch erkannt.
(Du kannst du die Umwandlung von .csv in .ods auch über die Exportoption in QGIS vornehmen.)

  1. Wir wählen die erste Variante und exportieren unsere CSV zunächst als gpkg-Layer. Rechtsklick auf den csv-Layer - „Export” - „Objekte speichern als…” Gib ganz oben als Format **„**Geopackage” an und wähle bei Dateiname die schon existierende **„**thueringen.gpkg” im Ordner 4_5_… aus. Als Layername kannst du „ewz_tabelle” angeben, als KBS den EPSG-Code „25832” ( =„ETRS89/ UTM zone 32N”). Achte beim Unterpunkt Geometrie darauf, dass hier „ohne Geometrie” eingestellt ist.

export_csv_zu_gpkg.png

  1. Wiederhole die Verknüpfung aus den Schritten 20 bis 24 mit deinem neuen Layer „ewz_Tabelle”.
  2. Jetzt passen wir die Parameter an, die dafür sorgen, dass unsere verknüpfte Tabelle änderbar ist.
    Setze als erstes ein Häkchen bei „Änderbarer verknüpfter Layer” und weitere bei „Einfügen/ Aktualisieren bei Änderung” und „Kaskadierendes Löschen”.
    Das erlaubt uns, die verknüpften Sachdaten automatisch anzupassen, während wir im Vektorlayer arbeiten. Korrespondierende Zeilen/ Objekte werden aktualisiert oder ggf. gelöscht.

aenderbar.png

Wenn du auch einen Haken bei „Dynamische Form” setzt, werden die Felder automatisch neu geladen, nachdem das Zielfeld geändert wurde.

  1. Jetzt musst du nur noch darauf achten, dass bei dem verknüpften Layer der Bearbeitungsstatus eingeschaltet ist.

bearbeitungsstatus.png

Herzlichen Glückwunsch, du hast Felder aus einer Tabelle verknüpft und diese sogar editierbar gemacht!

Hinweis: Mit dieser Art der Verknüpfung lassen sich nicht nur Tabellen, sondern auch die Sachdaten von Vektorlayern temporär miteinander verbinden.

Methode 2 - Verknüpfung mit Algorithmus

Während die Verknüpfungs-Option in den Layereigenschaften eines Vektorlayers lediglich eine vorübergehende Verbindung zwischen einem Vektorlayer und beliebig vielen weiteren Vektor- oder Tabellenlayern kreiert, erstellt das „Attribute nach Feldwert verknüpfen”-Werkzeug (JOIN ATTRIBUTES BY FIELD VALUE) einen komplett neuen Layer, der nun auch Sachdaten aus der Tabelle enthält.
Diese Verknüpfungen basieren ebenfalls auf einer gemeinsamen Kennung.

Wir benutzen wieder den „gemeinden”-Layer aus der thueringen-gpkg und die csv-Tabelle um die gleiche Aufgabe wie bei Methode 1 zu lösen.

Los geht’s:

  1. Du findest das „Attribute nach Feldwert verknüpfen”-Werkzeug unter den „Verarbeitungswerkzeugen” (= Zahnrad).

zahnrad.png

  1. Wenn du im Suchfenster beispielsweise den Begriff „table join” eingibst, wird dir das richtige Werkzeug unter dem Punkt „Vektoren allgemein” aufgelistet.

verarbeitungswerkzeuge_table_join.png

  1. Nun öffnet sich ein neues Fenster, in dem die Parameter dieses Algorithmus angepasst werden können. Gib als „Eingabelayer” die Gemeinden an. Die „Tabellenspalte” ist, wie bereits bei der Methode davor, das DEBKG_ID-Feld.

eingabelayer.png

  1. Als nächstes müssen wir die csv verknüpfen. Diese geben wir unter dem Punkt „Eingabelayer 2” an. Hier wird, unter „Tabellenfeld 2”, wieder die DEBKG_ID angegeben.

eingabelayer_2.png

  1. Nun muss der „Verknüpfungstyp” definiert werden. Du kannst wählen zwischen einer eins-zu-eins oder eins-zu-viele Zuordnung. Wir lassen es bei der Einstellung: „Nur Attribute des ersten passenden Objekts verwenden (eins-zu-eins)”

verknuepfung_algor_mitNum.gif

  1. Darunter hast du die Möglichkeit, deinen verknüpften Feldern ein Präfix vorzusetzen, um sie von den Feldern deines Ausgangslayers unterscheiden zu können. Gib hier beispielsweise „csv_” ein.

praefix_join_algo.png

  1. Nun kannst du die Verbindung als temporären Layer ausgeben lassen, indem du auf „Starten” klickst. In deiner Layerübersicht taucht nun ein weiterer Layer auf, der die Attribute deines Vektorlayers und der Tabelle enthält.

zusammengefasster_lay_att_2.png

  1. Dir ist sicher aufgefallen, dass wir eine Einstellung übersprungen haben. Unter den Einstellungen zu Layer 2 (der Tabelle) kann man zusätzlich noch auswählen, welche der Felder überhaupt mit übertragen werden sollen.

zu_kopierende_felder.png

Wenn du am Ende der Zeile „Layer 2 zu kopierende Felder…****” auf die drei Punkte am Ende klickst, öffnet sich ein neues Fenster, in dem die zu kopierenden Felder via Häkchen anwählbar sind.
Setze ein Häkchen bei dem Feld mit der Einwohnerzahl „EWZ”.

zu_kopierende_felder_auswahl.png

  1. Wenn du nun auf „Starten” klickst, erscheint der neue, temporäre Layer „Zusammengefasster Layer” in deinem Projekt. Er beinhaltet neben den Feldern des „thueringen - gemeinden”-Layers auch eine Spalte aus der „thueringen_gemeinden_ewz.csv”, die die Einwohnerzahl der jeweiligen Gemeinde enthält.

zusammengefasster_layer_ewz_besser.png

Sehr schön, nun hast du auch die zweite Methode zum Verbinden von Sachdaten kennengelernt! :)

Vektorlayer zusammenführen (JOIN) - Verbindung zweier Layer mit gleicher Geometrie, bei der alle Daten übernommen werden
Attribute nach Position zusammenführen = Räumliche Verbindungen (SPATIAL JOIN) - Verbindung zweier Layer mit Hilfe ihrer Lage zueinander
Attribute nach Feldwert verknüpfen (TABLE JOIN/ JOIN ATTRIBUTES BY FIELD VALUE) - erstellt einen Layer mit zusätzlichen Attributen aus einer Tabelle/ einem anderen Layer; hierfür wird ein gemeinsamer Marker benötigt
Attribute nach nächstem Verknüpfen (JOIN ATTRIBUTES BY NEAREST) - Verbindet die Attribute zweier Geometrien, die sich räumlich am nächsten sind in einem neuem Layer; die Distanz wird ebenfalls mit ausgegeben

Zusatzaufgaben:

Hier noch einige Übungsaufgaben zur Vertiefung.

  1. Wie viele WKA von Vestas sind in Planung?
  2. Gibt es eine ‘Gemeinde’ mit einer EWD über 500?
  3. Wie viele WKA liegen in Gemeinden, die mit einem “B” beginnen?

Antworten mit Skizzierung des Lösungsweges:

  1. Wie viele WKA von Vestas sind in Planung?
    a. „mit Ausdruck wählen” und folgenden Ausdruck eintragen:
"STATUS" = 'bestätigte Planung' AND "TYP" LIKE 'VESTAS%'

Tipp: Du kannst dir dafür das mittlere Fenster des Ausdrucksmenüs zur Hilfe nehmen und dir einen Ausdruck mit den Untergruppen „Felder und Werte” sowie „Operatoren” zusammenklicken.
b. Ergebnis: 36 WKA der Firma Vestas sind in Planung.

Hinweis SQL:
Während das AND hier zwei Ausdrücke miteinander verbindet, sorgt das LIKE in Kombination mit dem % dafür, dass alle Objekte mit dem Teilbegriff ‘VESTAS’ im Namen gefunden werden.

LIKE ist ein Operator, der Zeichen für Zeichen vergleicht und den Gebrauch von Platzhaltern (z.B.: %) erlaubt.

= ist ein Operator, der prüft, ob zwei Zeichen gleich sind. Beim Vergleich von Zeichenketten vergleicht er die gesamte Zeichenabfolge; der Einsatz von Platzhaltern ist nicht möglich.

  1. Wie viele WKA liegen in Gemeinden, die mit einem “B” beginnen?
    a. „Objekte nach Wert wählen”
    b. In der zweiten Zeile (= GEN) ‘B’ eintragen und im Dropdownmenü „Beginnt mit…” auswählen
    c. danach „Nach Position selektieren”
    d. Oben WKA-Layer eintragen, dann als Prädikat **„**schneidet” oder sind innerhalb auswählen
    e. Unten Gemeindelayer angeben und Häckchen bei „nur gewählte Symbole” setzen
    f. Ergebnis: 83 WKA (in Büttstedt, Berka, Bad Langensalza, Blankenburg, Breitungen, Bösleben, Berlstedt, Ballstedt, Bad Sulza, Bucha, Berga und Brüheim).
  2. Gibt es eine ‘Gemeinde’ mit einer EWD über 500?
    a. Du brauchst den Gemeinde-Layer und die EWZ-Tabelle.
    b. Öffne die Layereigenschaften des Gemeinde-Layers.
    c. Verknüpfe die EWD-Spalte der Tabelle mit dem Gemeindelayer (das Verknüpfungsfeld der zwei Layer ist wieder die DEBKG_ID)
    ACHTUNG: Hier wurde als Präfix für die verknüpfte Spalte wieder “csv_” gewählt.
    d. „Objekte über Ausdruck wählen…”
"csv_EWD" > 500

e. Schaue dir die Attributtabelle des Gemeinde-Layers an und bewege mit Hilfe des „Auswahl nach oben”- Buttons deine gewählten Objekte in die obersten Zeilen der Tabelle.
Achte nun auf Einträge im Feld „BEZ”.
f. Ergebnis: Während 10 Objekte ausgewählt werden, handelt es sich nur bei einem um eine Gemeinde (Seebach).