Les données de transport sont défaillantes par nature. Voici comment nous y remédions.

Tout opérateur peut publier un flux GTFS sans vérification préalable. Les données sont hétérogènes, incomplètes et parfois incorrectes : arrêts en double, calendriers erronés, coordonnées invalides ou arrivées après les départs. Un calculateur d'itinéraires construit directement sur ces données envoie les gens au mauvais coin de rue ; un agent IA qui répète un horaire périmé laisse attendre en vain, à l'arrêt, la personne qui lui a fait confiance. Nous traitons 7 000+ flux d'opérateurs du monde entier avec un processus qui répond à ces problèmes : nous récupérons et harmonisons chaque flux, fusionnons les sources d'opérateurs qui se recoupent, puis appliquons 150+ contrôles de correction, d'enrichissement et de validation affinés à partir de données réelles de production.

Un entretien continu, pas une correction ponctuelle

Ce traitement est amélioré en continu. De nouvelles règles, des algorithmes améliorés et des corrections de qualité sont publiés chaque semaine. La recherche, les horaires et les réponses API utilisent la dernière version validée du traitement. La publication s'effectue par rotation des serveurs Blue-Green: les requêtes sont dirigées vers un environnement fraîchement déployé au lieu de redémarrer l'environnement actif. Le calcul d'itinéraires utilise une infrastructure distincte avec son propre cycle de publication. Les livraisons ponctuelles et régulières nécessitent une approbation manuelle. Utilisez le formulaire de demande de données pour convenir des exports et des conditions de livraison.

Chaque semaine
Versions du pipeline
Une nouvelle version chaque semaine avec des règles améliorées
Environ 7 jours
Actualisation du GTFS statique
Les 7 000+ flux sont entièrement retraités et publiés chaque semaine
15 à 60 s
Latence des données en temps réel
Importation continue des positions des véhicules et des mises à jour des courses depuis 1 000+ flux GTFS-RT

Des règles affinées sur des données de transport réelles

Certains contrôles structurels ne prennent que quelques millisecondes. La fusion des arrêts en double entre flux, la détection des courses identiques et la fusion des calendriers ont nécessité plus d'un an de tests et d'améliorations sur des données de production.

Chaque règle est validée dans le cycle de traitement hebdomadaire sur 7 000+ flux réels.

Traitement des données GTFS statiques

Entrée
7 000+ Flux GTFS sources
Flux des opérateurs
Étape 0
Collecte des données
Télécharger, décompresser, harmoniser
Étape 1
Fusion
Fusionner les sources d'opérateurs qui se recoupent
Résultat intermédiaire
Flux GTFS unifié
1 flux
Étape 2
Corriger, enrichir, dédupliquer
150+ contrôles
Sortie
Données GTFS améliorées
+ GeoJSON et statistiques

Ce que nous corrigeons pendant le traitement

GTFS est un format ouvert de publication autonome : chaque opérateur peut fournir un flux sans validation préalable par une autorité centrale. Nous couvrons 10 000+ opérateurs de transport dans 90+ pays - des réseaux de métro disposant de leurs propres équipes de données aux petites compagnies de bus dont le logiciel d'export des horaires n'a pas changé depuis dix ans. 150+ contrôles automatisés sont exécutés sur chaque flux pour détecter ces problèmes. Ils ne se limitent pas à supprimer les données erronées : ils harmonisent les noms, réparent les références et attribuent à chaque arrêt, ligne et course une identité et un ordre stables au fil des mises à jour hebdomadaires. L'API est ainsi plus rapide : les résultats arrivent déjà nommés, dédupliqués et triés. Votre application n'a pas à les nettoyer à chaque requête. Voici une sélection de contrôles, classés par domaine :

Noms et identifiants

Les champs de noms des sources peuvent être vides, avoir une casse incohérente ou répéter la même information dans deux champs.

Des noms lisibles et cohérents

Finis les ARRÊTS EN MAJUSCULES ou les caractères répétés par erreur : nous nettoyons et harmonisons les noms pour que votre interface n'ait pas à compenser les erreurs des sources.

"oxford STREET !!" → "Oxford Street"

Des noms de lignes adaptés aux listes

Les noms courts et longs sont harmonisés automatiquement pour éviter les champs vides, les répétitions et les noms trop longs dans votre sélecteur de lignes.

short_name vide, long_name "25" → repris comme nom court

Aucune répétition dans les données des arrêts

Si une description répète simplement le nom de l'arrêt, nous la vidons au lieu de fournir le même texte dans deux champs.

stop_desc = stop_name → vidé

Aucune entrée sans nom

Les arrêts, opérateurs ou courses sans nom reçoivent un libellé de remplacement identifiable plutôt qu'un champ vide qui perturberait votre affichage.

agency_name vide → "Transit Agency"

Une destination toujours visible pour les voyageurs

Si la destination d'une course manque, nous la complétons à partir du dernier arrêt pour que votre application puisse l'afficher.

trip_headsign vide → complété depuis le dernier arrêt

Des indications de langue fiables

Si la langue déclarée dans le flux ne correspond pas à celle de l'opérateur, nous la corrigeons. Votre localisation peut s'appuyer sur ce champ.

feed_lang incorrect → déduit de agency_lang

Calendriers et horaires

Périodes sans service réel, arrivées après les départs ou vitesses physiquement impossibles : se fier au flux brut peut conduire à traiter des erreurs d'export comme des horaires réels.

Des calendriers qui reflètent le service réel

Les périodes inutilisées, entrées contradictoires et calendriers en double sont détectés et supprimés avant de proposer un trajet un jour sans service.

2 entrées identiques lun-ven → 1 entrée

Des horaires sans chronologie contradictoire

Lorsque l'arrivée à l'arrêt actuel précède le départ de l'arrêt précédent, nous corrigeons cette erreur d'export récurrente et signalons les rares flux où elle est trop fréquente pour être corrigée sans examen.

A : départ 14:05 ; B : arrivée 14:02 → corrigé

Des heures de départ et d'arrivée pour chaque course

Les champs horaires vides sont vérifiés et complétés pour que les systèmes en aval n'aient pas à deviner l'heure de départ réelle.

Arrivée/départ vide → complété

Aucune course impossible à planifier

Une course dont le premier ou le dernier horaire manque ne peut pas être planifiée. Nous la supprimons avant qu'elle ne perturbe silencieusement un trajet.

Premier ou dernier horaire manquant → supprimé

Une représentation correcte du service de nuit

Les départs après minuit sont convertis dans un format horaire GTFS valide sans modifier le service réel. C'est un détail que les parseurs simples gèrent souvent mal.

27:15:00 → normalisé, jour de service décalé

Des horaires exacts clairement identifiés

Le champ timepoint est défini automatiquement selon la présence d'heures d'arrivée et de départ réelles. Il n'est pas laissé vide à l'interprétation de chaque utilisateur.

timepoint vide → exact ou approximatif

Aucune course physiquement impossible

Les intervalles de fréquence qui se chevauchent sont corrigés et les courses à vitesse impossible supprimées. Les voyageurs ne doivent pas voir un bus roulant à 2 000 km/h.

Fréquences qui se chevauchent → doublons supprimés

Arrêts et coordonnées

Deux opérateurs publient séparément le même arrêt, une course référence un stop_id absent du flux et les informations d'accessibilité sont manquantes ou erronées.

Le bon type pour chaque arrêt

Le type de lieu est défini automatiquement pour les simples points d'embarquement. Les courses faisant référence à un type d'arrêt inadapté sont détectées avant de perturber votre carte.

location_type null → 0 (quai)

Des gares avec leurs accès réels

Les entrées, sorties et liens vers la gare principale sont ajoutés à partir d'une base de pôles d'échange entretenue. Les gares principales mal placées sont repositionnées à leur emplacement réel.

Gare sans accès → accès ajoutés

Aucune course invalidée par un arrêt manquant

Si une course référence un arrêt absent de stops.txt, nous le reconstituons. Lorsque c'est possible, son nom et ses coordonnées proviennent des données officielles britanniques NAPTAN. La course reste ainsi utilisable.

Arrêt référencé mais non défini → reconstitué depuis NAPTAN

Des informations d'accessibilité fiables

Une gare est considérée comme accessible dès qu'un quai l'est, et inaccessible seulement si tous ses quais le sont explicitement. Les informations manquantes restent inconnues au lieu d'être présentées comme un refus d'accès.

1 quai sur 3 accessible → gare accessible

Précision et compacité

Les coordonnées sont arrondies à six décimales, avec une précision inférieure au mètre. Cela réduit la taille des fichiers tout en conservant des positions précises.

51.5074123456 → 51.507412

Un lieu, une seule entrée d'arrêt

Des arrêts distants d'environ 20 mètres et desservis dans le même sens sont reconnus comme un même lieu physique et fusionnés au lieu d'apparaître en double sur la carte.

2 arrêts à 20 m, même sens → fusionnés

Les bons modes de transport pour chaque arrêt

Le mode de transport d'un arrêt est déduit des lignes qui le desservent réellement. La carte et les filtres affichent la bonne icône sans requête supplémentaire.

3 lignes de bus desservent l'arrêt → mode : bus

Des données par ville sans traitement géographique supplémentaire

Chaque arrêt est rattaché à sa ville pour permettre directement les exports par ville et les filtres API.

Coordonnées → ville : Londres

Aucune course sans parcours

Une course avec un seul arrêt ne représente pas un véritable service. Elle est supprimée avec les doublons d'arrêts qui lui sont souvent associés.

Course avec 1 arrêt → supprimée

Lignes et tarifs

Le type de véhicule, la couleur ou les informations tarifaires d'une ligne sont souvent mal codés, vides ou copiés d'un autre champ du flux.

Les bons types de véhicules pour vos utilisateurs

Les types de véhicules, noms de lignes et rattachements aux opérateurs erronés sont détectés et corrigés à l'aide d'une table entretenue par notre équipe de données.

route_type mal codé → corrigé

Aucun type de ligne inconnu

Les types de lignes manquants ou invalides sont définis sur bus pour éviter une valeur inconnue dans votre application. Chaque correction déclenche un signalement interne pour vérifier manuellement les cas inhabituels.

route_type manquant → bus, signalé pour vérification

Des couleurs de lignes toujours lisibles

Les codes couleur invalides sont corrigés. Les couleurs de texte manquantes sont choisies en fonction du fond pour garantir la lisibilité des lignes.

route_text_color manquant → couleur contrastée définie

Aucun lien redondant dans les données des lignes

Une URL de ligne qui répète simplement le site de l'opérateur est vidée.

route_url = agency_url → vidé

Les petits détails sont aussi pris en compte

Pour les courses en ferry, le champ autorisant les vélos est correctement défini. Cela supprime un avertissement de validation présent par défaut dans de nombreux flux.

Course en ferry, bikes_allowed vide → autorisé

Des tarifs conformes à la spécification GTFS

Les champs des règles tarifaires sont vérifiés et corrigés selon la spécification GTFS avant livraison.

Champ fare_rules invalide → corrigé

Identifiants stables, tri et rapidité

Un fournisseur renumérote ses courses entre deux mises à jour, deux sources publient la même ligne avec des identifiants différents et le flux brut n'ordonne pas les courses de la journée.

Reconnaître la même ligne dans plusieurs sources

Les lignes reçoivent une empreinte calculée à partir de leur géographie réelle. Une même ligne publiée par deux sources est ainsi reconnue et n'apparaît pas en double.

2 sources, même ligne → 1 enregistrement de référence

Une identité de course stable malgré les nouveaux identifiants sources

Les courses sont reconnues par leur suite d'arrêts et leurs horaires. Une même course planifiée conserve son identité au fil des mises à jour hebdomadaires, même si le fournisseur renumérote ses identifiants.

Le trip_id du fournisseur change → notre hash reste identique

Aucune course en double

Les courses ayant la même empreinte de ligne et d'horaires sont reconnues comme identiques et fusionnées en un enregistrement de référence.

2 courses, horaires identiques → fusionnées

Des résultats dans le bon ordre

Chaque course reçoit un ordre quotidien stable pendant le traitement. Votre application et la nôtre n'ont donc pas à retrier les courses à chaque requête.

08:15, 08:02, 08:40 → positions 2, 1, 3

Une séquence d'arrêts continue

Les numérotations inhabituelles sont remplacées par une séquence continue commençant à zéro, ce qui simplifie le traitement des arrêts d'une course.

Séquence 3, 7, 12 → 0, 1, 2

Une identité d'arrêt stable entre les mises à jour

Les arrêts sont reconnus par leur nom, leurs coordonnées et leur mode de transport. Un même arrêt physique peut ainsi être suivi entre les sources et les mises à jour hebdomadaires.

Nom + coordonnées + mode de transport → hash d'arrêt stable

Des tracés adaptés et rapides à afficher

Les points de géométrie superflus sont supprimés et les distances recalculées pour réduire le volume des données. Un tracé très éloigné de la course réelle est dissocié au lieu de produire une carte trompeuse.

4 200 points de géométrie → simplifiés

Opérateurs, fuseaux horaires et requêtes

Un fuseau horaire d'opérateur incorrect ou absent peut décaler les arrivées d'une heure pour chaque voyageur, chaque jour, jusqu'à ce que l'erreur soit remarquée.

Des coordonnées de contact utilisables

Les adresses e-mail et URL invalides sont vidées. Si l'URL obligatoire de l'opérateur manque, une valeur de remplacement permet aux systèmes en aval de continuer à fonctionner.

agency_email invalide → vidé

Des langues d'opérateurs clairement définies

Une langue d'opérateur manquante est complétée à partir de la langue par défaut du pays pour fournir une base exploitable à votre localisation.

agency_lang vide → langue par défaut du pays

Des heures de départ correctes

Les fuseaux horaires invalides ou géographiquement inadaptés des opérateurs et des arrêts sont corrigés. Ils comptent parmi les principales causes d'arrivées décalées d'une heure dans les calculateurs d'itinéraires.

"GMT+1" → "Europe/Paris"

Des règles de correspondance avec des destinations valides

Les règles de correspondance qui font référence à des arrêts ou lignes inexistants sont supprimées avant de perturber la recherche d'itinéraires.

Correspondance vers un stop_id inconnu → supprimée

Connaître immédiatement les lignes desservant un arrêt

Chaque arrêt dispose d'un index précalculé de ses lignes. L'API peut le consulter directement au lieu de recalculer les relations à chaque requête.

Arrêt → [25, 73, N25] précalculé

Traitement des données en temps réel

Entrée
1 000+ GTFS-RT
Positions des véhicules, mises à jour des courses
Étape 1
Lire et valider
Décoder Protobuf
Étape 2
Filtre géographique
Rejeter les positions hors de la région
Étape 3
Harmoniser les identifiants
Associer les identifiants de lignes et d'arrêts
Étape 4
Associer les courses
Comparer plusieurs caractéristiques
Étape 5
Prévision des arrivées
Interpoler les données manquantes
Sortie
API temps réel
Positions et prévisions associées

La synchronisation GTFS-RT est l'une des tâches les plus difficiles du traitement des données de transport. Chaque fournisseur utilise ses propres identifiants, formats et conventions de nommage, à rapprocher en temps réel des horaires statiques. En complément du traitement statique, nous appliquons des règles spécifiques d'association en temps réel :

  • Vérification géographique des positions : les coordonnées hors de la zone de service sont automatiquement rejetées. Un cas réel concernait un flux londonien signalant des bus aux États-Unis.
  • Lors de la fusion de flux d'opérateurs, un même identifiant de ligne peut apparaître plusieurs fois. La priorité d'association entre ces doublons est alors explicitement conservée. Même opérateur et même ligne, 2 sources → priorité d'association conservée
  • L'association des courses ne se limite pas à la proximité horaire : si une arrivée en temps réel tombe entre deux courses planifiées, l'association utilise une fenêtre temporelle asymétrique, et non le point médian. Horaire entre 2 courses planifiées → association par fenêtre 75/25
  • Une procédure progressive recherche d'abord l'association la plus précise et n'assouplit les critères qu'en cas d'échec, au lieu d'appliquer une règle du tout ou rien. Arrêt et horaire exacts manquants → vérifier d'abord ligne et course, puis ligne et horaire
  • Si une information ne peut pas être associée de façon fiable, par exemple sans direction ni rapprochement alternatif valable, elle reste explicitement sans association : aucune supposition n'est faite. Direction manquante, aucun rapprochement alternatif → aucune association
  • Prévisions d'arrivée aux arrêts dont les données en temps réel sont tardives ou manquantes

Traitement propre à chaque pays

En complément du traitement général, nous développons des règles par pays pour prendre en compte les formats locaux, les standards de codage et les particularités des opérateurs. Elles répondent aux problèmes réels des données de chaque fournisseur.

Royaume-Uni (intégration NAPTAN) : Ajoute les noms d'arrêts, coordonnées, codes ATCO et informations sur les quais depuis la base nationale NAPTAN. Ajoute les gares principales et leurs accès. Harmonise les noms d'opérateurs à l'aide du registre National Operator Code (NOC).
Irlande : Enrichit les arrêts avec les données NAPTAN Ireland. Ajoute les entrées et sorties de gares recensées manuellement et absentes des jeux officiels.
Correction des codes d'arrêt ATCO : Corrige les codes ATCO erronés associés à des identifiants fournisseurs non conformes, qui empêcheraient le rapprochement des informations en temps réel et des positions des véhicules.
Enrichissement par Traveline : Utilise les rapports régionaux Traveline pour délimiter géographiquement les jeux qui se recoupent et améliorer l'association GTFS-RT des bus britanniques.
Règles personnalisées : Pour les clients ayant des besoins spécifiques de transformation ou de format de sortie, nous développons des règles adaptées à leur groupe de flux.

Les données qui font fonctionner BusMaps

Les mêmes données traitées alimentent la recherche d'itinéraires, les tableaux de départs et les réponses API de BusMaps. Utilisez-les via notre API ou demandez des jeux corrigés pour votre infrastructure.

1 500+
Développeurs utilisant ces données
30M+
Requêtes API par mois
2–99 ms
Temps de réponse API habituel
99,5 %
SLA de disponibilité de l'API

Des données de transport corrigées pour votre projet

Demandez du GTFS corrigé, du GeoJSON ou des exports personnalisés, ou intégrez notre API. Précisez la couverture, les formats et la fréquence d'actualisation nécessaires pour convenir de la livraison ou de l'intégration.