Lokalisierung der nächstgelegenen Einrichtung mit einer Quelle-Ziel-Matrix (QGIS3)

Im vorhergehenden Tutorial Einfache Netzwerkvisualisierung und Routing (QGIS3) lernten wir, wie man ein Netzwerk erstellt und die kürzeste Verbindung zwischen 2 Punkten bestimmt. Wir können diese Technik auf viele verschiedene Arten netzwerkbasierter Analysen anwenden. Eine dieser Anwendungen ist die Berechnung einer Quelle-Ziel-Matrix oder QZ-Matrix. Angenommen, wir haben eine Menge an Quell-Punkten und eine Menge an Ziel-Punkten, dann können wir für jedes Quelle-Ziel-Paar die kürzeste oder schnellste Verbindung ermitteln. So eine Analyse ist sinnvoll, um die nächstgelegene Einrichtung zu jedem gegeben Punkt zu finden. Eine Logistikfirma kann diese Analyse z. B. nutzen, um das nächstgelegende Lager zu ihren Kunden zu bestimmen und so die Lieferrouten optimieren. Wir verwenden hier den Distanzmatrix-Algorithmus aus dem Plugin QGIS Network Analysis Toolbox (QNEAT3), um die nächstgelegene Gesundheitseinrichtung zu jeder Adresse in der Stadt zu bestimmen.

Bemerkung

Dieses Tutorial zeigt, wie man eigene Netzwerkdaten zur Erstellung einer Quelle-Ziel-Matrix verwenden kann. Wenn man keine eigene Netzwerkdaten hat, kann man das ORS Tools Plugin verwenden. Die Analyse erfolgt dann mit Daten von OpenStreetMap mit dem Werkzeug ORS Tools ‣ Matrix ‣ Matrix from Layers. Unter Einzugsgebietsanalyse mit dem Openrouteservice (QGIS3) findet man weitere Informationen zur Verwendung des Plugins.

Überblick über die Aufgabe

Wir werden 2 Layer für Washington DC verwenden - einen Layer mit Punkten für Adressen und einen anderen Layer mit Punkten für psychosoziale Einrichtungen. Wir werden dann die Einrichtung mit dem kürzesten Weg zu jeder Adresse ermitteln.

Weitere Fähigkeiten, die wir erlernen

  • Gewinnung einer Zufallsstichprobe aus einem Punktlayer

  • Nutzung von virtuellen Layern, um eine SQL-Abfrage auf einem QGIS-Layer auszuführen

Beschaffung der Daten

Die Regierung des Distrikts Columbia stellt hunderte Datensätze frei zur Verfügung: Open Data Catalog.

Wir laden die folgenden Datenlayer als Shape-Dateien herunter.

Der Einfachheit halber können wir eine Kopie der Datensätze unter folgenden Links herunterladen:

Roadway_Block-shp.zip

Address_Points.zip

Community Based Service Provider.zip

Datenquelle: [DCOPENDATA]

Konfiguration

Wir wählen Erweiterungen ‣ Erweiterungen verwalten und installieren…. Dort suchen wir in Bereich :guilabel:` Alle` nach dem Plugin QNEAT3 und installieren es. Anschließend betätigen wir die Schaltfläche Schließen.

../../_images/setup11.png

Arbeitsablauf

  1. Wir suchen die heruntergeladene Datei Community_Based_Service_Providers.zip im Browser, erweitern sie und fügen Community_Based_Service_Providers.shp zum Arbeitsbereich hinzu. Wir werden nur die Gesundheitszentren für Erwachsene verwenden. Also öffnen wir per Rechtsklick das Kontextmenü des Layers und wählen Filter….

../../_images/1106.png
  1. Das Dialogfenster Abfrageerstellung wird geöffnet. Wir geben den folgenden Ausdruck in :guilabel:` Datenanbieterspezifischer Filterausdruck` ein und bestätigen mit OK.

"PROVIDER_T"  IN ('Adult','Adult & Child')
../../_images/2101.png
  1. Als nächstes suchen wir die Datei Roadway_Block.zip, erweitern sie und fügen Roadway_Block.shp zum Arbeitsbereich hinzu. Auch mit der Datei Address_Points.zip verfahren wir so und fügen Address_Points.shp hinzu. In der Stadt werden sehr viele Punkte angezeigt. Jeder davon repräsentiert eine gültige Adresse. Wir werden 1000 Punkte zufällig auswählen. Dieses Vorgehen wird Zufallsstichprobe genannt. Wir wählen Verarbeitung ‣ Werkzeugkiste.

../../_images/346.png
  1. Wir suchen nach dem Algorithmus Vektorauswahl ‣ Zufällige Auswahl in Untermengen und öffnen ihn per Doppelklick.

../../_images/346.png
  1. Wir wählen Address_Points als Eingabelayer, Anzahl gewählter Objekte als Methode und geben 1000 in Anzahl/Prozentsatz gewählter Objekte ein. Neben Extrahiert (zufällig geschichtet) betätigen wir die Schaltfläche ... und wählen In Datei speichern…. Hier wählen wir das Verzeichnis und address_point_subset.shp als Dateiamen. Wir betätigen die Schaltfläche Starte.

../../_images/520.png

Bemerkung

Der Algorithmus wählt zufällig 1000 Punkte aus dem Datensatz aus. Um genau dieselben Punkte wie beim Erstellen dieses Tutorials zu verwenden, kann das Ergebnis auch hier heruntergeladen werden: address_point_subset.zip . Nach dem Download muss noch der Layer address_point_subset.shp in QGIS geladen werden.

  1. Ein neuer Layer address_point_subset wird zum Layer-Panel hinzugefügt. Die Sichtbarkeit des Layers Address_Points kann abgeschaltet werden. Wir wollen den neuen Layer in origin_points umbenennen. Per Rechtsklick öffnen wir das Kontextmenü und wählen Layer umbenennen.

../../_images/620.png
  1. Ebenso bennen wir den Layer Community_Based_Service_Provider, der die Gesundheitszentren repräsentiert, in destination_points um. Die Benennung der Layer auf diese Weise erleichtert ihre Identifikation in den weiteren Verarbeitungsschritten. Anschließend öffnen wir die Verarbeitungswerkzeuge, um aus dem Quell- und dem Ziel-Layer eine Distanzmatrix zu generieren.

../../_images/719.png
  1. Wir suchen nach dem Algorithmus QNEAT3 ‣ Distance Matrices ‣ OD Matrix from Layers as Lines (m:n). Wenn der Algorithmus nicht zu finden ist, sollte sichergestellt sein, dass das Plugin QNEAT3 installiert wurde.

../../_images/819.png
  1. Der Algorithmus ermittelt die Distanzen zwischen dem Quell- und dem Ziellayer entlang eines Netzwerkes. Wir wählen Roadway_Block als Network Layer, origin_points als From-Point Layer und OBJECTID als Unique Point ID Field. Analog setzen wir destination_points als To-Point Layer und OBJECTID als Unique Point ID Field. Wir stellen Optimization Criterion auf Shortest Path (distance optimization).

../../_images/919.png
  1. Da es in dem Netzwerk viele Einbahnstraßen gibt, müssen wir den Abschnitt Fortgeschrittene Parameter erweitern, um die Richtung zu spezifizieren. Die Dokumentation Einfache Netzwerkvisualisierung und Routing (QGIS3) enthält weitere Details über die Gliederung dieser Attribute. Es gibt auch eine Option, den Geometriestil der erzeugten Matrix zu wählen. Da wir ein Straßennetz mit einer Richtungsinformation haben, können wir die Matrix durch Routenverfolgung generieren. Wir wählen Matrix geometry follows routes. Wir wählen SUMMARYDIR als Direction field. Wir geben OB als Value for the forward direction, IB als Value for backward direction und BD als Value for both directions ein. Die Topology tolerance setzen wir auf 0.0000150. Die anderen Optionen belassen wir bei den Voreinstellungen und betätigen die Schaltfläche Starte.

../../_images/1026.png
  1. Ein neue Tabelle Output OD Matrix wird nun im Layer Bereich angezeigt. Wir öffnen mit einem Rechtsklick das Kontextmenü und wählen Attributtabelle öffnen. Die Tabelle enthält 67000 Zeilen. Wir hatten 67 Startpunkte und 1000 Zielpunkte ‒ die Ausgabe enthält daher 67 x 1000 = 67000 Quelle-Ziel-Paare. Das Attribut total_cost enthält die Distanz in Metern von jedem Start- zu jedem Zielpunkt.

../../_images/1129.png
  1. Im Rahmen dieses Tutorials interessiert uns nur der Zielpunkt mit der kürzesten Entfernung. Wir erstellen eine SQL-Abfrage zur Selektion des geringsten total_cost aller Ziele. Wir wählen Datenbank ‣ DB-Verwaltung….

../../_images/1227.png
  1. Im Bereich Datenanbieter wählen wir Virtuelle Layer -> Projektlayer -> Output OD Matrix. Nun betätigen wir die Schaltfläche SQL-Fenster in der Menüzeile des Dialogfensters DB-Verwaltung. Es wird ein Tab Abfrage (Projektlayer) geöffnet. In das Bearbeitungsfeld geben wir den folgenden Ausdruck ein; ggf. muss input1 durch "Output OD Matrix" ersetzt werden. Wir setzen die Option Als neuen Layer laden und geben im sich öffnenden Bereich geometry als the Geometriespalte sowie sql_output als Layername an. Wir betätigen die Schaltfläche Laden.

select origin_id, destination_id, min(total_cost) as shortest_distance, geometry
from input1 group by origin_id
../../_images/1325.png
  1. Dem Layer-Panel wird ein neuer Layer sql_output hinzugefügt. Dieser Layer enthält das Ergebnis unserer Analyse: das nächstgelegene Gesundheitszentrum für jeden der 1000 zufällig ausgewählten Punkte.

../../_images/1423.png

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