Die General Transit Feed Specification (GTFS) verwendet zur Definition von Preisen zwei Dateien:
fare_attributes.txt:
Diese Datei enthält ein Preisattribut, das eine Preisklasse definiert. Für ein Preisattribut sind Preis und Währung festgelegt und es ist angegeben, ob das Ticket beim Einsteigen oder vorab gekauft werden muss. Zudem sind die Anzahl der zulässigen Umstiege und die Gültigkeitsdauer definiert.fare_rules.txt
: Aus dieser Datei geht hervor, welchen Geltungsbereich Fahrscheine im Verkehrsnetz haben.
In diesem Artikel wird beschrieben, wie mithilfe dieser zwei Dateien ein genauer Datenfeed für Ihre Fahrpreise zusammengestellt wird.
Fahrpreisattribute
In der Datei fare_attributes.txt
sind verschiedene Aspekte des Fahrpreises definiert (ID, Zahlungsart usw.). Diese Datei hat folgende Struktur:
Das folgende Beispiel zeigt eine einfache fare_attributes.txt
-Datei:
fare_id |
price |
currency_type |
payment_method |
transfers |
transfer_duration |
---|---|---|---|---|---|
1 | 0 | € | 0 | 0 | 0 |
2 | 0,50 | € | 0 | 0 | 0 |
3 | 1 | € | 0 | 0 | 0 |
4 | 1,50 | € | 0 | 0 | 0 |
5 | 2 | € | 0 | 0 | 0 |
Definieren Sie für jeden Fahrpreis in der Datei fare_attributes.txt
die Attribute price
, currency_type
und payment_method
. Mit dem Feld transfers
können Sie definieren, ob Umstiege erlaubt oder nicht erlaubt sind. „0“: nicht erlaubt, „1“: ein Umstieg erlaubt, „2“: zwei erlaubt. Wenn Sie das Feld leer lassen, darf beliebig oft umgestiegen werden. Legen Sie im Feld transfer_duration
fest, nach welchem Zeitraum (in Sekunden) ein Umstieg abläuft. Das System berechnet die transfer_duration
vom Beginn der ersten Fahrt bis zum Ende der letzten Fahrt (siehe Beispiel unten).
Wichtig:
- Wenn Sie angeben möchten, wie lang ein Fahrschein für einen Preis ohne Umstiege gültig ist, legen Sie
transfers
auf „0“ fest und geben Sie im Feldtransfer_duration
einen gültigen Zeitraum (in Sekunden) ein. - Sofern Sie
transfer_duration
nicht nutzen, um die Fahrscheingültigkeit anzugeben, wird empfohlen, dieses Feld entweder nicht in die Datei einzufügen oder es leer zu lassen, wenn Sietransfers
auf „0“ festlegen.
Preisregeln
In der Datei fare_rules.txt
ist beschrieben, welchen Geltungsbereich Fahrscheine im Verkehrsnetz haben. Diese Datei hat folgende Struktur:
Das folgende Beispiel zeigt eine einfache fare_rules.txt
-Datei:
fare_id |
route_id |
origin_id |
destination_id |
contains_id |
---|---|---|---|---|
a | TSW | 1 | 1 | |
a | TSE | 1 | 1 | |
a | GRT | 1 | 1 | |
a | GRJ | 1 | 1 | |
b | GRT | 3 | 3 | |
c | GRT | 6 |
Die Datei fare_rules.txt
unterstützt folgende Preisstrukturen:
- Preis hängt vom Routenverlauf ab.
- Legen Sie einen Wert für das Feld
route_id
fest, um einen Preis einer bestimmten Route zuzuordnen. - Wenn ein Preis für mehrere Routen gültig ist, geben Sie einen Eintrag für jede Route in
fare_rules
an.
- Legen Sie einen Wert für das Feld
- Preis ist abhängig von Abfahrts- oder Zielzone oder -haltestelle.
- Verwenden Sie die Felder
origin_id
unddestination_id
, um Preisregeln zu definieren, die auf der Abfahrts- oder Zielzone oder -haltestelle basieren. Origin_id
unddestination_id
beziehen sich auf die Zonen, in der sich die Abfahrts- und die Zielhaltestelle befinden. Fügen Sie das Feldzone_id
hinzu, um diese Informationen in der Dateistops.txt
anzugeben.- Wenn Sie haltestellenbasierte Regeln definieren möchten, legen Sie in der Datei
stops.txt
für jede Haltestelle eine Zone fest.
- Verwenden Sie die Felder
- Preis hängt davon ab, welche Zonen der Streckenverlauf durchquert.
- Wenn Sie Preisregeln auf Basis von Zonen definieren möchten, die der Streckenverlauf durchquert, verwenden Sie das Feld
contains_id
. Geben Sie damit jede Zone an, für die der Preis gilt. contains_id
verweist auf einezone_id
, die in der Dateistops.txt
definiert ist.
- Wenn Sie Preisregeln auf Basis von Zonen definieren möchten, die der Streckenverlauf durchquert, verwenden Sie das Feld
Die meisten Tarifsysteme verwenden eine dieser Preisstrukturen oder eine Kombination davon. Preise, die ohne Regeln definiert sind, gelten für alle Routen, die ihre Umstiegseinschränkungen erfüllen.
Wenn für einen bestimmten Streckenverlauf mehrere Preise gültig sind, sehen Nutzer die günstigste Variante.
Preise für mehrere Verkehrsverbunde
Wenn der Feed mehrere Verkehrsverbunde enthält, fügen Sie der Datei fare_attributes.txt
für jeden Preis das Feld agency_id
hinzu. Ein Preis kann immer nur einem Verkehrsverbund zugeordnet werden. Wenn ein Preis zu mehreren Verkehrsverbunden gehört, müssen Sie ihn duplizieren.
Spezielle Fahrpreiskategorien
In Google Maps werden keine unterschiedlichen Fahrpreiskategorien unterstützt, z. B. Erwachsene, Senioren oder Kinder. In den Streckenergebnissen erscheint nur ein Fahrpreis. Verwenden Sie die Standardpreiskategorie.
Beispielszenarien und Strukturieren von Preisen
In den folgenden Abschnitten finden Sie Beispielszenarien. Außerdem wird beschrieben, wie die Preise strukturiert werden.
Beispiel 1: Fahrpreis ist für alle Fahrten gleich, unbegrenzte Umstiege
Angenommen, der Demoverkehrsverbund hat folgende Preisstruktur festgelegt:
- Fahrgäste zahlen beim Einsteigen 1 € (
price
='1.00',currency
='€',payment_method
='0'). - Das Ticket gilt für alle Fahrzeuge und läuft nicht ab (
transfers
=''). - Die Fahrdauer ist unbegrenzt, weil
transfer_duration
ausgelassen wird.
Weil der Fahrpreis für alle Fahrten gleich ist, kann der Demoverkehrsverbund fare_rules.txt
weglassen.
Datei fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
---|---|---|---|---|
only_fare |
1 |
€ |
0 |
Erwachsenenfahrpreis berechnen
Der Fahrtenplaner berechnet einen Fahrpreis von 1 € für jeden Abschnitt des Streckenverlaufs, der einen Fahrzeugwechsel beinhaltet. Weil beliebig oft umgestiegen werden kann, zeigt der Fahrtenplaner nur den niedrigsten Preis an: den Erwachsenenfahrpreis in Höhe von 1 €.
Beispiel 2: Fahrpreis ist für alle Fahrten gleich, kein Umstieg
Angenommen, der Demoverkehrsverbund hat folgende Preisstruktur festgelegt:
- Fahrgäste zahlen beim Einsteigen 1 € (
price
='1.00',currency
='€',payment_method
='0'). - Die Fahrdauer ist unbegrenzt, weil
transfer_duration
ausgelassen wird. - Bei jedem Fahrzeugwechsel muss der Passagier neu bezahlen (
transfers
='0').
Weil der Fahrpreis für alle Fahrten gleich ist, kann der Demoverkehrsverbund fare_rules.txt
weglassen.
Datei fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
---|---|---|---|---|
only_fare |
1 |
€ |
0 |
0 |
Erwachsenenfahrpreis berechnen
Der Fahrtenplaner berechnet einen Fahrpreis von 1 € für jeden Abschnitt des Streckenverlaufs, der einen Fahrzeugwechsel beinhaltet. Der Fahrpreis für einen Streckenverlauf mit einem Buswechsel beträgt also 2 €.
Beispiel 3: Fahrpreis ist für alle Fahrten gleich, Umstiege erlaubt
Angenommen, der Demoverkehrsverbund hat folgende Preisstruktur festgelegt:
- Fahrgäste zahlen beim Einsteigen 1 € (
price
='1.00',currency
='€',payment_method
='0'). - Innerhalb von 90 Minuten kann unbegrenzt umgestiegen werden (
transfers
='',transfer_duration
='5400').
Weil der Fahrpreis für alle Fahrten gleich ist, kann der Demoverkehrsverbund fare_rules.txt
weglassen.
Datei fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
transfer_duration |
---|---|---|---|---|---|
only_fare |
1 |
€ |
0 |
5.400 |
Erwachsenenfahrpreis berechnen
Der Fahrtenplaner berechnet einen Fahrpreis von 1 € für jeden Abschnitt des Streckenverlaufs, der einen Fahrzeugwechsel beinhaltet. Dann wird die Zeit für den Streckenverlauf berechnet. Beträgt diese weniger als 90 Minuten, wird ein Fahrpreis von 1 € erhoben.
Beispiel 4: Verschiedene Fahrpreise für Nahverkehrs- und Expressrouten
Angenommen, der Demoverkehrsverbund hat folgende Preisstruktur festgelegt:
- Fahrgäste zahlen beim Einsteigen in Nahverkehrsbusse 1,75 € (Route 1).
- Fahrgäste zahlen beim Einsteigen in Expressbusse 5 € (Routen 2 und 3).
- Umstiege sind nicht erlaubt.
Einige Fahrten kosten mehr als andere. Daher muss der Demoverkehrsverbund die Datei fare_rules.txt
einfügen und für jede Route muss ein Eintrag vorhanden sein, aus dem der Fahrpreis abgeleitet wird.
Datei fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
---|---|---|---|---|
local_fare |
1,75 |
€ |
0 |
0 |
express_fare |
5 |
€ |
0 |
0 |
Datei fare_rules.txt
fare_id |
route_id |
---|---|
local_fare |
Route_1 |
express_fare |
Route_2 |
express_fare |
Route_3 |
Erwachsenenfahrpreis berechnen
Der Preis 5 € gilt nur für die Routen 2 oder 3 und der Preis 1,75 € nur für die Route 1. Wenn der Streckenverlauf die Routen 1 und 2 beinhaltet, beträgt der Preis 6,75 €.
Beispiel 5: Fahrpreis erhöht sich beim Kauf mit Umstiegsmöglichkeit
Angenommen, der Demoverkehrsverbund hat folgende Preisstruktur festgelegt:
- Fahrgäste zahlen beim Einsteigen in Nahverkehrsbusse 1,75 €.
- Bei einem Umstieg zahlen die Fahrgäste zusätzlich 0,25 €.
- Die gekauften Umstiege sind 90 Minuten gültig.
Weil diese Regeln für alle Fahrten gelten, kann der Demoverkehrsverbund fare_rules.txt
weglassen.
Datei fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
transfer_duration |
---|---|---|---|---|---|
simple_fare |
1,75 |
€ |
0 |
0 |
|
plustransfer_fare |
2 |
€ |
0 |
5.400 |
Erwachsenenfahrpreis berechnen
Technisch gesehen gelten beide Fahrpreise für einen Streckenverlauf ohne Umstiege. Der Fahrtenplaner wählt jedoch immer den günstigsten Fahrpreis aus:
- Für einen Streckenverlauf mit einem Umstieg beträgt
simple_fare
3,50 € bzw. 2 €, wenn ein Umstieg gekauft wird. Der Fahrtenplaner zeigt also einen Preis von 2 € für alle Fahrtstrecken an, die einen Fahrzeugwechsel umfassen. - Für einen Streckenverlauf ohne Umstiege ist der Preis in Höhe von 1,75 € niedriger als der für
plustransfer_fare
von 2 €. Ist für eine Fahrtstrecke kein Umsteigen nötig, beträgt der Preis also 1,75 €.
Beispiel 6: Fahrpreis hängt von Haltestellenpaaren ab, der Weg zum Ziel ist nicht relevant
In diesem Beispiel sind nur die Ein- und Ausstiege wichtig. Wenn Sie diese Preisstruktur für den Feed definieren möchten, muss jede Haltestelle eine eigene Zonen-ID haben, die in stops.txt
definiert ist. Jede Haltestelle wird als einzelne Zone gezählt.
- In den Dateien
fare_attributes.txt
undfare_rules.txt
ist eine Zeile pro Haltestellenpaar enthalten. - In der Datei
fare_attributes.txt
werden mit den Feldernorigin_id
unddestination_id
die Haltestellenpaare nach Zonen-ID angegeben.
Datei fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
---|---|---|---|---|
!S1_to_S2 |
1,75 |
€ |
0 |
|
!S1_to_S3 |
3,25 |
€ |
0 |
|
!S1_to_S4 |
4,55 |
€ |
0 |
|
… |
||||
!S10_to_S1 |
5,65 |
€ |
0 |
Datei fare_rules.txt
fare_id |
origin_id |
destination_id |
---|---|---|
!S1_to_S2 |
S1 |
S2 |
!S1_to_S3 |
S1 |
S3 |
!S1_to_S4 |
S1 |
S4 |
… |
||
!S10_to_S1 |
S10 |
S1 |
Erwachsenenfahrpreis berechnen
Mit dem Fahrtenplaner wird ein Streckenverlauf berechnet. Dann werden die Preisregeln durchlaufen, bis ein Haltestellenpaar gefunden wird, das mit der Kombination aus Abfahrts- und Zielhaltestelle übereinstimmt. Der öffentliche Feed des Nahverkehrsunternehmens BART für die Orte der San Francisco Bay Area ist ein Beispiel aus der Praxis für diese Art der Preisstruktur.
Beispiel 7: Fahrpreis hängt von Zonen ab
Angenommen, der Demoverkehrsverbund hat ein konzentrisches Drei-Zonen-System, wobei die Preise davon abhängen, welche Zonen ein Fahrgast während eines Streckenverlaufs durchquert. Wenn Sie diese Preisstruktur für den Feed definieren möchten, müssen die Dateien fare_attributes.txt
und fare_rules.txt
eine Zeile für jede mögliche Kombination von Zonen enthalten. Sind die zonenübergreifenden Preisstrukturen sehr komplex, kann es einfacher sein, die Datei fare_rules.txt
mit Abfahrt und Ziel programmatisch zu erstellen, um die Preise zu definieren.
Datei fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
---|---|---|---|---|
F1 |
4,15 |
€ |
0 |
|
F2 |
2,20 |
€ |
0 |
|
F3 |
2,20 |
€ |
0 |
|
F4 |
2,95 |
€ |
0 |
|
F5 |
1,25 |
€ |
0 |
|
F6 |
1,95 |
€ |
0 |
|
F7 |
1,95 |
€ |
0 |
Datei fare_rules.txt
fare_id |
contains_id |
---|---|
F1 |
1 |
F1 |
2 |
F1 |
3 |
F2 |
1 |
F2 |
2 |
F3 |
1 |
F3 |
3 |
F4 |
2 |
F4 |
3 |
F5 |
1 |
F6 |
2 |
F7 |
3 |
Erwachsenenfahrpreis berechnen
Sehen wir uns die Definitionen in der Datei fare_rules.txt
genauer an.
- F1 gilt für jede Fahrt, die die Zonen 1, 2, 3 durchquert.
- F2 gilt für jede Fahrt, die die Zonen 1, 2 durchquert.
- F3 gilt für jede Fahrt, die die Zonen 1, 3 durchquert.
- F4 gilt für jede Fahrt, die die Zonen 2, 3 durchquert.
- F5 gilt für jede Fahrt, die nur die Zone 1 durchquert.
- F6 gilt für jede Fahrt, die nur die Zone 2 durchquert.
- F7 gilt für jede Fahrt, die nur die Zone 3 durchquert.
Mit dem Fahrtenplaner wird ein Streckenverlauf berechnet. Dann werden die Preisregeln durchlaufen, um die Preise basierend auf der Zone zu bestimmen. Da F1 auch die Fahrt in Zone 1 beinhaltet, gilt nur der Preis F4 (2,95 €) für eine Fahrt von Zone 2 zu Zone 3. Eine Preisregel wird nur angewendet, wenn die Kombination aus Zonen, die im Streckenverlauf durchfahren werden, mit den Zonen in der Preisregel übereinstimmen. Für eine Fahrt zwischen Zone 2 und 3 gibt der Fahrtplaner einen Erwachsenenfahrpreis von 2,95 € aus.
Beispiel 8: Auswirkung von „transfers“ und „transfer_duration“
Unten sehen Sie ein Beispiel für eine Fahrt mit Umstieg:
- 1. Fahrt fährt um 10:00 Uhr ab und kommt um 11:00 Uhr an.
- 2. Fahrt fährt um 11:15 Uhr ab und kommt um 12:00 Uhr an.
- Damit der Preis für die gesamte Fahrt gilt, muss er mindestens einmal Umsteigen und eine „transfer_duration“ von mindestens 2 Stunden (von 10:00 bis 12:00 Uhr) beinhalten.
Beispiel 9: Fahrpreise und Blockfahrten
Bei einer Blockfahrt werden zwei Fahrten kombiniert, die zu verschiedenen Routen gehören. So können Fahrgäste im selben Fahrzeug bleiben, während sie von einer Route zur nächsten wechseln. Für eine Fahrt, zu der eine Blockfahrt gehört, wählt das System einen Preis aus, der für alle beteiligten Routen gilt. Blockfahrten werden bei der Preisdefinition nicht als Umstieg gezählt.
Das folgende Beispiel zeigt, wie ein Preis für eine Blockfahrt definiert wird:
- Angenommen, es gibt die zwei Routen: A und B.
- Jede Fahrt auf Route A oder B kostet 1 € und jede Fahrt, die A und B beinhaltet, kostet 2 €.
Die Werte in der Datei fare_attributes.txt
und fare_rules.txt
sollten so aussehen:
Datei fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
transfer_duration |
---|---|---|---|---|---|
fare_A |
1 |
€ |
0 |
0 |
|
fare_B |
1 |
€ |
0 |
0 |
|
fare_AB |
2 |
€ |
0 |
0 |
Datei fare_rules.txt
fare_id |
route_id |
origin_id |
destination_id |
contains_id |
|
---|---|---|---|---|---|
fare_A |
route_A |
||||
fare_B |
route_B |
||||
fare_AB |
route_A |
||||
fare_AB |
route_B |