Multikriterielle Überlagerungs-Analyse (QGIS3)

Unter gewichteter multikriterieller Überlagerungs-Analyse wird die Auswahl von Flächen auf der Basis mehrerer Attribute verstanden, die im Untersuchungsgebiet definiert sein sollten. Obwohl es sich um eine verbreitete GIS-Technik handelt, wird diese am effizientesten mit einem gitterbasierten Ansatz auf Rasterdaten ausgeführt.

Bemerkung

Vektor- vs. Raster-Überlagerungen

Man kann Überlagerungs-Analysen auf Vektordaten ausführen, indem Verarbeitungswerkzeuge für Geodaten wie Puffer, Überblendungen, Differenzbildungen oder Überschneidungen eingesetzt werden. Diese Methoden sind perfekt geeignet, wenn ein binäres Ergebnis wie geeignet / nicht geeignet erzeugt werden soll und mit einigen wenigen Layern gearbeitet wird.

Die Arbeit mit Rasterdaten ergibt eine Rangfolge der Eignung und nicht nur die am besten geeignete Fläche. Sie ermöglicht es auch, einfach eine beliebige Anzahl an Eingabelayern zu kombinieren und jedem verwendeten Kriterium eine unterschiedliche Wichtung zuzuweisen. Es handelt sich um das allgemein bevorzugte Vorgehen für die Bewertung der Eignung von Flächen.

Dieses Tutorial behandelt den typischen Arbeitsablauf für die Ausführung einer Flächeneignungsanalyse. Es werden Vektor-Quelldaten zu geeigneten Rasterdaten konvertiert. Letztere werden re-klassifiziert und mathematischen Operationen unterzogen.

Überblick über die Aufgabe

In diesem Tutorial bestimmen wir geeignete Flächen für die Erschließung, welche sich

  • nah an Straßen und

  • abseits von Gewässern und

  • nicht in Schutzgebieten befinden.

Beschaffung der Daten

Wir verwenden Layer von Vektordaten aus dem OpenStreetMap-Projekt (OSM). OSM ist eine Datenbank weltweit frei verfügbarer Basis-Kartendaten. Geofabrik vertreibt täglich aktualisierte Shapefiles der OpenStreetMap-Datensätze.

Wir verwenden die OSM-Datenlayer für den indischen Bundesstaat Assam. Die von Geofabrik heruntergeladenen India Shapefiles sind auf die Grenzen des Bundesstaats zugeschnitten und in einer einzigen GeoPackage-Datei zusammengefasst worden. Eine Kopie der Daten kann von folgendem Link heruntergeladen werden:

assam.gpkg

Datenquelle: [GEOFABRIK]

Arbeitsablauf

  1. Wir suchen die heruntergeladene Datei assam.gpkg im QGIS-Browser, erweitern sie und ziehen jeden der 5 Datenlayer in den Arbeitsbereich. Die Layer boundary, roads, protected_regions, water_polygons und water_polylines werden in das Layer-Panel geladen.

../../_images/1105.png
  1. Der erste Schritt der Überlagerungs-Analyse besteht darin, jeden der Datenalyer in einen Rasterlayer zu konvertieren. Es ist wichtig, dass alle entstehenden Rasterlayer dieselbe Ausdehnung haben. Wir verwenden den boundary-Layer als Begrenzung für die Rasterlayer. wir wählen Verarbeitung ‣ Werkzeugkiste und suchen den Algorithmus GDAL ‣ Vektorkonvertierung ‣ Rastern (Vektor nach Raster) und starten ihn per Doppelklick.

../../_images/2100.png
  1. Im Dialogfenster Rastern (Vektor nach Raster) wählen wir roads als Eingabelayer. Wir wollen ein Ausgaberaster erzeugen, in welchem der Pixelwert 1 die Straßen und der Wert 0 keine Straßen darstellt. Wir geben 1 als Festen Wert einbrennen an. Die Eingabelayer sind in einem KBS definiert, welches Meter als Einheit verwendet. Wir wählen Georeferenzierte Einheiten als Ausgaberastergrößeneinheiten. Die Auflösung des Ausgaberasters soll 15 Meter betragen. Dazu setzen wir sowohl die Breite/Horizontale Ausflösung als auch die Höhe/Vertikale Auflösung auf 15. Danach öffnen wir die Drop-Down-Liste neben Ausgabegröße und wählen Aus Layer berechnen -> boundary.

../../_images/340.png
  1. Wir scrollen weiter nach unten und löschen den Wert bei Legt den Leerwert des Ausgabekanals fest.

../../_images/420.png
  1. Dieser Wert sollte nun als Nicht gesetzt angezeigt werden. Das ist wichtig, weil der später benutzte Rasterrechner einen NULL-Wert (engl. nodata value) für ein Pixel in irgendeinem Layer in einen NULL-Wert in der Ausgabe umsetzt, was ein falsches Ergebnis darstellt.

../../_images/519.png
  1. Im Abschnitt Fortgeschrittene Parameter weiter unten wählen wir als Profil Hohe Kompression, um das Bild zu komprimieren. Das komprimierte Rasterbild wird dadurch nach Anwenden des Werkzeugs weniger Speicherplatz beanspruchen. Eine verlustlose Kompression ist für die Arbeit mit Rasterdatan dringend zu empfehlen.

../../_images/619.png
  1. Unter Gerastert -> In Datei speichern… geben wir raster_roads.tif als Ausgaberaster an und betätigen die Schaltfläche Starte.

../../_images/718.png
  1. Nach Ende der Verarbeitung wird der neue Layer raster_roads in das Layer-Panel geladen. Die Voreinstellung zeigt Pixel mit Straßen in weiß und den Rest in schwarz an. Auf dieselbe Art und Weise wollen wir die anderen 4 Vektorlayer konvertieren. Statt den Rastern-Algorithmus jedesmal neu zu starten, können wir auch die eingebaute Stapelverarbeitungsfunktion benutzen, um alle Layer auf einmal zu konvertieren. Weiterführende Informationen zur Stapelverarbeitung enthält das Tutorial Stapelverarbeitung mit dem Processing Framework (QGIS3). Per Rechtsklick öffnen wir das Kontextmenü des Algorithmus Rastern (Vektor nach Raster) und wählen Als Stapelprozess ausführen.

../../_images/818.png
  1. Im Dialogfenster Stapelverarbeitung ist als erster Eingabelayer der im Layer-Panel des QGIS-Hauptfensters ausgewählte Layer ausgewählt. Mithilfe der Drodown-Liste Autofüllung… in der Spalte Eingabelayer wählen wir Aus geöffneten Layern wählen…. Wir wählen die noch nicht angezeigten Rasterlayer aus boundary, protected_regions, water_polygons und water_polylines aus und klicken OK.

../../_images/918.png

Bemerkung

Die Option Fortgeschrittene Parameter sind bei der Ausführung des Algorithmus im Stapel-Modus nicht verfügbar. Wir müssen alle oben beschriebenen Schritte außer denen zur Kompression für alle Ausgabelayer wiederholen.

  1. Dazu geben wir in die erste Zeile dieselben Werte für die Parameter wie für den roads-Layer ein und verwenden die Schaltflächen Autofüllung ‣ Nach unten füllen, um die Werte auf alle Layer anzuwenden.

../../_images/1024.png
  1. In der letzten Spalte Gerastert betätigen wir die Schaltfläche in der ersten Zeile. Wir geben raster_ als Dateinamen ein und Speichern. Im Pop-Up-Fenster wählen wir als Autofüllmodus Mit Parameterwerten füllen und in Zu benutzender Parameter Eingabelayer; wir bestätigen mit OK.

../../_images/1127.png
  1. Die Schnittstelle zur Stapelverarbeitung ergänzt den Dateinamen mit den Layernamen und füllt alle Zeilen aus. Wir sollten sicherstellen, dass die Option Layer bei Abschluss laden gesetzt ist, bevor wir die Schaltfläche Starte betätigen.

../../_images/1225.png
  1. Nach Abschluss der Verarbeitung sind 4 neue Layer im Layer-Panel geladen. Offensichtlich gibt es 2 Layer mit Bezug zu Gewässern. Wir können beide Layer zu einem verschmelzen, welcher die Gewässer der Region repräsentiert. Wir suchen den Algorithmus Rasteranalyse ‣ Rasterrechner in den Verarbeitungswerkzeugen und starten ihn per Doppelklick.

../../_images/1323.png
  1. Wir öffnen das Dialogfenster Rasterrechnerausdruck durch Betätigen der Schaltfläche Ɛ und geben den unten stehenden Ausdruck ein. Der Ausdruck besagt, dass die Pixelwerte des jeweils ersten Kanals der Wasser-Layer summiert werden sollen. Wir wählen mithilfe der Schaltfläche ... neben Eingabelayer die zu verschmelzenden Layer raster_water_polygons und raster_water_polylines aus. Mithilfe der Schaltfläche neben Berechnet setzen wir als Namen für den Ausgabelayer raster_water_merged.tif und betätigen die Schaltfläche Starte.

"raster_water_polygons@1" + "raster_water_polylines@1"
../../_images/1421.png
  1. Das Ergebnis enthält Pixel mit dem Wert 1 für alle Gebiete mit Wasserflächen. Es gibt jedoch auch einige Regionen, in denen sowohl Wasser-Polygone als auch -Linien verzeichnet sind. Dort werden sich Pixel mit dem Wert 2 finden lassen ‒ was nicht korrekt ist. Wir können dies aber mit einem einfachen Ausdruck beheben. Wir wählen den Rasteranalyse ‣ Rasterrechner erneut.

../../_images/1519.png
  1. Wir geben den folgenden Ausdruck ein, der allen Pixeln, für die er wahr ist, den Wert 1 zuordnet und allen übrigen den Wert 0. Mithilfe der Schaltfläche neben Eingabelayer wählen wir raster_water_merged. Die Ausgabe nennen wir raster_water.tif und betätigen die Schaltfläche Starte.

"raster_water_merged@1" > 0
../../_images/1618.png
  1. Der Ergebnislayer raster_water hat nur noch Pixel mit den Werten 0 und 1.

../../_images/1719.png
  1. Mithilfe der Layer für Straßen und Gewässer können wir nun Nachbarschaftsraster erstellen. Diese werden auch Euklidische Distanzen genannt, bei denen jeder Pixel im Ausgaberaster den Abstand zum nächstgelegenen Pixel im Eingaberaster repräsentiert. Das Ergebnisraster kann anschließend verwendet werden, um geeignete Gebiete innerhalb eines bestimmten Abstandes von den Eingabepixeln zu definieren. Wir suchen den Algorithmus GDAL ‣ Rasteranalyse ‣ Nähe (Rasterabstand) und starten ihn per Doppelklick.

../../_images/1817.png
  1. Im Dialogfenster Nähe (Rasterabstand) wählen wir raster_roads als Eingabelayer und Georeferenzierte Koordinaten als Distanzeinheit. Da in den Eingabelayern durch das projizierte KBS Meter als Einheit verwendet werden, geben wir 5000 (5 Kilometer) als Maximal zu generierender Abstand ein. Es muss sichergestellt sein, dass Für Zielnäheraster zu verwendender Leerwert Nicht gesetzt ist.

../../_images/1914.png
  1. Nach Erweiterung des Bereichs Fortgeschrittene Parameter wählen wir als Profil Hohe Kompression aus. Die Ausgabedatei benennen wir mit roads_proximity.tif und betätigen die Schaltfläche Starte.

../../_images/2014.png

Bemerkung

Die Verarbeitung kann bis zu 15 Minuten in Anspruch nehmen. Es handelt sich um einen rechenintensiven Algorithmus, mit dem der Abstand jedes Pixels des Eingaberasters berechnet wird, und unser Eingaberaster enthält über 1 Milliarde Pixel.

  1. Nach Abschluss der Berechnungen wird ein neuer Layer roads_proximity zum Layer-Panel hinzugefügt. Um ihn besser zu visualisieren, sollten wir die Voreinstellung für die Darstellung ändern. Wir betätigen die Schaltfläche Layergestaltungsfenster öffnen im Layer-Panel und ändern den Max-Wert unter Farbverlauf auf 5000.

../../_images/2118.png
  1. Wir wiederholen die Anwendung des Algorithmus‘ Nähe (Rasterabstand) für den Layer raster_water mit denselben Parametern und nennen die Ausgabedatei water_proximity.tif.

../../_images/2216.png
  1. Nach Abschluss der Verarbeitung kann die gleiche Darstellung wie zuvor angewandt werden, um das Ergebnis besser zu visualisieren. Wenn wir in den Pixeln des Rasters herumklicken, können wir erkennen, dass es sich bei den Werten um ein Kontinuum der Werte zwischen 0 und 5000 handelt. Um das Raster für die Überlagerungs-Analyse verwenden zu können, müssen wir es zuerst reklassifizieren, um diskrete Werte zu erzeugen. Dazu öffnen wir den Algorithmus Rasteranalyse ‣ Rasterrechner erneut.

../../_images/2314.png
  1. Auf näher an der Straße gelegene Pixel wollen wir höhere Bewertungen anwenden; dazu benutzen wir das folgende Schema.

  • 0 - 1000 m –> 100

  • 1000 - 5000 m –> 50

  • > 5000 m –> 10

    Wir geben den folgenden Ausdruck ein, der die oben definierten Kriterien anwendet. Mithilfe der Schaltfläche neben Eingabelayer wählen wir roads_proximity. Die Ausgabe nennen wir roads_reclass.tif und betätigen die Schaltfläche Starte.

    100*("roads_proximity@1"<=1000) + 50*("roads_proximity@1">1000)*("roads_proximity@1"<=5000) + 10*("roads_proximity@1">5000)
    
    ../../_images/2413.png
  1. Nach Abschluss der Reklassifizierung wird dem Layer-Panel ein neuer Layer roads_reclass hinzugefügt. Dieser Layer hat nur 3 verschiedene Werte ‒ 10, 50 und 100, welche welche die relative Eignung dieser Pixel in Bezug auf die Entfernung zu Straßen repräsentieren. Wir öffnen den Rasteranalyse ‣ Rasterrechner erneut.

../../_images/2512.png
  1. Wir wiederholen die Reklassifizierung für den Layer water_proximity. Hier ist das Schema umgekehrt, weil die Pixel mit größerer Entfernung zu den Wasserflächen höhere Werte erhalten sollen.

  • 0 - 1000 m –> 10

  • 1000 - 5000 m —> 50

  • > 5000 m –> 100

    Wir geben den folgenden Ausdruck ein, der die oben definierten Kriterien anwendet. Mithilfe der Schaltfläche neben Eingabelayer wählen wir water_proximity. Die Ausgabe nennen wir water_reclass.tif und betätigen die Schaltfläche Starte.

    100*("water_proximity@1">5000) + 50*("water_proximity@1">1000)*("water_proximity@1"<=5000) + 10*("water_proximity@1"<1000)
    
    ../../_images/2612.png
  1. Nun ist alles für die abschließende Überlagerungs-Analyse vorbereitet. Hier sind noch einmal die Kriterien, die eine Eignung für eine Erschließung abbilden: nahe an Straßen, abseits von Wasserflächen und nicht in Schutzgebieten gelegen. Wir öffnen den Rasteranalyse ‣ Rasterrechner und geben den folgenden Ausdruck ein, der diese Kriterien anwendet. Wichtig ist die Multiplikation des Ergebnisses mit raster_boundary@1 am Ende, um Pixel außerhalb der Grenzen des Bundesstaates auszuschließen. Wir betätigen die Schaltfläche neben Eingabelayer und wählen die Layer roads_reclass, water_reclass, raster_protected_regions und raster_boundary. Unter Ausgabegröße -> Aus Layer berechnen… wählen wir raster_boundary. Die Ausgabe nennen wir overlay.tif und betätigen die Schaltfläche Starte.

("roads_reclass@1" + "water_reclass@1")*("raster_protected_regions@1"  !=  1 )*"raster_boundary@1"
../../_images/2712.png

Bemerkung

In unserem Beispiel haben wir die Nähe zu Straßen und zu Gewässern gleich gewichtet. In einem realen Szenario mag es vielfältige Kriterien mit unterschiedlicher Bedeutsamkeit geben. Man kann das dadurch nachbilden, dass die verschiedenen Raster im obigen Ausdruck mit entsprechenden Wichtungen multipliziert werden. Wenn z. B. die Nähe zu Straßen doppelt so wichtig ist wie der Abstand zu Gewässern, müsste das Raster roads_reclass mit 2 multipliziert werden.

  1. Nach Abschluss der Verarbeitung wird das Raster overlay zum Layer-Panel hinzugefügt. Die Pixelwerte variieren von 0 bis 200, wobei Werte von 0 die am wenigsten geeigneten und Werte von 200 die geeignetsten Gebiete für eine Erschließung kennzeichnen. Wir betätigen die Schaltfläche Layergestaltungsfenster öffnen für den Layer overlay.

../../_images/2812.png
  1. Wir wählen den Renderer Einkanalpseudofarbe und den Farbverlauf Spectral. Wir betätigen die Schaltfläche Klassifizieren, um den Farbverlauf auf das Raster anzuwenden.

../../_images/2911.png
  1. Durch Doppelklick auf die voreingestellten Beschriftungen können wir jeder Farbe geeignete Werte zuordnen. Die Beschriftungen werden als Legende unter dem overlay-Layer angezeigt.

../../_images/3011.png
  1. Rasterlayer bestehen aus rechteckigen Gittern. Wir wollen die Pixel ausßerhalb der Staatsgrenze verbergen. Eine einfache Methode dafür ist die Anwendung Invertierter Polygone, die auf den Vektorlayer mit der Grenze gerendert werden. Wir scrollen im Layer-Panel nach unten bis zum Layer boundary. Wir wählen in den Layereigenschaften Invertierte Polygone als Renderer und belassen bei allen anderen Optionen die Voreinstellungen.

../../_images/3115.png
  1. Um die Auswirkung des Renderers anzuzeigen, ist es nötig, dass der Layer nach oben sortiert wird. Dazu öffnen wir per Rechtsklick das Kontextmenü des Layers boundary und wählen Nach oben bringen.

../../_images/3211.png
  1. Wir schalten den Layer sichtbar, und im Kartenbereich sollte das overlay-Raster auf den boundary-Layer zugeschnitten sein. Dies stellt die endgültige Ausgabe dar, in der die Flächen innerhalb des Bundesstaates in ihrer Eignung für die Erschließung angezeigt werden.

../../_images/3311.png

If you want to give feedback or share your experience with this tutorial, please comment below. (requires GitHub account)