Beschreibung:
In dieser Lektion bauen wir uns einen kleinen Geodatenpool für das Bundesland Thüringen auf. Gute und effiziente GIS-Projekte bauen immer auf einem guten Geodatenmanagement auf, also dem sinnvollen Organisieren, Strukturieren und Aufbereiten der Geodaten auf der Festplatte (bzw. in der Cloud). Im Gegensatz zu den anderen Lektionen dieses Tutorials kommt es in dieser Lektion also nicht auf die Erscheinungsweise der Geodaten an (Stil, Beschriftung, Layout, etc.), sondern auf die Geodaten an sich. Darum werden wir in dieser Lektion auch keine Projektdatei (*.qgz) abspeichern, da das Entscheidende auf der Seite der Geodaten geschieht.
Lernziele:
- Erstellung einer Datenbank im Geopackage-Format (*.gpkg)
- Exportieren von Layern in eine Geopackage-Datenbank
- Ausschneiden von Vektor-Layern (Clip)
- Ausschneiden von Raster-Layern (Clip)
- Filtern von Daten (SQL)
- Umwandlung von Geodaten in andere Dateiformate
- Umprojizieren von Geodaten in andere Koordinatensysteme
Los geht’s:
- Öffne QGIS oder starte ein neues Projekt, falls dein QGIS schon geöffnet ist. Du startest ein neues Projekt, indem du auf das Symbol mit der weißen Seite klickst oder in der Menüleiste auf Projekt → Neu
- Navigiere im Browserfenster zu deinem Kursordner und lade den Layer „bundeslaender“ aus der bereits bekannten Datenbank brd.gpkg ein.
- Zunächst werden wir das Polygon, das für das Bundesland Thüringen steht, selektieren. Klicke auf das Auswahl-Werkzeug in der Attribut-Werkzeugleiste und anschließend auf das entsprechende Polygon im Kartenfenster.
- Zur Erinnerung: Genausogut könnte man auch die Selektion über die Attributtabelle durchführen, falls man sich mit der Geographie nicht so gut auskennt oder die Layer sehr viele Objekte haben. Dafür müsste man die Attributtabelle öffnen und die Zeile selektieren, die für das entsprechende Objekt steht. Schließe die Attributtabelle wieder.
- Klicke im Layerfenster mit der rechten Maustaste auf den Layer „bundeslaender“ → Exportieren → Objekt speichern als...
- Es öffnet sich ein neues Fenster („Vektorlayer speichern als…“). Wähle im ersten Dropdown das Format „GeoPackage“ aus. Klicke in der Zeile darunter (Dateiname) auf das Symbol mit den drei Punkten, um einen geeigneten Ort auf der Festplatte zu wählen (Ordner „output“) und einen geeigneten Namen zu vergeben („thueringen“). Bestätige mit „Speichern“.
- Wähle einen geeigneten Namen für den neuen Layer, z.B. „bundesland_thueringen“. Aktiviere den Haken bei „Nur gewählte Objekte speichern“ und bestätige mit OK.
- Der neue Layer wird deinem Projekt hinzugefügt, weil im vorigen Schritt der Haken bei „Gespeicherte Datei zur Karte hinzufügen“ aktiviert war. Versuche auch nachzuvollziehen, was mit den Geodaten auf der Festplatte (Browserfenster) geschehen ist. Es wurde im Ordner „output“ eine neue Datenbank mit der Endung *.gpkg erstellt. Diese Datenbank beinhaltet einen Layer, nämlich „bundesland_thueringen“.
- Falls du im Browserfenster deine neue thueringen.gpkg nicht in deinem „output“-Ordner finden kannst, musst du vielleicht die Ansicht deines Browserfensters aktualisieren. Klicke dafür einfach auf das Symbol mit den zwei Pfeilen und schaue jetzt nochmal nach, ob du deine neu erstellten Daten finden kannst.
- Grundsätzlich ist es immer hilfreich zu wissen, wo die Layer im Layerfenster eigentlich auf der Festplatte physisch gespeichert sind. Wenn man z.B. mit dem Mauszeiger auf den Layernamen im Layerfenster bewegt (ohne zu klicken) und einen Moment wartet, wird der Dateipfad des Layers in einem gelben Kasten angezeigt.
- Ein anderer Weg, die Quelle (bzw. den Dateipfad) eines Layers im Layerfenster zu erfahren, ist der Blick in die Layereigenschaften: Rechtsklick auf den Layernamen im Layerfenster → Eigenschaften → Information
Hinweis zum Unterschied Layerfenster und Browserfenster: Das Umbenennen, Kopieren und Löschen eines Layers im Layerfenster bezieht sich nur auf das Projekt und verändert die Daten nicht (!) auf der Festplatte. Im Gegensatz dazu verändert das Umbenennen, Kopieren und Löschen eines Layers im Browserfenster die Daten tatsächlich auf der Festplatte. Versuche dir den Unterschied zwischen Layerfenster und Browserfenster bewusst zu machen und einzuprägen!
- Entferne den Layer „bundeslaender“ aus deinem Projekt: Rechtsklick im Layerfenster auf den Layer „bundeslaender“ → Layer löschen → OK
- Lade die „kreise“ aus der brd.gpkg ein in das Layerfenster, z.B. durch Drag & Drop ins Kartenfenster. Anschließend Rechtsklick auf den Layer „kreise“ im Layerfenster → Filter.
- Erstelle im Filterfenster folgende Abfrage:
"bundesland" = 'Thüringen'
Diese Abfrage kannst du mithilfe von Copy & Paste (Strg C und Strg V) in das untere weiße Fenster einfügen oder mit der Tastatur eingeben. Oder du verwendest die folgende Kombination an Mausklicks, wie im folgenden Screenshot dargestellt:
- Doppelklick auf das Attribut „bundesland“
- Klick auf das Zeichen „=“ im Operatoren-Block
- Klick auf „Alle“
- rechten Balken nach unten bewegen
- Doppelklick auf den Attributwert „Thüringen“
- Klick auf OK
- Der Layer „kreise“ wird nun reduziert auf diejenigen Objekte, die die Bedingung erfüllen. Während der Layer eigentlich aus 401 Objekten besteht, werden nur noch 23 Objekte dargestellt. Alle anderen Objekte, die diese Bedingung nicht erfüllen, wurden „weggefiltert“, dh sie werden im Kartenfenster und in der Attributtabelle nicht mehr angezeigt. Im Layerfenster erscheint ein kleines Filter-Symbol hinter dem Layernamen.
Hinweis zum Filtern: Das Filtern von Layern mithilfe so genannter SQL-Ausdrücke ist extrem praktisch, denn in vielen QGIS-Projekten braucht man nur Teilmengen von bestimmten Layern. Es ist erstaunlich, mit welch kurzen Abfrageausdrücken (sql queries) man riesige Datenmengen präzise auf die relevanten Daten für ein bestimmtes Projekt filtern kann. Der Einstieg in die Datenbanksprache SQL (Structured Query Language) ist sehr schnell möglich und mit wenigen Ausdrücken lassen sich schnell erste Erfolgserlebnisse erzielen. Eine hilfreiche kostenlose Plattform (ohne Anmeldung) zum Üben von SQL ist https://www.w3schools.com/sql/ Natürlich gibt es auch sehr komplexe SQL-Ausdrücke, deren Erstellung sehr gute Kenntnisse voraussetzen.
- Jetzt wollen wir die 23 Thüringer Kreise und Städte abspeichern als einen weiteren Layer der in dieser Lektion erstellten Datenbank thueringen.gpkg im output-Ordner: Rechtsklick im Layerfenster auf den Layer „kreise“ → Exportieren → Objekt speichern als…
- Wähle als Format Geopackage, klicke in der Dateiname-Zeile wieder auf das Symbol mit den drei Punkten und navigiere zur bereits erstellten thueringen.gpkg in deinem output-Ordner und vergebe den Namen „kreise“ unter Layername. Klicke auf OK.
- Deinem Projekt (=deinem Layerfenster) wurde wieder ein neuer Layer hinzugefügt. Versuche wieder nachzuvollziehen, wo der Layer auf deiner Festplatte abgespeichert wurde. Vergiss nicht die Ansicht deines Browserfensters zwischendurch zu aktualisieren.
- Um etwas mehr Übersichtlichkeit in unserem Layerfenster zu erhalten, können wir den gefilterten Layer „kreise“ wieder aus dem Projekt entfernen.
- Lade den Layer „staedte“ aus der bereits bekannten brd.gpkg in das Projekt ein, z.B. per Drag & Drop in das Kartenfenster.
- Öffne wieder das Filter-Fenster: Rechtsklick im Layerfenster auf den Layer „staedte“ → Filter
- Erstelle folgende SQL-Abfrage:
"bundesland" = 'Thüringen'
Auch diese Abfrage kannst du entweder hier kopieren und in das untere weiße Fenster einfügen oder mit der Tastatur eingeben. Oder du verwendest die folgende Kombination an Mausklicks wie im folgenden Screenshot markiert:
- Doppelklick auf das Attribut „bundesland“
- Klick auf das Zeichen „=“ im Operatoren-Block
- Klick auf „Alle“
- rechten Balken nach unten bewegen
- Doppelklick auf den Attributwert „Thüringen“
- Klick auf OK
- Im Layerfenster erscheint wieder das Filter-Symbol, dieses Mal hinter dem Layer „staedte“. Dein staedte-Layer (normalerweise 161 Objekte) wurde durch unsere Abfrage reduziert auf nur noch 9 Städte in Thüringen. Du kannst dir übrigens auch die Objektanzahl im Layerfenster anzeigen lassen durch Rechtsklick auf den Layer „staedte“ → „Objektanzahl anzeigen“. Es erscheint die Zahl „9“ in eckigen Klammern hinter dem Layernamen.
- Jetzt speichern wir wieder den Layer ab in unsere thueringen.gpkg im output-Ordner. Rechtsklick auf den Layer „staedte“ im Layerfenster → Exportieren → Objekt speichern als…
- Gebe als Format wieder „Geopackage“ an, wähle als Speicherort die thueringen.gpkg im output-Ordner aus und gebe als Layername „staedte“ an. Bestätige mit OK.
- Deinem Projekt wurde wieder ein neuer Layer hinzugefügt. Versuche wieder nachzuvollziehen, wo der Layer auf der Festplatte abgespeichert worden ist. Falls du ihn nicht finden kannst, aktualisiere deine Browser-Ansicht. :)
- Um nicht die Übersicht in unserem Projekt zu verlieren: Entferne den gefilterten Layer „staedte“ (nicht den neuen staedte-Layer) aus deinem Projekt: Rechtsklick im Layerfenster auf den gefilterten Layer „staedte“ → Layer löschen → OK
- Lade als nächstes den Layer „bahnstrecken“ aus deiner brd.gpkg in dein Projekt, z.B. per Drag & Drop in das Kartenfenster.
- Öffne die Attributtabelle der Bahnstrecken (z.B. durch Rechtsklick im Layerfenster auf den Layer „bahnstrecken“ Attributtabelle öffnen). Schaue dir die Attribute an. Im Gegensatz zu den anderen Layern gibt es hier kein Attribut für die Bundesländer. Das bedeutet, wir können zum jetzigen Zeitpunkt keinen sinnvollen Filterausdruck verwenden. Schließe die Attributtabelle wieder.
- Wenn man sich die Struktur der Liniengeometrien im Kartenfenster anschaut, z.B. mithilfe des Info-Tools, kann man Folgendes beobachten: Die Liniengeometrien enden nicht an den Bundeslandgrenzen, sondern sie gehen darüber hinaus. Wir können also sowohl in den Sachdaten (Attributtabelle) als auch in den Geometrien (Kartenfenster) feststellen, dass wir mit dem Filter nicht weiter kommen. Wir brauchen einen anderen Weg, um einen Layer zu erhalten, der exakt die Bahnstrecken von Thüringen beinhaltet.
- Klicke in der Menüleiste auf Vektor → Geoverarbeitungswerkzeuge → Zuschneiden
- Wähle im Fenster des Werkzeugs bei Eingabelayer den Layer „bahnstrecken“ aus. Wähle darunter bei Layer überlagern den Layer „bundesland_thueringen“ aus. Klicke auf das Symbol mit den drei Punkten und wähle „Speichere in GeoPackage“.
- Wähle als Speicherort die thueringen.gpkg im output-Ordner aus und bestätige mit „Speichern“.
- Ein weiteres kleines Fenster öffnet sich. Gebe dort als Layernamen „bahnstrecken“ an und bestätige mit „OK“.
- Führe das Werkzeug aus mit Klick auf „Starte“
- Deinem Projekt wird ein weiterer Layer „bahnstrecken“ hinzugefügt. Man kann sehen, dass die Geometrien des neuen Layers im Kartenfenster genau bis zu den Bundeslandgrenzen von Thüringen reichen. Versuche wieder im Browserfenster nachzuvollziehen, wo der neue Layer gelandet ist. Schließe das Werkzeugfenster.
- Entferne den Layer „bahnstrecken“, der die Bahnstrecken der ganzen BRD enthält, aus deinem Projekt.
- Nachdem wir in dieser Lektion vier neue Vektorlayer erzeugt haben und alle in der thueringen.gpkg abgespeichert haben, werden wir jetzt einen Rasterlayer „clippen“. Lade den Layer "brd_landbedeckung.tif" in dein Projekt z.B. per Drag & Drop in das Kartenfenster. Falls der Layer alles andere im Kartenfenster überdeckt, verändere einfach per Drag & Drop die Hierarchie in deinem Layerfenster, sodass der Rasterlayer „brd_landbedeckung“ im Layerfenster ganz unten liegt und dementsprechend im Kartenfenster unter den anderen Layern angezeigt wird.
- Klicke in der Menüleiste auf Raster → Extraktion → Raster auf Layermaske zuschneiden…
- Gebe im Werkzeug-Fenster als Eingabelayer „brd_landbedeckung“ an und als Maskenlayer den Layer „bundesland_thueringen“. Definiere im unteren Teil des Fensters (bei „Abgeschnitten (Maske)“) den Speicherort und -namen der neuen Datei. Wähle wieder deinen „output“-Ordner als Speicherort aus und wähle als Namen „thueringen_landbedeckung.tif“. Klicke auf „Starte“
- Der neue Layer wurde wieder automatisch unserem Kartenprojekt hinzugefügt. Schließe das Werkzeug-Fenster. Wenn du im Layerfenster den Layer "brd_landbedeckung“ deaktivierst, dann wirst du im Kartenfenster den neuen Rasterlayer „thueringen_landbedeckung“ sehen können. Versuche auch dieses Mal wieder im Browserfenster nachzuvollziehen, wo der neue Rasterlayer abgespeichert worden ist.
- Für die Übersicht: Entferne den Layer „brd_landbedeckung“ aus dem Layerfenster durch Rechtsklick auf den Layer"brd_landbedeckung" im Layerfenster → Layer löschen → OK
- Fazit: Das Ergebnis der Lektion sind fünf neue Layer. Wir haben verschiedene Methoden angewendet, um jeweils nur einen Teil der ursprünglich zur Verfügung gestellten Geodaten abzuspeichern. Wir haben eine kleine (dateibasierte) Datenbank im Geopackage-Format für Thüringen erstellt und die neuen Layer mithilfe unterschiedlicher Methoden (Auswahl, Filter, Ausschneiden) darin abgespeichert. Darüber hinaus haben wir eine Rasterdatei im Geotiff-Format ausgeschnitten und im gleichen Ordner wie die Geopackage-Datenbank abgespeichert. Alle Geodaten liegen im gleichen Koordinatensystem vor (UTM32, EPSG: 25832).
Die Lektion 4 ist hiermit beendet. Es folgen einige allgemeinere Hinweise zum Kontext.
Hinweis QGZ versus Geodaten: In einem QGIS-Projekt (.qgz / .qgs) werden keine (!) Geodaten gespeichert, sondern nur die Pfade zu den Geodaten und ihre Erscheinungsweise (Stil, Beschriftung, Drucklayout, Projekt-KBS, etc.). Eine QGZ-Datei ist sozusagen ohne die Geodaten wertlos. Viele AnwenderInnen machen beim Datenaustausch den Fehler, nur die QGZ / QGS zur Verfügung zu stellen und nicht auch die Geodaten. Im Gegensatz zur QGZ beinhaltet eine Geopackage-Datenbank (.gpkg) die Layer tatsächlich, es ist eine Datenbank. Die ähnliche Anzeige im Browserfenster sollte die AnwenderInnen nicht verwirren. Ürbrigens: Die Geodaten (wie z.B. gpkg) kann auch in anderen proprietären GIS gelesen werden (z.B. ArcGIS, Geomedia, MapInfo), während die QGZ nur in QGIS gelsen werden kann. Präge dir folgendes ein: Ein QGIS-Projekt (.qgz) speichert nur die Pfade zu den Geodaten, eine Geopackage-Datenbank (*.gpkg) speichert tatsächlich die Geodaten!
Hinweis Geopackage-Format: Das Geopackage ist ein quelloffenes Geodatenformat, das zunehmend an Popularität gewinnt und sich sehr gut für kleine bis mittelgroße Projekte eignet. Im diesem QGIS-Basics Kurs arbeiten wir für Vektordaten durchgehend mit diesem Format. Geopackage-Datenbanken sind dateibasierte Datenbanken, dh sie sind genauso einfach in der Handhabung, wie z.B. ein Word- oder Excel-Dokument. Sie können also umbenannt, kopiert, verschoben oder bei Filesharing-Plattformen wie wetransfer hoch- und runtergeladen werden. Falls sie nicht sehr groß sind können sie auch ganz einfach per Email verschickt werden. Das Geopackage-Format kann außerdem von allen marktüblichen GIS gelesen werden, wie z.B. ArcGIS, Geomedia, etc. Der Vorteil des Geopackage im Vergleich zum immer noch weit verbreiteten Shapefile-Format wird u.a. in diesem englischen Blogartikel erklärt: https://www.gis-blog.com/geopackage-vs-shapefile/ Für größere Projekte mit sehr großen Datenmengen lohnt sich der Umstieg auf eine PostgreSQL-Datenbank inkl. PostGIS-Erweiterung.
Hinweis Dateiformate: Ein großer Vorteil von QGIS im Vergleich zu anderen marktüblichen GIS sind die zahlreichen unterstützten Dateiformate, sowohl Raster- als auch Vektorformate (siehe Screenshot für Vektorformate). Vielleicht kommt dir das eine oder andere Format bekannt vor. Wenn du magst, probiere z.B. einfach mal den Export eines beliebigen Geopackage-Layers in ein anderes Format (z.B. Shapefile, GeoJSON) aus. Dafür musst du nur in der ersten Zeile des Export-Fensters das entsprechende Dateiformat aussuchen.
Hinweis Koordinatensysteme (KBS): Geodatenmanagement hat auch immer mit dem Thema Koordinatensysteme zu tun. Da Thüringen noch in der UTM-Zone 32 (EPSG: 25832) liegt, haben wir das Koordinatensystem der neuen Layer nicht verändert, sondern immer bei UTM 32 (EPSG: 25832) belassen. In der folgenden Abbildung kann man erkennen, dass ein Großteil Deutschlands in der UTM-Zone 32 liegt und ein kleinerer Teil im Osten in der UTM-Zone 33 (Bildquelle: https://de.wikipedia.org/wiki/UTM-Referenzsystem#/media/Datei:Utmzonenugitterp.png). Die Bundesländer Berlin, Brandenburg, Sachsen und Mecklenburg-Vorpommern liegen also alle komplett oder zum größten Teil in der UTM-Zone 33. Außerdem liegen einige Kreise in Bayern und Sachsen-Anhalt in der UTM-Zone 33 (25833).
Hinweis Umprojizieren: Falls du dir zum Beispiel einen Geodatenpool für Sachsen aufbauen willst, müsstest du die Daten entsprechend umprojizieren. Dafür musst du nur im bereits bekannten Export-Fenster das neue Koordinatensystem des jeweiligen neuen Layers angeben. Wenn du das Umprojizieren üben willst, kannst du als Zusatzaufgabe folgendes machen: Erstelle dir einen Geodatenpool zum Bundesland Sachsen. Führe alle in dieser Lektion beschriebenen Schritte genauso durch, wie für das Bundesland Thüringen. Der einzige Unterschied: Gebe im Fenster des Export-Dialogs das Koordinatensystem der UTM-Zone 33 (EPSG: 25833) an. Prüfe anschließend in den Metadaten (Rechtsklick auf den neuen Layer im Browserfenster Layer-Eigenschaften), ob für den neu erstellten Layer das neue Koordinatensystem in den Metadaten hinterlegt ist.
Hinweis zum Auswählen eines neuen Koordinatensystems: Falls in dem Dropdown bei „KBS“ nicht das gewünschte Koordinatensystem erscheint, kannst du es durch Klick auf die Weltkugel aussuchen. Dabei kannst du über die Suchfunktion nach Koordinatensystemen suchen, wir empfehlen dabei immer nach dem gewünschten EPSG-Code zu suchen, denn das ist eindeutig (hier: 25833). Wichtig ist, dass man im nächsten Schritt einmal auf das gefundene Koordinatensystem im mittleren Bereich des Fensters klickt unter der Zwischenüberschrift „Vordefinierte Koordinatenreferenzsystem“. Dadurch wird einem auch die Anzeige eines roten Kastens auf einer Weltkarte angezeigt: Sie zeigt an, für welchen Bereich sich das ausgewählte Koordinatensystem eignet. Jetzt braucht man nur noch mit OK zu bestätigen und das neue Koordinatensystem wird im Export-Dialog in der vierten Zeile (KBS) angezeigt (siehe Screenshot oben).