Corriger les problèmes courants
Référence par symptôme. Chaque entrée commence par ce que vous voyez dans une exécution validate, puis donne la commande qui corrige. Adaptez les filtres à votre flux — les patterns ci-dessous sont illustratifs.
stop_times orphelins après une suppression de trajet
Section intitulée « stop_times orphelins après une suppression de trajet »Symptôme. fk_violation sur stop_times.trip_id référençant des trajets qui ne sont plus dans trips.txt. Arrive habituellement quand des trajets ont été retirés par un script externe qui ne comprend pas l’intégrité référentielle.
Correction. Relancez la suppression via gapline pour appliquer la cascade :
gapline delete stop-times -f gtfs.zip \ --where "trip_id=GHOST_TRIP" \ --confirmPour un lot de lignes orphelines, énumérez-les d’abord :
gapline read stop-times -f gtfs.zip --where "trip_id LIKE GHOST_%"Puis supprimez chaque trip_id touché. À l’avenir, faites la suppression du trajet via gapline delete trips — la cascade gère stop_times automatiquement.
Plage calendar.txt expirée
Section intitulée « Plage calendar.txt expirée »Symptôme. Erreur calendar_ranges sur une ligne dont end_date est passée. Les consommateurs abandonnent le service silencieusement ; le flux reste structurellement valide.
Correction. Soit vous supprimez le service expiré :
gapline delete calendar -f gtfs.zip \ --where "end_date<20260101" \ --confirm…soit vous étendez la plage si le service est toujours actif :
gapline update calendar -f gtfs.zip \ --where "service_id=WEEKDAY" \ --set end_date=20261231 \ --confirmRéférences shapes.txt manquantes
Section intitulée « Références shapes.txt manquantes »Symptôme. fk_violation sur trips.shape_id pointant vers un shape_id absent de shapes.txt.
Correction. Si la forme n’a pas lieu d’être, effacez la référence :
gapline update trips -f gtfs.zip \ --where "shape_id=MISSING_SHAPE" \ --set shape_id="" \ --confirmSi la forme existe sous un autre ID, réécrivez la référence :
gapline update trips -f gtfs.zip \ --where "shape_id=OLD_ID" \ --set shape_id=NEW_ID \ --confirmCoordonnées hors de la plage valide
Section intitulée « Coordonnées hors de la plage valide »Symptôme. Avertissements coordinates_near_origin ou coordinates_near_pole. Typiquement des coordonnées 0/0 laissées par un script amont.
Correction. Trouver les coupables :
gapline read stops -f gtfs.zip --where "stop_lat=0 AND stop_lon=0"Corriger au cas par cas :
gapline update stops -f gtfs.zip \ --where "stop_id=S_BROKEN" \ --set stop_lat=45.5017 stop_lon=-73.5673 \ --confirmSi les arrêts sont irrécupérables, supprimez-les — la cascade retire les stop_times associés.
Doublons de stop_id
Section intitulée « Doublons de stop_id »Symptôme. primary_key_violation sur stops.txt. Deux lignes ou plus partagent le même stop_id.
Correction. Lisez les doublons pour comprendre ce qui les différencie :
gapline read stops -f gtfs.zip --where "stop_id=S_DUPE"Typiquement, l’un est l’arrêt canonique et les autres sont des doublons d’un merge amont. Renommez les doublons avec un suffixe unique, en utilisant --cascade pour garder les références dépendantes cohérentes :
gapline update stops -f gtfs.zip \ --where "stop_id=S_DUPE AND stop_name LIKE %copie" \ --set stop_id=S_DUPE_ALT \ --cascade --confirmRevalidez ; si l’arrêt alternatif est réellement redondant, supprimez-le :
gapline delete stops -f gtfs.zip --where "stop_id=S_DUPE_ALT"L’aperçu de cascade liste chaque ligne stop_times ou transfers qui sera retirée avec l’arrêt.
Vitesses de trajet irréalistes
Section intitulée « Vitesses de trajet irréalistes »Symptôme. Avertissement speed_validation — la vitesse moyenne entre deux stop_times consécutives dépasse le seuil pour le route_type concerné.
Correction. Généralement une faute de frappe dans arrival_time ou departure_time. Lisez le trajet concerné :
gapline read stop-times -f gtfs.zip --where "trip_id=T_FAST"Corrigez la ligne suspecte :
gapline update stop-times -f gtfs.zip \ --where "trip_id=T_FAST AND stop_sequence=4" \ --set arrival_time=08:15:00 departure_time=08:15:00 \ --confirmSi la vitesse élevée est intentionnelle (TGV par exemple), remontez plutôt le seuil dans gapline.toml :
[validation.thresholds.speed_limits]rail_kmh = 320Encodage non UTF-8
Section intitulée « Encodage non UTF-8 »Symptôme. gapline refuse de charger le flux et affiche le fichier fautif avec l’offset en octets.
Correction. GTFS impose UTF-8. Transcodez le fichier fautif en dehors de gapline puis ré-archivez :
unzip gtfs.zip -d gtfs/iconv -f latin1 -t utf8 gtfs/stops.txt -o gtfs/stops.utf8.txtmv gtfs/stops.utf8.txt gtfs/stops.txt(cd gtfs && zip -r ../gtfs.zip *.txt)Puis relancez gapline validate pour confirmer.
Voir aussi
Section intitulée « Voir aussi »- Concepts / Intégrité référentielle — pourquoi la cascade se déclenche.
- Concepts / Langage de requête — écrire des filtres
--whereprécis. - Guides / Éditer avec le CRUD — la boucle générale read → update → delete.
- Règles de validation — tous les IDs de règles mentionnés ci-dessus.