Einleitung & Fachliche Beschreibung
GTFS-Realtime ist ein von Google entwickelter Standard, der es Verkehrsunternehmen ermöglicht, Echtzeitinformationen über unterschiedliche Dienst bereitzustellen.
Der Dienst ist eine Erweiterung zu GTFS Static und reichert die statischen Transit-Informationen mit Echtzeitinformationen an. Die GTFS-Realtime-Daten sind auf die GTFS-static-Daten abgestimmt. Der Realtime-Feed umfasst alle bekannten Änderungen im öV Schweiz im gesamten Vorschaufenster (drei Stunden) für alle Verkehrsunternehmen, die Echtzeitdaten liefern.
GTFS RT erlaubt die Anreicherung der statischen Transit-Informationen mit drei verschiedenen Arten der Zusatzinformation. Diese drei Anreicherungen werden üblicherweise via HTTP einzeln zur Verfügung gestellt und regelmäßig aktualisiert, somit können Entwickler auswählen, mit welchen Echtzeitdaten sie ihre Applikationen anreichern möchten.
- Vehicle positions (Aktuell nicht bereitgestellt)
- Trip updates (bereitgestellt durch die SBB)
- Service alerts (Bereitgestellt durch die SBB)
Fahrzeugpositionen (Vehicle positions)
enthalten Daten über Ereignisse, die bereits eingetreten sind (z. B. „Das Fahrzeug war vor einer Minute an diesem Ort“),
Bsp: „Dieser Bus befindet sich um 18h23 an der Haltestelle Bern Bahnhof“
Hier können Informationen zum Standort von einzelnen Transit-Fahrzeugen publiziert werden. Zusätzlich können auch die aktuelle Auslastung des Fahrzeugs, der Fahrzeugtyp oder andere, ähnliche Informationen bereitgestellt werden.
Die Vehicle Positions stehen auf der Plattform nicht zur Verfügung.
Eine ausführliche Auflistung der einzelnen möglichen Informationseinheiten finden Sie auf https://developers.google.com/transit/gtfs-realtime/reference/
Fahrtaktualisierungen (Trip updates)
Bsp: „Bus 18 hat aktuell 10 Minuten Verspätung“
Hier werden Verspätungen, geänderte Routen, Ersatzfahrzeuge oder Ausfälle für einzelne Linien laufend publiziert, um den Fahrgästen eine möglichst exakte Planung zu ermöglichen.
Service Alerts
Ereignisinformationen (Service Alerts) informieren über vorhersehbare oder unvorhersehbare Ereignisse, die einen Bahnhof, eine Strecke oder das gesamte Netz betreffen (z.B. “Die Linie 3 ist aufgrund eines Verkehrsunfalls bis 15:00 Uhr gesperrt)
Bsp: „Station Bern Weissenbühl ist aufgrund eines Unfalls aktuell geschlossen“
Im Falle von Verschiebung der Haltekante oder allgemein unvorhergesehene Ereignissen, die eine Haltestelle, eine Route oder das gesamte Netzwerk beeinflussen, können kurze Meldungen publiziert werden um die Fahrgäste auf dem Laufenden zu halten und zu erklären, was der Grund für die Änderung ist.
Schweizer Implementierung
In der Schweiz sind aktuell zwei der drei Services implementiert. Namentlich “Trip Update” and “Service Alerts”
- Die OpenDataPlattform unterstützt derzeit nur GTFS-RT „Trip Update“ – Version 1.0. Bitte beachten Sie, dass 2.0-Elemente derzeit ignoriert werden.
- Die OpenDataPlattform unterstützt derzeit GTFS-RT „Service Alerts“ – Version 2.0. Bitte beachten Sie diese Unterschiede in den Service-Versionen
- Mit Ihrem Schlüssel können Sie maximal zwei Abfragen pro Minute auf der Schnittstelle durchführen.
- Der Echtzeit-Feed umfasst alle bekannten Änderungen im öffentlichen Verkehr Schweiz im gesamten Vorschaufenster (drei Stunden) für alle Verkehrsunternehmen, die Echtzeitdaten bereitstellen.
- Für GTFS-RT gibt es eine Update-Regel für Verzögerungen. Verspätet sich beispielsweise eine ganze Fahrt um 5 Minuten, wird dies nur bei der ersten Haltestelle angezeigt. Für alle weiteren Stopps muss die Verzögerung beim Import aktualisiert werden.
- Die Aktualisierung muss für Ankunfts- und Abfahrtszeiten erfolgen. GTFS-RT stellt nur dann neue Daten bereit, wenn sich etwas geändert hat. Von unserem System wird nur die Abflugprognose berücksichtigt. Bleibt die Abfahrtsprognose bestehen und ändert sich nur die Ankunftsprognose, wird für diese Reise keine GTFS-RT-Nachricht generiert
Zugang zum Service
Die SBB stellt die Trip Updates über einen GET-Request zur Verfügung.
Sie können maximal zwei Abfragen pro Minute auf die Schnittstelle durchführen mit ihrem Schlüssel. Es handelt sich um ein Sliding Window.
API | Link |
GTFS-RT
Service Alerts |
https://api.opentransportdata.swiss/gtfs-sa |
Für den Zugriff auf die API ist ein Token erforderlich. Um ein Token zu generieren und zu erhalten, muss man sich auf der Open Data Plattform Mobilität Schweiz registrieren.
Nach erfolgreicher Registrierung muss der Reiter „API Keys“ ausgewählt werden. Dort kann man im „Developer Dashboard“ unter „My Keys“ den entsprechenden Schlüssel für die Plattform erhalten.
Der Versand des Schlüssels erfolgt über die bei der Registrierung angegebene E-Mail-Adresse.
Struktur der Daten (Protocol Buffer)
Das GTFS ServiceAlert Daten-Austausch Format basiert auf Protocol Buffers, welches ein Sprach- und Plattformneutraler Mechanismus ist, um Daten in serielle Reihenfolge zu bringen. Es ist als Binärformat konzipiert, was es kleiner, schneller und einfacher als XML macht. Die Datenstruktur ist in einem sog. gtfs-realtime.proto File definiert, welches zum Generieren von Source Code benutzt wird um die strukturierten Daten einfach in verschiedene Sprachen (Java, C++, Python, etc.) zu übersetzen.
Struktur der Daten (JSON)
Alternativ stellt die Plattform auch eine JSON-Implementierung zur Verfügung.
Die Abfrage erfolgt dann über die URL: HTTP GET https://api.opentransportdata.swiss/gtfsservicealerts/?format=json
Beachten Sie, dass die JSON-Variante nicht standardisiert ist.
Nutzung von JSON nur zu Testzwecken
JSON darf nur zu Testzwecken genutzt werden, wenn z.B. ein Entwickler einer neuen App in lesbarer Form sehen will, was für Daten in unserem GTFS-RT enthalten sind.
Am Ende sollte die GTFS-SA-Schnittstelle nicht in lesbarem JSON, sondern binär betrieben werden (ohne ?FORMAT=JSON) aus folgenden Gründen:
- binär ist viel performanter als JSON und in JSON sind viel mehr Daten zu übermitteln und einzulesen (ein JSON-Meldung wird bis zu ca. 11 MB gross),
- JSON ist nicht spezifiziert, bei der binären GTFS-RT kann sich der GTFS-Client darauf verlassen, dass sie dem GTFS-RT-Standard entspricht
Beschreibung des Services
Besonderheiten im Vergleich zu SIRI-SX
GTFS ServiceAlerts | SIRI-SX |
Zu jeder Haltestelle / Haltepunkt wird ebenfalls die Agency gelierfert.
"informedEntity" : [ { "agencyId" : "820" , "stopId" : "ch:1:sloid:89712" }, { "agencyId" : "801" , "stopId" : "ch:1:sloid:89712" } ], |
< StopPlaces > < AffectedStopPlace > < StopPlaceRef >ch:1:sloid:89712</ StopPlaceRef > < PlaceName >Kriens, Grosshofstrasse</ PlaceName > </ AffectedStopPlace > </ StopPlaces > |
Zu jeder Linie wird ebenfalls die Linienrichtung geliefert
"informedEntity" : [ { "agencyId" : "801" , "routeId" : "96-186-7-j23-1" , "directionId" : 0 }, { "agencyId" : "801" , "routeId" : "96-186-7-j23-1" , "directionId" : 1 }, { "agencyId" : "801" , "routeId" : "96-186-2-j23-1" , "directionId" : 0 }, { "agencyId" : "801" , "routeId" : "96-186-2-j23-1" , "directionId" : 1 } ], |
< AffectedNetwork > < AffectedLine > < AffectedOperator > < OperatorRef >ch:1:sboid:100602</ OperatorRef > </ AffectedOperator > < LineRef >85:801:1867</ LineRef > < PublishedLineName >677</ PublishedLineName > </ AffectedLine > < AffectedLine > < AffectedOperator > < OperatorRef >ch:1:sboid:100602</ OperatorRef > </ AffectedOperator > < LineRef >85:801:1862</ LineRef > < PublishedLineName >675</ PublishedLineName > </ AffectedLine > </ AffectedNetwork > |
Generelles Mapping zwischen GTFS Service Alerts und SIRI-SX
GTFS-Implementierung
- Ausgabe Mehrsprachig (DE, FR, IT, EN) der Texte Lang
- GTFS: “headerText” entspricht SIRI-SX <SummaryText (L)>
- GTFS “descriptionText” wird wie folgt zusammengesetzt, wobei mehrere Ausprägungen pro Element auch aneinandergereiht werden:
- Grund <ReasonContent>
- Dauer <DurationContent>
- Information – <RemarkContent> – Wenn geliefert, wird nicht von allen Geschäftsorganisationen bereitgestellt
- Auswirkungen <ConsequenceContent>
- Empfehlung <RecommendationContent>
- Bemerkung – <DescriptionContent> → Wenn geliefert, wird nicht von allen Geschäftsorganisationen bereitgestellt
- Uri – Nicht vorhanden auf aktuelle Prod-Version
- Label – nicht vorhanden auf aktueller Prod-Version
- GTFS “activePeriod” wird aus <ValidityPeriod> befüllt
- Alle CH-Ausprägungen des Informationsraums können verarbeitet werden
- Ereignisse mit mehreren Kundeninformationen können verarbeitet werden (aktuell nur VIA)
- Verarbeitung ValidityPeriod und PublicationWindow gemäss Profil CH (d.h. alle Meldungen immer anzeigen)
Generelle Beschreibung des Service (Google)
Service Alerts | Realtime Transit | Google for Developers
Vorhandene Elemente nach GTFS:
Unterschiede zu der Google-Implementierung:
message
Alert |
Link: https://developers.google.com/transit/gtfs-realtime/reference#message-alert
Alle Elemente werden unterstützt |
||||||||||||||||
message TimeRange
|
Link: https://developers.google.com/transit/gtfs-realtime/reference#message-timerange
Swiss Implementation Name (activePeriode) Alle Elemente werden unterstützt |
||||||||||||||||
message
EntitySelector |
Link: https://developers.google.com/transit/gtfs-realtime/reference#message-entityselector
Swiss Implementation Name (informedEntity) Folgende Elemente werden nicht verwendet
|
||||||||||||||||
message
TripDescription |
Link: https://developers.google.com/transit/gtfs-realtime/reference#message-tripdescriptor
Message wird nicht unterstützt / verwendet |
||||||||||||||||
enum
ScheduleRelationship |
Enum wird nicht unterstützt / verwendet in der Service Alert Implementierung. | ||||||||||||||||
Enum
Cause |
https://developers.google.com/transit/gtfs-realtime/reference#enum-cause
Alle aufgeführten Werte finden Verwendung. Alle nicht aufgeführten, werden nicht verwendet.
|
||||||||||||||||
Enum
Effect |
https://developers.google.com/transit/gtfs-realtime/reference#enum-effect
Aktuell werden keine Effekte verwendet. Es gibt lediglich den Wert “Condition: Unknown” aus dem EMS und das Mapping zu GTFS “Unknown_Effect” |
||||||||||||||||
message
TranslatedString |
https://developers.google.com/transit/gtfs-realtime/reference#message-translatedstring
Alle Elemente werden unterstützt |
Weitere Services:
Vorhandene Datensätze
Folgende Geschäftsorganisationen stellen Ereignisinformationen zur Verfügung: Geschäftsorganisationen (business organisations) – Daten | Open-Data-Plattform Mobilität Schweiz (opentransportdata.swiss)