Le format General Transit Feed Specification (GTFS) utilise deux fichiers différents pour modéliser les tarifs :
fare_attributes.txt
: ce fichier contient un attribut associé au tarif qui définit une classe tarifaire. Un attribut associé au tarif présente un prix, une devise et un paramètre définissant s'il doit être acheté à bord du service ou avant l'embarquement. Il définit également le nombre de correspondances pour lesquelles il peut être utilisé et sa durée de validité.fare_rules.txt
: ce fichier décrit comment les billets sont appliqués au système de transports en commun.
Cet article décrit comment les deux fichiers fonctionnent conjointement afin de créer un flux de données précis pour vos tarifs.
Attributs associés aux tarifs
Le fichier fare_attributes.txt
définit les aspects d'un tarif (ID, type de paiement, etc.). Ce fichier présente la structure suivante :
Voici un exemple de fichier fare_attributes.txt
à structure simple :
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 |
Définissez les valeurs price
, currency_type
et payment_method
dans le fichier fare_attributes.txt
pour chaque tarif. Autorisez ou empêchez les correspondances à l'aide du champ transfers
("0" correspond à aucune correspondance autorisée, "1" à une correspondance autorisée et "2" à deux correspondances autorisées ; un champ vide autorise un nombre illimité de correspondances). Définissez la durée (en secondes) avant qu'une correspondance n'expire dans le champ transfer_duration
. Le système calcule la valeur transfer_duration
depuis le départ du premier trajet jusqu'à l'arrivée du dernier (voir l'exemple ci-dessous.)
Important :
- Pour indiquer la durée de validité d'un billet à un tarif n'autorisant pas les correspondances, donnez la valeur "0" à
transfers
et indiquez la durée valide (en secondes) dans le champtransfer_duration
. - À moins que vous n'utilisiez le champ
transfer_duration
pour indiquer la validité d'un billet, nous vous recommandons de l'ignorer ou de le laisser vide lorsque vous indiquez "0" dans le champtransfers
.
Règles applicables aux tarifs
Le fichier fare_rules.txt
décrit comment les billets sont appliqués au système de transports en commun. Ce fichier présente la structure suivante :
Voici un exemple de fichier fare_rules.txt
à structure simple :
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 |
Le fichier fare_rules.txt
accepte les structures tarifaires suivantes :
- Le tarif dépend de l'itinéraire choisi.
- Pour associer un tarif à un itinéraire spécifique, définissez la valeur du champ
route_id
. - Si un tarif est applicable à plusieurs itinéraires, indiquez une valeur pour chaque itinéraire dans le champ
fare_rules
.
- Pour associer un tarif à un itinéraire spécifique, définissez la valeur du champ
- Le tarif dépend des zones ou gares de départ ou d'arrivée.
- Pour définir des règles de tarification en fonction de la zone ou de la gare de départ ou d'arrivée, utilisez les champs
origin_id
etdestination_id
. - Les champs
origin_id
etdestination_id
font référence aux zones dans lesquelles les gares de départ et d'arrivée sont situées. Pour fournir ces informations dans le fichierstops.txt
, ajoutez le champzone_id
. - Pour définir des règles en fonction de gares spécifiques, définissez une zone pour chaque gare dans le fichier
stops.txt
.
- Pour définir des règles de tarification en fonction de la zone ou de la gare de départ ou d'arrivée, utilisez les champs
- Le tarif dépend des zones que l'itinéraire traverse.
- Pour définir des règles de tarification en fonction des zones que l'itinéraire traverse, définissez les zones dans lesquelles le tarif s'applique via le champ
contains_id
. - Le champ
contains_id
fait référence à l'identifiantzone_id
défini dans le fichierstops.txt
.
- Pour définir des règles de tarification en fonction des zones que l'itinéraire traverse, définissez les zones dans lesquelles le tarif s'applique via le champ
La plupart des systèmes tarifaires utilisent l'une de ces structures tarifaires ou une combinaison. Les tarifs pour lesquels aucune règle n'a été définie sont valables pour tous les itinéraires qui ne dépassent pas le nombre de correspondances autorisé.
Si plusieurs tarifs sont applicables à un itinéraire donné, le système affiche l'option la moins chère.
Tarifs applicables à plusieurs agences
Si le flux comporte plusieurs agences de transports en commun, ajoutez le champ agency_id
au fichier fare_attributes.txt
au niveau de chaque tarif. Notez qu'un tarif ne peut être associé qu'à une seule agence. Si plusieurs agences partagent le même tarif, vous devez le dupliquer.
Catégories de tarifs spéciaux
Google Maps n'est pas compatible avec des catégories tarifaires spécifiques, (telles que "adulte", "senior" ou "enfant"). Seul un tarif apparaît dans les résultats de recherche d'un itinéraire. Utilisez la catégorie tarifaire par défaut.
Exemples de scénarios et de structuration des tarifs
Les sections suivantes décrivent des exemples de scénarios et expliquent comment structurer les tarifs.
Exemple 1 : Tous les trajets sont au même tarif, les correspondances sont illimitées
Supposons que l'agence de transports en commun de démonstration présente la structure tarifaire suivante :
- Les passagers paient 1,00 $ à l'embarquement (
price
='1,00',currency
='USD',payment_method
='0'). - Le billet est valable pour tous les véhicules et n'expire pas (
transfers
=''). - Les passagers peuvent utiliser les transports en commun aussi longtemps qu'ils le souhaitent, car le champ
transfer_duration
a été omis.
Étant donné que tous les trajets sont au même tarif, les transports en commun de démonstration peuvent ignorer le fichier fare_rules.txt
.
Fichier fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
---|---|---|---|---|
only_fare |
1,00 |
USD |
0 |
Calcul d'un tarif adulte
L'outil de planification de trajets calcule un tarif de 1 $ pour chaque étape de l'itinéraire comprenant un changement de véhicule. Cependant, les correspondances illimitées étant autorisées, l'outil de planification de trajets n'affiche que les frais les plus bas, c'est-à-dire le tarif adulte de 1 $.
Exemple 2 : Tous les trajets sont au même tarif, aucune correspondance
Supposons que l'agence de transports en commun de démonstration présente la structure tarifaire suivante :
- Les passagers paient 1,00 $ à l'embarquement (
price
='1,00',currency
='USD',payment_method
='0'). - Les passagers peuvent utiliser les transports en commun aussi longtemps qu'ils le souhaitent, car le champ
transfer_duration
a été omis. - Tout changement de véhicule nécessite un nouveau tarif (
transfers
='0').
Étant donné que tous les trajets sont au même tarif, les transports en commun de démonstration peuvent ignorer le fichier fare_rules.txt
.
Fichier fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
---|---|---|---|---|
only_fare |
1,00 |
USD |
0 |
0 |
Calcul d'un tarif adulte
L'outil de planification de trajets calcule un tarif de 1 $ pour chaque étape de l'itinéraire comprenant un changement de véhicule. Par conséquent, un itinéraire qui nécessite un changement de bus s'élèverait à 2 $.
Exemple 3 : Tous les trajets sont au même tarif, les correspondances sont autorisées
Supposons que l'agence de transports en commun de démonstration présente la structure tarifaire suivante :
- Les passagers paient 1,00 $ à l'embarquement (
price
='1,00',currency
='USD',payment_method
='0'). - Les correspondances illimitées sont autorisées dans une limite de 90 minutes (
transfers
='',transfer_duration
='5400').
Étant donné que tous les trajets sont au même tarif, les transports en commun de démonstration peuvent ignorer le fichier fare_rules.txt
.
Fichier fare_attributes.txt
fare_id |
price |
currency_type |
payment_method |
transfers |
transfer_duration |
---|---|---|---|---|---|
only_fare |
1,00 |
USD |
0 |
5 400 |
Calcul d'un tarif adulte
L'outil de planification de trajets calcule un tarif de 1 $ pour chaque étape de l'itinéraire comprenant un changement de véhicule. La durée de l'itinéraire est ensuite calculée. Si la durée de l'itinéraire est inférieure à 90 minutes, le tarif s'élève à 1 $.
Exemple 4 : Différents tarifs sont appliqués aux itinéraires locaux et express
Supposons que l'agence de transports en commun de démonstration présente la structure tarifaire suivante :
- Les passagers paient 1,75 $ lorsqu'ils embarquent à bord de bus locaux (itinéraire 1).
- Les passagers paient 5 $ lorsqu'ils embarquent à bord de bus express (itinéraires 2 et 3).
- Les correspondances ne sont pas autorisées.
Étant donné que certains trajets sont plus onéreux que d'autres, les transports en commun de démonstration doivent inclure le fichier fare_rules.txt
, et chaque itinéraire doit associer une entrée à un tarif.
Fichier 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 |
Fichier fare_rules.txt
fare_id |
route_id |
---|---|
local_fare |
Route_1 |
express_fare |
Route_2 |
express_fare |
Route_3 |
Calcul d'un tarif adulte
Le tarif de 5,00 $ est applicable uniquement si vous empruntez les itinéraires 2 ou 3. Le tarif de 1,75 $ s'applique uniquement à l'itinéraire 1. Le tarif de 6,75 $ est appliqué si les itinéraires 1 et 2 sont empruntés.
Exemple 5 : L'achat d'une correspondance augmente le tarif
Supposons que l'agence de transports en commun de démonstration présente la structure tarifaire suivante :
- Les passagers paient 1,75 € lorsqu'ils embarquent à bord de bus locaux.
- Ils paient un supplément de 0,25 € à l'embarquement pour acheter une correspondance.
- Les correspondances achetées sont valables 90 minutes.
Étant donné que ces règles sont applicables à tous les trajets, les transports en commun de démonstration peuvent ignorer le fichier fare_rules.txt
.
Fichier 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 |
5 400 |
Calcul d'un tarif adulte
Techniquement, les deux tarifs sont appliqués à des itinéraires qui ne comprennent pas de correspondance. Cependant, l'outil de planification de trajets choisit toujours le tarif applicable le moins cher :
- Pour un itinéraire avec une seule correspondance, le
simple_fare
s'élève à 3,50 $ contre 2,00 $ lorsqu'une correspondance est achetée. Ainsi, l'outil de planification de trajets indiquera un tarif de 2,00 $ pour tous les itinéraires qui nécessitent un changement de véhicule. - Pour un itinéraire sans correspondance, le tarif de 1,75 € est inférieur au montant
plustransfer_fare
, qui s'élève à 2,00 €. Par conséquent, si un itinéraire n'implique pas de changer de véhicule, le tarif s'élève à 1,75 €.
Exemple 6 : Le tarif dépend des paires de gares, sans prendre en compte le moyen de vous y rendre
Dans cet exemple, seuls les points d'entrée et de sortie du système importent. Pour définir cette structure tarifaire concernant le flux, chaque gare doit disposer de son propre ID de zone, défini dans le fichier stops.txt
. Chaque gare est considérée comme une zone unique.
- Les fichiers
fare_attributes.txt
etfare_rules.txt
définissent une ligne pour chaque paire de gares. - Dans le fichier
fare_attributes.txt
, les champsorigin_id
etdestination_id
identifient les paires de gares par ID de zone.
Fichier 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 |
Fichier 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 |
Calcul d'un tarif adulte
L'outil de planification de trajets calcule un itinéraire, puis recherche les règles de tarification jusqu'à ce qu'il trouve une paire de gares correspondant à l'origine et à la destination. Le flux public issu de SF Bay Area BART (réseau de transports en commun de San Francisco) fournit une illustration réaliste de ce type de structure tarifaire.
Exemple 7 : Les tarifs dépendent des zones
Supposons que l'agence de transports en commun de démonstration dispose d'un système à trois zones concentriques, où les tarifs dépendent des zones traversées par l'itinéraire d'un passager. Pour définir cette structure tarifaire pour le flux, les fichiers fare_attributes.txt
et fare_rules.txt
doivent contenir une ligne pour chaque combinaison de zones possible. Pour les structures tarifaires très complexes traversant plusieurs zones, la méthode la plus simple consiste à programmer la sortie du fichier fare_rules.txt
en utilisant l'origine et la destination pour définir les tarifs.
Fichier 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 |
Fichier 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 |
Calcul d'un tarif adulte
Regardons de plus près les définitions du fichier fare_rules.txt
.
- F1 s'applique à tous les trajets qui traversent les zones (1,2,3).
- F2 s'applique à tous les trajets qui traversent les zones (1,2).
- F3 s'applique à tous les trajets qui traversent les zones (1,3).
- F4 s'applique à tous les trajets qui traversent les zones (2,3).
- F5 s'applique à tous les trajets qui traversent uniquement la zone 1.
- F6 s'applique à tous les trajets qui traversent uniquement la zone 2.
- F7 s'applique à tous les trajets qui traversent uniquement la zone 3.
L'outil de planification de trajets calcule un itinéraire, puis recherche les règles de tarification afin de déterminer l'application des tarifs en fonction de la zone. Étant donné que F1 comprend également un trajet en zone 1, seul F4 (2,95 $) s'applique à un trajet de la zone 2 vers la zone 3. Une règle tarifaire s'applique uniquement si l'ensemble des zones traversées par un itinéraire correspond exactement à l'ensemble spécifié par la règle tarifaire. Pour un trajet compris entre les zones 2 et 3, l'outil de planification de trajets indique un tarif adulte de 2,95 $.
Exemple 8 : Incidence des correspondances et de leur durée (transfer_duration)
Voici un exemple de correspondance :
- Le trajet 1 commence à 10h00 et se termine à 11h00.
- Le trajet 2 commence à 11h15 et se termine à 12h00.
- Pour que le tarif soit valable pour l'ensemble du voyage, vous devez autoriser au moins une correspondance et une durée de correspondance (transfer_duration) d'au moins deux heures (de 10h00 à 12h00).
Exemple 9 : Tarifs et correspondances groupées
Une correspondance groupée combine deux trajets appartenant à différents itinéraires. Elle permet aux passagers de rester dans le même véhicule lorsqu'ils passent d'un itinéraire à l'autre. Si un trajet inclut une correspondance groupée, le système choisit un tarif applicable à tous les itinéraires concernés. Les correspondances groupées ne sont pas comptabilisées comme des correspondances pour la modélisation des tarifs.
Voici un exemple de modèle de tarif pour une correspondance groupée :
- Supposons qu'il existe deux itinéraires : A et B.
- Un trajet sur l'itinéraire A ou B coûte 1 $, et un trajet qui inclut à la fois l'itinéraire A et l'itinéraire B coûte 2 $.
Les valeurs entrées dans les fichiers fare_attributes.txt
et fare_rules.txt
doivent se présenter comme suit :
Fichier 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 |
Fichier 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 |