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/1109.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/2105.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/348.png
  1. Wir scrollen weiter nach unten und löschen den Wert bei Legt den Leerwert des Ausgabekanals fest.

../../_images/426.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/523.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/623.png
  1. Unter Gerastert -> In Datei speichern… geben wir raster_roads.tif als Ausgaberaster an und betätigen die Schaltfläche Starte.

../../_images/722.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/822.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/922.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/1028.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/1131.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/1229.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/1327.png
  1. Select raster_water_polygons and raster_water_polylines layers using button as Input Layers. Enter the following expression using ε button. Keep all the other options as default and save the output layer with the name raster_water_merged.tif and click Run.

"raster_water_polygons@1" + "raster_water_polylines@1"
../../_images/1425.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/1522.png
  1. Select raster_water_merged layer using button as an Input Layer. Enter the following expression using ε button. Keep all the other options as default and save the output layer with the name raster_water.tif and click Run.

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

../../_images/1722.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/1819.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/1916.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/2016.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/2119.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/2217.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/2315.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

    Select roads_proximity layer using button as an Input Layer. Enter the following expression hat applies the above criteria on the input. Keep all the other options as default and save the output layer with the name roads_reclass.tif and click Run.

    100*("roads_proximity@1"<=1000)
        + 50*("roads_proximity@1">1000)*("roads_proximity@1"<=5000)
        + 10*("roads_proximity@1">5000)
    
    ../../_images/2414.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/2513.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

    Select water_proximity layer using button as an Input Layer. Enter the following expression hat applies the above criteria on the input. Keep all the other options as default and save the output layer with the name water_reclass.tif and click Run.

    100*("water_proximity@1">5000) + 50*("water_proximity@1">1000)*("water_proximity@1"<=5000) + 10*("water_proximity@1"<1000)
    
    ../../_images/2612.png
  1. Now we are ready to do the final overlay analysis. Recall that our criteria for determining suitability is as follows - close to roads, away from water and not in a protected region. Open Raster analysis ‣ Raster calculator.Select roads_reclass, water_reclass, raster_protected_regions and raster_boundary layers using button as Input Layers. Use ε button to enter the following expression that applies these criteria. Note that we are multiplying the result with raster_boundary@1 at the end to discard pixel values outside of the state boundary. Keep other parameters as default. Name the output overlay.tif and click Run.

("roads_reclass@1" + "water_reclass@1")*("raster_protected_regions@1"  !=  1 )*"raster_boundary@1"
../../_images/2713.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/2813.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/2912.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/3212.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)