Aufbereitung und Zusammenführung des ÖV-Angebots für ein aktivitätenbasiertes Verkehrsmodell
Aktivitätenbasierte Verkehrsmodelle (ABM) bieten den Vorteil, dass sie bei der Beschreibung der Verkehrsnachfrage eine höhere räumliche und zeitliche Auflösung erlauben. Die ABM bedürfen in der Regel einer fahrplanfeinen Erfassung des ÖV-Angebots, auch wenn grundsätzlich taktfeine Fahrpläne, wie sie bei aggregierten Modellen zur Anwendung kommen, verwendet werden können. Dieser Blogeintrag beschreibt die im Rahmen eines Vertiefungsprojekts gemachten Erfahrungen bei der Aufbereitung und Zusammenführung verschiedener Körperschaften für ein aktivitätenbasiertes Verkehrsmodell am Beispiel der Software PTV Visum
Ausgangslage und Ziele
Im Rahmen meines Masterstudiums baue ich ein aktivitätenbasiertes Verkehrsmodell für die Region Basel auf (ABM Basel). Dazu habe ich in einem ersten Schritt eine bestehende aktivitätenbasierte Nachfrage so aufbereitet, dass diese mit den Datenstrukturen von PTV Visum übereinstimmt und importiert werden kann (Blogeintrag: Seminararbeit). Neben den Nachfragedaten werden für Anwendungen auch Daten zum Verkehrsangebot sowie ein passendes Zonensystem (Bezirke) benötigt. Dieser Blogeintrag fokussiert auf die Problematik, um Fahrpläne verschiedener Körperschaften in ein Verkehrsmodell einzulesen und stellt vor, wie ich mit Python-Skripten verschiedene GTFS-Feeds so angepasst habe, damit diese seriell von PTV Visum eingelesen werden können.
Für das ABM Basel gilt es dafür den ÖV-Fahrplan der drei betroffenen Länder (Deutschland, Frankreich und Schweiz) im Bereich des Modellperimeters zu integrieren. Dafür werden aktuell verfügbare General Transit Feed Specification-Feeds (GTFS-Feeds) verwendet. Überlappende Linienbezeichnungen, abweichende zeitliche Gültigkeiten und mangelnde Umsteigebeziehung stellen dabei Herausforderungen für den Datenimport dar. Um diese anzugehen, wurde zur Überarbeitung der Daten ein Python-Skript erstellt. Anschliessend sind weitere Schritte nötig, um die Umsteigebeziehungen zwischen verschiedenen Verkehrsträgern sicherzustellen.
Ein Ziel dieses Vertiefungsprojektes war es, Kenntnisse im Bereich der skriptbasierten Aufbereitung und Zusammenführung von GTFS-Fahrplänen verschiedener Körperschaften sowie deren Überprüfung aufzubauen.
Abbildung des Fahrplans in Visum
Für den effizienten Datenimport ist die Verwendung eines digitalen Austauschformats für Fahrpläne des öffentlichen Personenverkehrs unabdinglich. Die General Transit Feed Specification (GTFS) ist ein solches digitales Austauschformat. Es enthält kurz zusammengefasst alle fahrplanrelevanten Angaben wie Standorte der Haltestellen, Halte- und Abfahrtszeiten, Routen, Kalender, Betriebstage und Betreiber und etabliert sich je länger je mehr als internationales Standardformat.
In PTV Visum werden ÖV-Fahrpläne über Haltestellen, Haltestellenbereiche, Haltepunkte, Linien, Linienrouten, Fahrzeitenprofile und Fahrplanfahrten abgebildet. Bei der Berechnung der ÖV-Routen unterscheidet zwischen der verkehrssystem-, taktfeinen- und fahrplanfeinen Suche. Für ein aktivitätenbasiertes Verkehrsmodell ist die fahrplanfeine Routensuche am geeignetsten, da diese die zeitliche Dynamik am besten abbildet (vgl. Bild 2).
Verfügbarkeit und Qualität der GTFS-Feeds
Der Perimeter des ABM Basel umfasst Gebiete in der Schweiz, Deutschland und Frankreich. In der Schweiz (Open-Data-Plattform Mobilität Schweiz) und für die Gebiete in Deutschland (NVBW) stehen die Fahrpläne im HAFAS- und GTFS-Format zur Verfügung, für Gebiete in Frankreich (data.gouv) hingegen nur im GTFS-Format. Daher habe ich mich dazu entschieden, alle Fahrpläne im GTFS-Format zu importieren.
Nicht alle Fahrpläne standen für das Fahrplanjahr 2020 zur Verfügung. Der Schweizer Fahrplan beginnt am 1. Januar 2020 und beinhaltet Dateien bis zum 31. Dezember 2020. Die drei deutschen Fahrpläne beginnen bereits am 13. Dezember 2019 und dauern bis zum 12. Dezember 2020. Der französische Fahrplan deckt wiederum einen anderen Zeitraum ab. Er beginnt am 03. Juli 2021 und endet erst am 27. August 2022.
In den Daten waren einige Haltestellen mit Nullpunktkoordinaten enthalten. In solchen Fällen wurde mit Google Maps nach den korrekten Koordinaten gesucht, um diese im Rohdatensatz zu ergänzen. Bei etwas mehr als 7’300 verwendeten Haltestellen, ist dieser Umstand nur 4x aufgetaucht, was im Allgemeinen die homogene Datenqualität unterstreicht.
Die GTFS-Struktur wird anhand einer Reihe von Textdateien im ZIP-Format bereitgestellt. Jede Textdatei enthält Informationen zu einem bestimmten Aspekt der Transitinformationen wie bspw. Haltestellen (stops.txt), Routen (routes.txt), Fahrten (trips.txt), Betreiber (agency.txt) und weiteren fahrplanrelevanten Daten. Da die Transportunternehmen keine einheitlichen GTFS-Feed erstellen und veröffentlichen, wurden einige Informationen nicht implementiert. Das nachfolgende Bild 3 zeigt eine Aufstellung der verwendeten GTFS-Feeds.
Überarbeitung der GTFS-Feeds mit einem Python-Skript
Visum besitzt eine General Transit Feed-Schnittstelle, über diese der Im- und Export von GTFS-Feeds erfolgen kann. Während der Import von einem grossen GTFS-Feed kein Problem für Visum darstellt, ergeben sich beim Import von mehreren GTFS-Feeds gleich mehrere Probleme. Einerseits können die Gültigkeitsperioden der einzelnen Fahrpläne nicht übereinstimmen und andererseits können die in den Fahrplänen verwendeten Liniennummern mehrfach vorkommen. Sobald zwei identische Liniennummern importiert werden, entsteht bei der Zusammenführung ein Konflikt. Dadurch kann es passieren, dass zum Beispiel den Linienrouten eines Feeds Haltestellen einer Linienroute eines anderen Feeds hinzugefügt werden.
Aus diesem Grund mussten die ÖV-Fahrplandaten vor dem Import überarbeitet werden. Die Herausforderung bestand darin, jeder ÖV-Linie aus dem GTFS-Feed eine eindeutige ID-Nummer mitzugeben, sodass beim Import der Daten keine Vermischungen entstehen. Als Lösung wurde in einer Jupyter-Notebook-Umgebung ein Python-Skript entwickelt. Die einzelnen Feeds wurden mit einem selbst entwickelten Python-Skript automatisier editiert, um das ÖV-Angebot anschliessend additiv einlesen zu können.
Die Funktionsweise des Skripts lässt sich in zwei Schritte zusammenfassen. In einem ersten Schritt identifiziert das Skript alle Attribute in einer gewählten Textdatei (z.B. das Attribut «stop_id» in der Textdatei «stops.txt») und setzt dort in einem zweiten Schritt ein vordefiniertes Kürzel vor den Attributwert. Anschliessend packt er die überarbeiteten Textdateien wieder in einem ZIP-File zusammen.
Das Python Skript ist auf GitLab-Plattform der FHNW (Fachbereich Verkehr und Mobilität) öffentlich verfügbar.
Abbildung der Umsteigebeziehungen
Aufgrund der teilweise nicht vorhandenen und deswegen nicht verwendeten Textdatei «transfers.txt» der GTFS-Feeds, fehlten multimodale Umsteigebeziehungen zwischen Tram/Bus, Bus/Zug oder Zug/Tram. Um das Umsteigen zwischen diesen Verkehrsträgern zu ermöglichen, wurden als Verbindungsstrecke mehrere Fusswegverbindungen hinzugefügt. Die Strecken zwischen den Haltestellen wurden mittels zweier QGIS-Erweiterungen (NNJoin und Points2One) erstellt. Die verbunden Haltestellen sind nicht weiter als 120 m auseinander und wurden mit einer max. Gehgeschwindigkeit von 5 km/h versehen.
Mithilfe dieser Methode wurden insgesamt 2594 Strecken in das ABM Basel geladen. Auf deutscher und französischer Seite verbinden diese Fusswegverbindungen mehrheitlich eine Haltestelle mit einer auf der gegenüberliegenden Strassenseite liegenden Haltestelle (siehe Bild 5, links). Auf Schweizer Seite sind weitestgehend nur Bahnhöfe mit Busbahnhöfen (siehe Bild 5, rechts) oder Tramhaltestellen miteinander verbunden worden.
Ergebnisse und Erkenntnisse
Die Implementierung des öffentlichen Verkehrsangebots konnte mit einer hohen Genauigkeit vorgenommen werden. Das sich im Aufbau befindliche ABM Basel beinhaltet nun etwas mehr als 67’000 Fahrplanfahrten. Die erkannte Herausforderung beim Importieren von mehreren GTFS-Feeds, konnte mithilfe eines Python-Skripts gelöst werden. Das Skript trägt dazu bei, die ÖV-Fahrpläne auf den Import in PTV Visum vorzubereiten. Es ist modular aufgebaut, sodass interessierte Anwender:innen das Skript für die selbstständige Verwendung anpassen können oder dieses um weitere Textdateien ergänzen können.
Die zweite Hürde mit den fehlenden Umsteigebeziehungen könnte meiner Ansicht nach auf verschiedene Arten gelöst werden, welche sich anhand des Bearbeitungszeitpunkts unterscheiden:
- Vor dem Import: Prüfenswert könnte eine GTFS-Modifikation sein, die Transferzeiten an einer ÖV-Drehscheibe zwischen verschiedenen Verkehrsmitteln zulässt. Zurzeit ist diese Funktion auf Bahnhöfe mit Umsteigezeiten zwischen den Gleisanlagen beschränkt.
- Nach dem Import: Eine Automatisierung der Zusammenfassung von Haltstellenbereichen könnte das beschriebene Problem lösen. Damit entfiele das Ergänzen von (Umsteige-)Strecken.
Ein weitere Herausforderung stellt die automatisierte Detektion von Linien dar, die in mehreren Fahrplan-Feeds aufgeführt sind. In der Region Basel wird zum Beispiel die Buslinie 38 von Allschwil (Schweiz) nach Grenzach-Wyhlen (Deutschland) von den Basler Verkehrsbetrieben in Zusammenarbeit mit der Südbadenbus betrieben und ist daher in mehreren GTFS Feeds berücksichtigt. Aus Zeitgründen habe ich dieses Problem in meiner Arbeit aber nur manuelles Löschen der entsprechenden Linien direkt nach dem Import in PTV Visum gelöst.
Kommentare
Keine Kommentare erfasst zu Aufbereitung und Zusammenführung des ÖV-Angebots für ein aktivitätenbasiertes Verkehrsmodell