Il formato General Transit Feed Specification (GTFS) utilizza due diversi file per definire un modello di tariffe:
fare_attributes.txt:
questo file contiene un FareAttribute (attributo tariffa) che definisce un tipo di tariffa. Questo attributo include un prezzo, una valuta e un'impostazione che indica se il biglietto deve essere acquistato a bordo del servizio o prima di salire a bordo. Definisce inoltre il numero di cambi consentiti e la durata consentita di ogni cambio.fare_rules.txt:
questo file descrive come i titoli di viaggio vengono applicati nel sistema di trasporto pubblico.
Questo articolo descrive in che modo i due file interagiscono tra loro per creare un feed di dati accurato per le tariffe.
Attributi delle tariffe
Il file fare_attributes.txt
definisce gli aspetti di una tariffa (ID, tipo di pagamento e così via). Questo file ha la seguente struttura:
Nell'esempio seguente è riportato un file fare_attributes.txt
semplice:
fare_id |
price |
currency_type |
payment_method |
transfers |
transfer_duration |
---|---|---|---|---|---|
1 | 0.00 | USD | 0 | 0 | 0 |
2 | 0.50 | USD | 0 | 0 | 0 |
3 | 1.00 | USD | 0 | 0 | 0 |
4 | 1.50 | USD | 0 | 0 | 0 |
5 | 2.00 | USD | 0 | 0 | 0 |
Nel file fare_attributes.txt
definisci price
, currency_type
e payment_method
per ogni tariffa. Consenti o impedisci cambi con il campo transfers
(0 significa che non sono consentiti cambi, 1 indica che ne è consentito uno, 2 indica che ne sono consentiti due; un campo vuoto indica un numero illimitato di cambi). Imposta la durata massima di un cambio (in secondi) nel campo transfer_duration
. Il sistema calcola il valore di transfer_duration
dalla partenza della prima corsa fino all'arrivo dell'ultima corsa (vedi l'esempio di seguito).
Importante:
- Per indicare la durata di un titolo di viaggio per una tariffa che non consente cambi, imposta
transfers
su 0 e utilizza il campotransfer_duration
per impostare il tempo di validità (in secondi). - A meno che non utilizzi
transfer_duration
per indicare la validità del titolo di viaggio, ti consigliamo di omettere o lasciare vuoto questo campo quando impostitransfers
su 0.
Regole tariffarie
Il file fare_rules.txt
descrive come i titoli di viaggio vengono applicati nel sistema di trasporto pubblico. Questo file ha la seguente struttura:
Nell'esempio seguente è riportato un file fare_rules.txt
semplice:
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 |
Il file fare_rules.txt
supporta le seguenti strutture tariffarie.
- Le tariffe dipendono dal percorso utilizzato nell'itinerario.
- Per associare una tariffa a un percorso specifico, definisci il campo
route_id
. - Se una tariffa è valida per più percorsi, specifica una voce per ciascun percorso in
fare_rules.txt
.
- Per associare una tariffa a un percorso specifico, definisci il campo
- Le tariffe dipendono dalle zone o dalle stazioni di origine o di destinazione.
- Per definire le regole tariffarie in base alla zona o alla stazione di origine o di destinazione, utilizza i campi
origin_id
edestination_id
. - I campi
origin_id
edestination_id
si riferiscono alle zone in cui sono ubicate le stazioni di origine e di destinazione. Per fornire queste informazioni nel filestops.txt
, aggiungi il campozone_id
. - Per definire le regole solo in base alla stazione, definisci una zona per ogni stazione nel file
stops.txt
.
- Per definire le regole tariffarie in base alla zona o alla stazione di origine o di destinazione, utilizza i campi
- Le tariffe dipendono dalle zone attraversate dall'itinerario.
- Per definire le regole tariffarie in base alle zone attraversate dall'itinerario, utilizza il campo
contains_id
per specificare ogni zona per la quale è valida la tariffa. contains_id
fa riferimento a un campozone_id
definito nel filestops.txt
.
- Per definire le regole tariffarie in base alle zone attraversate dall'itinerario, utilizza il campo
La maggior parte dei sistemi utilizza una di queste strutture tariffarie o una loro combinazione. Le tariffe definite senza regole sono valide per tutti gli itinerari che soddisfano i rispettivi limiti di cambi.
Se per un itinerario specifico sono valide più tariffe, viene visualizzata l'opzione più economica.
Tariffe per più aziende
Se il feed contiene più aziende di trasporto pubblico, aggiungi il campo agency_id
al file fare_attributes.txt
per ogni tariffa. Una tariffa può appartenere solo a un'azienda. Se una tariffa appartiene a diverse aziende, è necessario duplicarla.
Categorie di tariffe speciali
Google Maps non supporta diverse categorie di tariffe, ad esempio adulti, anziani, bambini. Nei risultati di elaborazione del percorso sarà pubblicata solo una tariffa. Utilizza la categoria di tariffe predefinita.
Scenari di esempio e come strutturare le tariffe
Le sezioni seguenti descrivono scenari di esempio e come strutturare le tariffe.
Esempio 1: tutte le corse hanno la stessa tariffa e i cambi sono illimitati
Supponiamo che l'azienda di trasporto pubblico Demo Transit abbia la seguente struttura tariffaria:
- I passeggeri pagano 1 $ a bordo (
price
='1.00',currency
='USD',payment_method
='0'). - Il titolo di viaggio è valido per tutti i mezzi e non scade (
transfers
=''). - I passeggeri possono viaggiare per tutto il tempo che vogliono perché il campo
transfer_duration
è omesso.
Poiché tutte le corse hanno la stessa tariffa, Demo Transit può omettere il file fare_rules.txt
.
File fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
---|---|---|---|---|
only_fare |
1.00 |
USD |
0 |
Calcolo di una tariffa per adulti
Lo strumento di pianificazione delle corse calcola una tariffa di 1 $ per ogni tratto dell'itinerario che include un cambio di mezzo. Tuttavia, dato che sono consentiti cambi illimitati, lo strumento di pianificazione delle corse visualizza solo la tariffa più bassa, ovvero la tariffa per adulti pari a 1 $.
Esempio 2: tutte le corse hanno la stessa tariffa e non sono consentiti cambi
Supponiamo che l'azienda di trasporto pubblico Demo Transit abbia la seguente struttura tariffaria:
- I passeggeri pagano 1 $ a bordo (
price
='1.00',currency
='USD',payment_method
='0'). - I passeggeri possono viaggiare per tutto il tempo che vogliono perché il campo
transfer_duration
è omesso. - Per ogni eventuale cambio di mezzo è richiesta una nuova tariffa (
transfers
='0').
Poiché tutte le corse hanno la stessa tariffa, Demo Transit può omettere il file fare_rules.txt
.
File fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
---|---|---|---|---|
only_fare |
1.00 |
USD |
0 |
0 |
Calcolo di una tariffa per adulti
Lo strumento di pianificazione delle corse calcola una tariffa di 1 $ per ogni tratto dell'itinerario che include un cambio di mezzo. La tariffa di un itinerario che richiede un cambio di autobus sarà quindi pari a 2 $.
Esempio 3: tutte le corse hanno la stessa tariffa e i cambi sono consentiti
Supponiamo che l'azienda di trasporto pubblico Demo Transit abbia la seguente struttura tariffaria:
- I passeggeri pagano 1 $ a bordo (
price
='1.00',currency
='USD',payment_method
='0'). - Sono consentiti cambi illimitati entro 90 minuti (
transfers
='',transfer_duration
='5400').
Poiché tutte le corse hanno la stessa tariffa, Demo Transit può omettere il file fare_rules.txt
.
File fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
transfer_duration |
---|---|---|---|---|---|
only_fare |
1.00 |
USD |
0 |
5400 |
Calcolo di una tariffa per adulti
Lo strumento di pianificazione delle corse calcola una tariffa di 1 $ per ogni tratto dell'itinerario che include un cambio di mezzo. Calcola quindi la durata dell'itinerario. Se questa è inferiore a 90 minuti, la tariffa è pari a 1 $.
Esempio 4: prezzi diversi per percorsi locali e rapidi
Supponiamo che l'azienda di trasporto pubblico Demo Transit abbia la seguente struttura tariffaria:
- I passeggeri pagano 1,75 $ a bordo di autobus locali (percorso 1).
- I passeggeri pagano 5 $ a bordo di autobus con servizio rapido (percorsi 2 e 3).
- Non sono consentiti cambi.
Poiché alcune corse costano più di altre, Demo Transit deve includere il file fare_rules.txt
e ogni percorso deve avere una voce distinta da associare a una tariffa.
File fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
---|---|---|---|---|
local_fare |
1,75 |
USD |
0 |
0 |
express_fare |
5.00 |
USD |
0 |
0 |
File fare_rules.txt
fare_id |
route_id |
---|---|
local_fare |
Route_1 |
express_fare |
Route_2 |
express_fare |
Route_3 |
Calcolo di una tariffa per adulti
La tariffa da 5 $ è valida solo per il percorso 2 o 3. La tariffa 1,75 $ è valida solo per il percorso 1. Se un itinerario utilizza i percorsi 1 e 2, la tariffa è 6,75 $.
Esempio 5: l'acquisto di un cambio aumenta la tariffa
Supponiamo che l'azienda di trasporto pubblico Demo Transit abbia la seguente struttura tariffaria:
- I passeggeri pagano 1,75 $ a bordo di autobus locali.
- I passeggeri possono acquistare a bordo un cambio pagando una maggiorazione di 0,25 $.
- I cambi acquistati sono validi per 90 minuti.
Poiché queste regole sono valide per tutte le corse, Demo Transit può omettere il file fare_rules.txt
.
File fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
transfer_duration |
---|---|---|---|---|---|
simple_fare |
1,75 |
USD |
0 |
0 |
|
plustransfer_fare |
2.00 |
USD |
0 |
5400 |
Calcolo di una tariffa per adulti
Tecnicamente, entrambe le tariffe si applicano agli itinerari che non prevedono cambi. Tuttavia, lo strumento di pianificazione delle corse sceglie sempre la tariffa più economica applicabile:
- Per un itinerario con un cambio, la tariffa
simple_fare
è 3,50 $, rispetto a 2,00 $ se l'utente acquista un cambio. Lo strumento di pianificazione delle corse calcola pertanto una tariffa di 2 $ per tutti gli itinerari che richiedono un cambio di mezzo. - Per un itinerario senza cambi, la tariffa di 1,75 $ è inferiore a quella di
plustransfer_fare
pari a 2,00 $. Se un itinerario non richiede cambi, la tariffa è quindi pari a 1,75 $.
Esempio 6: la tariffa dipende dalla combinazione tra stazione di origine e di destinazione, non dalle corse effettuate per raggiungere la destinazione
In questo esempio sono importanti solo i punti di entrata e di uscita dal sistema. Per definire questa struttura tariffaria per il feed, ogni stazione deve avere un proprio ID zona univoco definito nel file stops.txt
. Ogni stazione è considerata un'unica zona.
- Nei file
fare_attributes.txt
efare_rules.txt
ogni riga definisce ciascuna coppia di stazioni. - Nel file
fare_attributes.txt
, i campiorigin_id
edestination_id
identificano coppie di stazioni per ID zona.
File fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
---|---|---|---|---|
!S1_to_S2 |
1.75 |
USD |
0 |
|
!S1_to_S3 |
3,25 |
USD |
0 |
|
!S1_to_S4 |
4.55 |
USD |
0 |
|
… |
||||
!S10_to_S1 |
5.65 |
USD |
0 |
File 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 |
Calcolo di una tariffa per adulti
Lo strumento di pianificazione delle corse calcola un itinerario, quindi cerca nelle regole tariffarie la coppia di stazioni di origine/destinazione corrispondente. Il feed pubblico del sistema di trasporto pubblico BART (Bay Area Rapid Transit) di San Francisco è un esempio reale di questo tipo di struttura tariffaria.
Esempio 7: la tariffa dipende dalle zone
Supponiamo che l'azienda di trasporto pubblico Demo Transit abbia un sistema concentrico a tre zone, in cui le tariffe dipendono dalle zone attraversate da un passeggero durante un itinerario. Per definire questa struttura tariffaria per il feed, i file fare_attributes.txt
e fare_rules.txt
devono contenere una riga per ogni possibile combinazione di zone. Per strutture tariffarie molto complesse basate su più zone, potrebbe essere più semplice creare in modo programmatico il file fare_rules.txt
utilizzando le stazioni di origine e di destinazione per definire le tariffe.
File fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
---|---|---|---|---|
F1 |
4.15 |
USD |
0 |
|
F2 |
2.20 |
USD |
0 |
|
F3 |
2.20 |
USD |
0 |
|
F4 |
2.95 |
USD |
0 |
|
F5 |
1.25 |
USD |
0 |
|
F6 |
1.95 |
USD |
0 |
|
F7 |
1.95 |
USD |
0 |
File 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 |
Calcolo di una tariffa per adulti
Analizziamo meglio le definizioni incluse nel file fare_rules.txt
.
- La tariffa F1 è valida per tutte le corse che attraversano le zone (1,2,3).
- La tariffa F2 è valida per tutte le corse che attraversano le zone (1,2).
- La tariffa F3 è valida per tutte le corse che attraversano le zone (1,3).
- La tariffa F4 è valida per tutte le corse che attraversano le zone (2,3).
- La tariffa F5 è valida per tutte le corse che attraversano solo la zona 1.
- La tariffa F6 è valida per tutte le corse che attraversano solo la zona 2.
- La tariffa F7 è valida per tutte le corse che attraversano solo la zona 3.
Lo strumento di pianificazione delle corse calcola un itinerario, quindi cerca nelle regole tariffarie le tariffe applicabili in base alla zona. Per una corsa dalla zona 2 alla zona 3, si applica solo la tariffa F4 (2,95 $), poiché la tariffa F1 include anche l'attraversamento della zona 1. Una regola tariffaria viene applicata solo quando l'insieme di zone attraversate da un itinerario corrisponde esattamente a quello specificato nella regola tariffaria. Per una corsa tra le zone 2 e 3, lo strumento di pianificazione delle corse calcola 2,95 $ come tariffa per adulti.
Esempio 8: influenza dei campi transfers e transfer_duration
Di seguito è riportato un esempio di cambio:
- La corsa 1 parte alle 10:00 e arriva alle 11:00.
- La corsa 2 parte alle 11:15 e arriva alle 12:00.
- Affinché la tariffa sia valida per l'intero percorso, deve essere abilitata per almeno 1 cambio e per una durata (transfer_duration) di almeno 2 ore (dalle 10:00 alle 12:00).
Esempio 9: tariffe e cambi a blocchi
Una cambio a blocchi combina due corse appartenenti a percorsi diversi e consente ai passeggeri di rimanere sullo stesso mezzo quando passano da un percorso all'altro. Per una corsa che prevede un cambio a blocchi, il sistema seleziona una tariffa per tutti i percorsi coinvolti. I cambi a blocchi non sono considerati cambi ai fini della definizione del modello di tariffe.
Nell'esempio seguente è riportato un modello di tariffa per un cambio a blocchi:
- Supponiamo siano disponibili due percorsi, A e B.
- Ogni corsa sul percorso A o B costa 1 $ e ogni corsa che include A e B costa 2 $.
I valori nei file fare_attributes.txt
e fare_rules.txt
saranno i seguenti:
File fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
transfer_duration |
---|---|---|---|---|---|
fare_A |
1.00 |
USD |
0 |
0 |
|
fare_B |
1.00 |
USD |
0 |
0 |
|
fare_AB |
2.00 |
USD |
0 |
0 |
File 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 |