Routing in Python mit casaGeoTools
Einführung
In diesem Tutorial verwenden wir ein einfaches Jupyter Notebook, um anhand von drei praxisnahen Beispielen zu zeigen, wie sich Routing in Python-basierte Geodaten-Workflows integrieren lässt. Die Beispiele zeigen, wie mehrere Routen in einer Batch-Verarbeitung berechnet, unterschiedliche Routing-Strategien verglichen und alternative Routen erzeugt werden können.
Dieses Tutorial richtet sich an Data Scientists, Geodatenanalysten und Entwickler, die mit räumlichen Daten in Python arbeiten.
Step 1
Importieren Sie zunächst die benötigten Python-Pakete, darunter Pandas, Shapely, GeoPandas und Folium. Mit Folium lassen sich die berechneten Routen anschließend auf interaktiven Karten visualisieren.
Passen Sie anschließend die Pandas-Anzeigeeinstellungen an. Dadurch zeigt das Notebook alle Zeilen und Spalten der Ergebnistabellen an, was bei der Analyse der Routing-Ergebnisse hilfreich ist.
Step 2 - Define Routing Inputs
Zunächst initialisieren wir den casaGeoTools-Client. Der API-Schlüssel wird aus einer lokalen .env-Datei geladen, sodass die Zugangsdaten getrennt vom Notebook gespeichert bleiben.
Anschließend definieren wir mehrere Shapely-Punkte, die die Ursprungs- und Zielorte für die Routing-Beispiele repräsentieren.
Die folgenden Standorte werden in den Beispielen verwendet:
-
casaGeo Hauptsitz, Itzehoe (izet)
-
Elmshorn Hauptbahnhof (iz)
-
Hamburg Hauptbahnhof (hh)
-
Kiel Hauptbahnhof (ki)
-
Lübeck Hauptbahnhof (hl)
Beispiel 1 - Batch Routing
Im ersten Beispiel demonstrieren wir Batch-Routing. Dabei berechnen wir Routen von unserem Hauptsitz in Itzehoe als Ausgangspunkt zu drei verschiedenen Zielorten: den Hauptbahnhöfen in Hamburg, Kiel und Lübeck. Dazu erstellen wir ein DataFrame, in dem jede Zeile eine Routing-Anfrage repräsentiert. Jeder Eintrag enthält den Ursprung (Origin), das Ziel (Destination), den Routing-Modus sowie den Transportmodus.
Die Routen werden mit der Funktion routes_batch erzeugt. casaGeoTools verarbeitet alle Zeilen des DataFrames und gibt die Ergebnisse als GeoDataFrame mit den berechneten Routengeometrien zurück.
Anschließend visualisieren wir die Routen auf einer interaktiven Folium-Karte. Jede Routengeometrie wird dabei als GeoJSON-Layer zur Karte hinzugefügt, sodass sich die Ergebnisse einfach prüfen lassen.
Beispiel 2 - Fast vs Short Route
In diesem Beispiel berechnen wir zwei Routen zwischen demselben Ursprung — unserem Hauptsitz — und dem Hauptbahnhof Elmshorn als Ziel. Eine Anfrage verwendet den Routing-Modus fast, der auf eine möglichst kurze Fahrzeit optimiert ist, während die zweite Anfrage den Routing-Modus short verwendet, der auf die kürzeste Distanz optimiert ist.
Dieses Beispiel zeigt, wie unterschiedliche Routing-Strategien die resultierende Routengeometrie beeinflussen.
Anschließend werden die Routen auf einer interaktiven Karte visualisiert, um die unterschiedlichen Streckenverläufe miteinander zu vergleichen.
Beispiel 3 - Alternative Routen
Abschließend fordern wir mehrere alternative Routen an und visualisieren diese auf einer interaktiven Karte. In unserem Beispiel ist der Parameter alternatives auf drei gesetzt, sodass bis zu drei zusätzliche Routenoptionen zurückgegeben werden können. Der Parameter unterstützt Werte von bis zu sieben Alternativen.
Alternative Routen werden jedoch nur zurückgegeben, wenn sie sinnvolle Routenvarianten darstellen. In diesem Beispiel liefert der Routing-Service insgesamt vier Routen: die Hauptroute und drei Alternativen.
Wie zuvor erstellen wir eine interaktive Karte, um die Ergebnisse zu untersuchen.
Download
Um direkt mit der Entwicklung zu starten, können Sie dieses Beispiel unten als Jupyter Notebook herunterladen.