L’utilisation de GTFS-RT part du principe qu’un fichier GTFS statique est utilisé comme base.
La plateforme Open Data en met un à disposition.
De nombreux acteurs préfèrent toutefois le format HRDF (plus puissant).
Dans le HRDF, les champs suivants d’un trajet constituent une clé univoque:
- „Numéro de trajet“
- „Gestion“
- „Variante “
Celle-ci se trouve dans la “*Z-line” du fichier „FPLAN“.
Dans GTFS (et GTFS-RT), il s’agit du “Trip_ID” dans le fichier “trips.txt”. Les itinéraires (dans “routes.txt”) et les trips sont automatiquement numérotés. C’est-à-dire qu’ils ne sont pas stables non plus entre les versions de GTFS.
Si l’horaire réel doit provenir de HRDF et que leurs algorithmes sont conçus pour cela, ils doivent néanmoins importer le GTFS Static dans leur base de données et créer une correspondance.
Il est recommandé de procéder comme suit.
Importez le GTFS Static actuel dans votre base de données
Importez le GTFS Static actuel dans une base de données (par ex. avec https://github.com/cbick/gtfs_SQL_importer). A titre d’exemple, voici un script SQL simple.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
drop table GTFS_agency; drop table GTFS_calendar; drop table GTFS_calendar_dates; drop table GTFS_routes; drop table GTFS_stops; drop table GTFS_stop_times; drop table GTFS_trips; create table GTFS_agency(agency_id TEXT,agency_name TEXT,agency_url TEXT, agency_timezone TEXT,agency_lang TEXT, agency_phone TEXT); create table GTFS_calendar(service_id TEXT,monday NUMERIC, tuesday NUMERIC, wednesday NUMERIC, thursday NUMERIC, friday NUMERIC, saturday NUMERIC, sunday NUMERIC,start_date NUMERIC,end_date NUMERIC); create table GTFS_calendar_dates(service_id TEXT,date NUMERIC,exception_type NUMERIC); create table GTFS_routes(route_id TEXT,agency_id TEXT,route_short_name TEXT, route_long_name TEXT,route_type NUMERIC ); -- create table shapes(shape_id TEXT,shape_pt_lat REAL,shape_pt_lon REAL, shape_pt_sequence NUMERIC); create table GTFS_stops(stop_id TEXT,stop_name TEXT, stop_lat REAL,stop_lon REAL, location_type TEXT,parent_station TEXT ); create table GTFS_stop_times(trip_id TEXT,arrival_time TEXT,departure_time TEXT, stop_id TEXT,stop_sequence NUMERIC, pickup_type NUMERIC,drop_off_type NUMERIC); create table GTFS_trips(route_id TEXT,service_id TEXT,trip_id TEXT, trip_headsign TEXT,direction_id NUMERIC ); .separator ',' .import GTFS_Import/agency.txt GTFS_agency .import GTFS_Import/calendar.txt GTFS_calendar .import GTFS_Import/calendar_dates.txt GTFS_calendar_dates .import GTFS_Import/routes.txt GTFS_routes -- .import GTFS_Import/shapes.txt shapes .import GTFS_Import/stops.txt GTFS_stops .import GTFS_Import/stop_times.txt GTFS_stop_times .import GTFS_Import/trips.txt GTFS_trips delete from GTFS_agency where agency_id like 'agency_id'; delete from GTFS_calendar_dates where service_id like 'service_id'; delete from GTFS_routes where route_id like 'route_id'; -- delete from shapes where shape_id like 'shape_id'; delete from GTFS_stops where stop_id like 'stop_id'; delete from GTFS_stop_times where trip_id like 'trip_id'; delete from GTFS_trips where route_id like 'route_id'; |
Une compréhension de la structure de GTFS est nécessaire: https://developers.google.com/transit/gtfs/reference/
Importez les données nécessaires du HRDF dans une base de données
Vous devez importer des données à partir de différents fichiers du HRDF. La structure est décrite ici: https://opentransportdata.swiss/wp-content/uploads/2016/10/hrdf.pdf
De „FPLAN“:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
*Z Zeile 1-2 *Z 4-8 INT32 Fahrtnummer 10-15 CHAR Verwaltung 19-21 INT16 Variante * G Zeile 1-2 *G 4-6 CHAR Verkehrsmittel bzw. Gattung 8-14 INT32 optional Haltestelle, ab der die Gattung gilt 16-22 INT32 optional Haltestellennummer, bis zu der die Gattung gilt 24-29 INT32 optional Abfahrtszeitpunkt 31-36 INT32 optional Ankunftszeitpunkt * L Zeile 1-2 *L 4-11 CHAR Liniennummer *I Zeilen 1-2 *I 4-5 Z0 ursprünglicher >Zug 4-5 ZN 30-36 Infotextnummer * R Zeile 1-2 *R 4-4 CHAR Richtungskennung * Laufwegzeilen 1-7 Haltestellenummer 30-35 -INT32 Ankunftszeit an der Haltestelle 37-42 INT32 Abfahrts ab Haltestelle */ |
Les périodes de trafic doivent également être intégrées (fichier “BITFELD”). Ils en ont besoin pour déterminer les jours de circulation.
Du fichier “INFOTEXT” est nécessaire pour identifier le numéro de train correct en cas de panne. Si le numéro de train change (en cas de panne), le numéro de train initial est enregistré dans “INFOTEXT” dans le champ “Infotext”. C’est-à-dire que la valeur de “Z0” dans le HRDF doit encore être correctement référencée.
Les reliures doivent également être importées. Les liaisons directes sont deux trajets effectués par le même train. Les reliures sont contenues dans le fichier “DURCHBI”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
10480 000881 8587086 10481 000881 000000 8587086 % 10486 000881 8587086 10487 000881 000000 8587086 % 10502 000801 8507867 10501 000801 000000 8507867 % Unterseen, Spital Interlaken 10502 000801 8507867 90501 000801 000000 8507867 % Unterseen, Spital Interlaken 10504 000801 8507867 10503 000801 000000 8507867 % Unterseen, Spital Interlaken 10504 000801 8507867 90505 000801 000000 8507867 % Unterseen, Spital Interlaken 10510 000801 8507867 10509 000801 000000 8507867 % Unterseen, Spital Interlaken 10512 000801 8507867 10511 000801 000000 8507867 % Unterseen, Spital Interlaken 10514 000801 8507867 10513 000801 000000 8507867 % Unterseen, Spital Interlaken 10516 000801 8507867 10515 000801 000000 8507867 % Unterseen, Spital Interlaken 10518 000801 8507867 10517 000801 000000 8507867 % Unterseen, Spital Interlaken 10520 000037 8500063 10528 000037 000525 8500063 % 00063 50505T R 50505T R 25:28 - 25:28 25:28 - 25:28 10520 000801 8507867 10519 000801 000000 8507867 % Unterseen, Spital Interlaken 10522 000773 8594188 07059 000773 000000 8594188 % 10522 000801 8507867 10521 000801 000000 8507867 % Unterseen, Spital Interlaken 10523 000773 8594188 04839 000773 000000 8594188 % 10524 000801 8507867 10523 000801 000000 8507867 % Unterseen, Spital Interlaken 10526 000773 8590892 10418 000773 000000 8590892 % 10526 000801 8507867 10525 000801 000000 8507867 % Unterseen, Spital Interlaken 10528 000801 8507867 10527 000801 000000 8507867 % Unterseen, Spital Interlaken 10530 000801 8507867 10529 000801 000000 8507867 % Unterseen, Spital Interlaken 10532 000801 8507867 10531 000801 000000 8507867 % Unterseen, Spital Interlaken 10534 000801 8507867 10533 000801 000000 8507867 % Unterseen, Spital Interlaken 10536 000801 8507867 10535 000801 000000 8507867 % Unterseen, Spital Interlaken 10538 000801 8507867 10537 000801 000000 8507867 % Unterseen, Spital Interlaken 10540 000801 8507867 10539 000801 000000 8507867 % Unterseen, Spital Interlaken 10542 000801 8507867 10541 000801 000000 8507867 % Unterseen, Spital Interlaken 10544 000801 8507867 10543 000801 000000 8507867 % Unterseen, Spital Interlaken 10548 000801 8507867 10549 000801 000000 8507867 % Unterseen, Spital Interlaken 10550 000801 8507867 10551 000801 000000 8507867 % Unterseen, Spital Interlaken 10552 000801 8507867 10553 000801 000000 8507867 % Unterseen, Spital Interlaken 10554 000801 8507867 10555 000801 000000 8507867 % Unterseen, Spital Interlaken 10560 000801 8507867 10559 000801 000000 8507867 % Unterseen, Spital Interlaken 10562 000801 8507867 10561 000801 000000 8507867 % Unterseen, Spital Interlaken 10605 000841 8588626 28023 000841 000000 8588626 % 88626 60110E R 60528E R 07:03 - 07:06 07:04 - 07:15 10607 000841 8588626 28033 000841 000000 8588626 % 88626 60110E R 60528E R 08:03 - 08:06 08:04 - 08:15 10625 000841 8588626 28123 000841 000010 8588626 % 88626 60110E R 60528E R 17:12 - 17:15 17:13 - 17:15 10627 000841 8588626 28133 000841 000010 8588626 % 88626 60110E R 60528E R 18:12 - 18:15 18:13 - 18:15 10629 000841 8588626 28143 000841 000010 8588626 % 88626 60110E R 60528E R 19:12 - 19:15 19:13 - 19:15 10653 03____ 8015187 10357 03____ 090720 8015187 % |
Dans le GTFS, les liaisons sont déjà accrochées ensemble pour former le trip. Ainsi, le trip A et le trip B, qui sont reliés par DURCHBI dans le HRDF, sont déjà présents dans le GTFS en tant que A->B.
Au minimum, le dossier devrait contenir:
- Numéro de trajet
- Administration
- Variante
- Point de départ
- Lieu de destination
- Heure de départ
- Période cible
- Hiérarchie
- Ripage
- Période de circulation
- Z0
- ZN
Mise en correspondance des données
Vous pouvez maintenant faire correspondre les enregistrements en cliquant sur:
- Point de départ
- Heure de départ
- Lieu de destination
- Période cible
- Ripage
- Jour de circulation
Il est également possible de procéder à une concordance via le parcours, auquel cas il est possible de renoncer au jour de circulation. Lors de la mise en correspondance par le biais du parcours, le parcours exact est mis en correspondance.
Important:
- Il y a plus de voyages dans GTFS que de voyages dans HRDF.
- Les trains transfrontaliers sont tronqués à la gare frontière sur la plateforme Opendata. Si vous avez les horaires d’une autre source, cela peut être différent.
- Vous pouvez également déterminer le lieu de départ/d’arrivée à partir du parcours de “FPLAN”.
La correspondance peut être statique ou dynamique, selon les besoins de votre application, mais vous devez en tout cas inclure le tag pertinent, car c’est la seule façon d’identifier clairement le trajet et l’entrée HRDF-FPLAN correspondants. Par exemple:
- Vous pouvez le faire par exemple avec une fonction getTripfromHRDF (ID trajet, gestion, version , jour de fonctionnement).
- Vous pouvez créer une fonction getHRDFfromTrip(trip_id, jour de fonctionnement).
- Vous créez pour chaque jour d’exploitation une vue/tableau des trajets et de leur mapping avec le HRDF (attention : dans le pire des cas, 130’000 trajets x 400 jours).