Gares et Lignes SNCF

Lignes et Gares (France) : en service, fermées ou déclassées


1. Introduction

Ce travail, encore en cours (réalisé à 80%), a pour ambition de présenter l'évolution du paysage ferroviaire français. Il est réalisé à partir de sources de données publiques et de multiples données ouvertes (Wikipedia, données volontaires ...).

Le résultat actuel recense et localise plus de 10000 gares (ou simples "haltes" ou "arrêts facultatifs") et plus de 1500 lignes, soit plus du double de données supplémentaires par rapport aux données publiques. Il en reste probablement 15-20% à collecter et géo-localiser.

Le format cible est du type GeoJson classique. Les formats des sources sont variés : fichiers tabulés (type Excel), séries de coordonnées à la mode OpenStreetMap, etc. Ce qui a nécessité le développement de plusieurs outils informatiques, de complexités variées. du simple transcodage, à la recherche en cascade de pages hypertextes contenant les informations de localisation. Mais aussi beaucoup de temps de vérification "visuelle" (et "manuelle") de coordonnées


2. Le résultat (état évolutif)

lien vers la cartographie du réseau ferroviaire
Notez que le premier appel peut être un peu long (20-30 sec.) car de gros fichiers sont mis en "cache",
les consultations suivantes seront beaucoup plus rapides.

reseau actif
Réseau actif en 2019
reseau historique
Réseau historique reconstitué (juillet 2020)

3. Les sources utilisées

Certaines sources sont accessibles par programme (API), par exemple celles de la SNCF ou de l'Insee, certaines contiennent des informations qu'on peut extraire à partir du code HTML (eg. les tables) ou de fichiers texte (eg. pdf), d'autres sources sont simplement "observables" visuellement (eg. anciennes photographies aériennes IGN),
toutes sont inestimables.

SNCF : informations sur les gares et les lignes encore sous le contrôle de la SNCF.

Les fichiers énumèrent près de 6500 gares et plus de 1700 tronçons de lignes.

exemple 1:
dépôt sur "data.gouv.fr"
exemple 2:
gares SNCF de Lorraine
exemple 3:
sncf-reseau
Insee : limites communales (polygone), historique des fusions de communes ....

Le polygone des limites communales permet de savoir si un point géographique est sur le territoire de cette commune. L'historique des créations, fusions, permet de suivre une évolution éventuelle avec la date d'une autre source de données.

IGN : remonterletemps.ign.fr (carto et photos aériennes de l'après-guerre à nos jours)

le site "remonterletemps.ign.fr" ... comme son nom l'indique, donne accès à des informations géographiques historiques (plus particulièrement pour les années 1947-1960) et permet la comparaison visuelle avec les données récentes (années 2000-2018).
Exemple : nous avons choisi la gare des Trillers, car la plus proche (probablement) du centre de la France métropolitaine.

carto actuelle:
carte IGN
carto 1957:
scan IGN1950
aérien actuel:
images 2016
Wikipedia : des milliers de pages semi-structurées, de Gares et de Lignes.
Les informations, souvent très complètes, permettent de lier gares et lignes, mais aussi autoroutes et cours d'eau (ponts), tunnels etc.
Elles ont l'avantage d'être "semi-structurées" selon une sémantique en partie normalisée, notamment pour les coordonnées du point géographique associé (s'il existe) et pour les "InfoBox" des Lignes.
Exemple: la page de la Gare des Trillers dit qu'elle "est située au point kilométrique (PK) 318 de la ligne de Bourges à Miécaze, ce qui conduit à examiner la page cette ligne, où on apprend qu'elle porte le numéro officiel "695 000", ...
et, de ligne en ligne, la suite est fort longue d'arète en arète, ou d'arète en noeud, dans ce graphe (pas tout à fait planaire, par exemple à cause des LGV).
page Gare:
Gare des Trillers
page Ligne:
ligne de Bourges à Miécaze
InfoBox:
de cette ligne
En sus de ces informations semi-structurées, on trouve de nombreuses pages sur l'histoire des lignes ferroviaires comme Liste_des_chemins_de_fer_à_voie_métrique_de_France, ... plus difficiles à décoder par logiciel mais qui nous informent sur l'existence de centaines de gares encore à repertorier.
Données participatives volontaires ("crowdsourcing") : personnelles ou collaboratives.

Nombreux sites, personnels ou collaboratifs (de type "wiki"), alimentés par des amoureux du rail ou du patrimoine des transports en général : voici les principaux sites déjà utilisés.

routes (@fandom)
chemins de traverses (@free)
lignes-oubliées.com
spécialiste v.f. des Landes (@e-monsite)
rd-rail.fr le site de Reinhard Douté
open RailwayMap
openrailwaymap

etc.... Cette liste est évolutive, sera enrichie en fonction des nouvelles découvertes, ou selon vos signalements

passages frontaliers : sources des compagnies des pays voisins.

les liaisons ferroviaires frontalières ont été complétées à partir des sites des réseaux ferroviaires voisins : SNCB, CFL, DB_Nerz ...


4. Fusion des sources

L'objectif est de créer un ensemble de jeux de données (fichiers GeoJson) contenant des informations permettant la cartographie (coordonnées), mais aussi l'analyse conjuguée des données gares et lignes entre elles ou avec des données administratives (eg. département), ou sociales (eg. population concernée) issues de recensements, etc.

Pour fusionner deux sources d'information semblables on doit trouver un identifiant commun (une "clé primaire" au sens SGBD systèmes de gestion de bases de données). Pour une gare il peut s'agir du nom "officiel" ou du code UIC (union internationale des chemins de fer). Pour une ligne, le couple de gares origine-terminus, ou le numéro "officiel" peuvent être une clé.
Pour fusionner deux sources d'information différentes (gares / lignes / communes) il faut qu'au moins une des sources possède aussi la clé d'une autre source (une "clé externe").

Dans le cas idéal, on devrait pouvoir reconstituer le schéma suivant, classique des SGBD :

Schéma relationel "idéal".

Mais il faut transiger avec la réalité des données telles qu'on les rencontre : incomplètes, de qualité incertaine, ...
Heureusement, les coordonnées géographiques peuvent jouer un rôle semblable à une clé, à condition de vérifier certaines contraintes géométriques (eg. intersections points -lignes - polygones). Un inconvénient est que ces calculs sont plus coûteux qu'une simple comparaison de clé et sont plus sensibles à des erreurs. Examinons quelques cas :

clé de gare : code UIC (Union Internationale Cheminsde fer), ou libellé
le code UIC est unique, mais il n'est présent que dans les sources SNCF, l'identification se fait souvent par le libellé (toponyme). Un problème est la non-unicité (eg. Saint-Prix est une commune dans six départements !), les artifices pour distinguer les libellés ne sont pas normalisés (eg. Laroche - Migennes ou Laroche-Migennes, Paris-Nord ou Paris Gare du Nord), les orthographes peuvent varier (eg. accents) etc.
clé de ligne : numéro officiel, ou couple origine - terminus (libellés de gares)
le "numéro officiel" est plus largement répandu, a condition d'être cité, ou même simplement attribué. Les lignes qui n'ont jamais été gérées par la SNCF n'en possèdent pas. Il faut leur attribuer de nouveaux codes, arbitrairement mais sans créer de conflit avec l'existant. Le couple [origine, terminus] est pertinent, mais soulève les problèmes des libellés de gares, vus précédemment. Exemple : le Chemin de fer de Dompierre à Lapalisse démarre à la gare de "Dompierre-Sept-Fons" et se termine à celle de "Lapalisse-Saint-Prix", entièrement dans le département de l'Allier. La gare qui a pour libellé "Dompierre" est située dans le département du Nord.
clé de commune : code Isee, ou nom toponymique
le "code commune" unique est attribué par l'Insee. mais il est rarement présent dans d'autres sources (le code postal est plus fréquent). Il faut souvent le retrouver à partir du toponyme, ou des coordonnées géographiques et dans les deux cas il peut y avoir des erreurs et pour un nombre non négligeable de cas, il peut avoir changé si les dates de création des sources différents de quelques années.
dates : dates "réelles" (eg. ouverture d'une ligne), ou dates de mise à jour d'un fichier.
les dates sont importantes. Celles des créations des sources, afin que les informations précédentes puissent être fusionnées (cas des changements de noms de communes), mais aussi les dates des informations elles-mêmes, pour analyser correctement l'état du réseau ferroviaire à une période donnée (aujourd'hui, il y a 20 ans, durant la IVème République, etc.). Hélas, elles sont rarement présentes sous une forme normalisée (eg. InfoBox des lignes dans wikipédia, quelques "crowdsources"), souvent imprécises ou même carrément absentes. Par exemple : le fichier des gares SNCF indique sa date de dernière mise à jour, mais les toponymes présent peuvent indiquer des communes qui ont été modifiées entre temps. En France, il devient difficile de savoir combien il y a de communes pour une date donnée.

Développer les outils permettant de manipuler les clés citées ci-dessus, ou leurs équivalents les plus proches, relève du "génie des données" ("data engineering"), qui dépasse largement le champ des SGBD. Mais il constitue la première étape indispensable dans la réalisation du projet.


5. Les outils développés

Données (quasi-) idéales : vérification de contraintes et jointures de tables.

Certaines données des sources précédentes, sont explicitement géocodées et identifiées avec une clé unique, dans ce cas elles sont directement utilisables. Une simple transformation de format sera appliquée afin de normaliser leur structure dans l'attente d'attributs complémentaires issus d'autres sources. Les trois principales fonctions sont :
(1) renommer les propriétés de manière harmonisée,
(2) s'assurer que les types sont identiques (identifiants parfois numériques, ou avec lettres),
(3) s'assurer de l'unicité de la clé (sauf équipements distincts d'une même gare sur plusieurs lignes).
Dans ce cas très favorable, la "jointure" (SGBD) permet de relier deux sources quelconques.

En cartographie, on aime bien les graphes planaires qui permettent des calculs simples (eg. plus court chemin, ...). Pour représenter correctement un graphe dont les noeuds sont les gares et dont les arêtes sont des tronçons de lignes, il faut s'assurer que
(4) chaque arête est identifiée par un noeud début et un noeud fin. Donc une gare de correspondance doit apparaitre sur chacune de ses lignes : vérifier ou dupliquer. S'il s'agit d'une simple bifurcation, ce noeud doit (devrait) aussi figurer sur chaque ligne.
(5) les intersections géométriques d'arêtes correspondent à des noeuds : vérifier et corriger éventuellement. Seule exception : certaines intersections ne sont pas des "croisements", mais des superpositions (passages supérieurs/inférieurs en troisième dimension). Identifier ces superpositions permettrait de les isoler et d'obtenir un graphe mineur planaire à une échelle plus locale (par exemple en retirant les lignes LGV).

Données de mauvaise qualité ou absentes : fusion semi-automatique seulement.

Pour les nombreuses informations qui n'offrent que des clés incomplètes ou incertainnes, et pour celles qui ne sont qu'indirectement localisées (toponymes, codes de lignes SNCF ...), on parle de fusion des données, vue alors comme une généralisation des "jointures" (SGBD).
Dans le royaume des données (la "data science" en général) on découvre vite que le diable est dans les détails, ou selon un idiome plus proche du sujet : un grain de sable peut faire dérailler le train.

L'intelligence artificielle (dans sa version apprentissage profond) n'est pas bien armée pour entrer dans les détails, car la création de corpus d'apprentissage est difficile dans les cas évoqués, qui sont -heureusement- des exceptions, mais -malheureusement- très diverses.
La seule solution est de multiplier les jointures partielles entre des données de sources différentes afin de compléter l'information recherchée "de proche en proche". La difficulté n'est pas d'ordre mathématique, mais dans la mise en oeuvre d'un grand nombre de requêtes, asynchrones, dont certaines n'aboutiront pas.

Au stade actuel de ce projet, on ne peut parler que de traitement semi-automatique. Une phase terminale de validation "humaine" est souvent indispensable (environ 30% des cas) à propos de la partie manquante (ou jugée trop incertaine) de l'information : souvent la localisation précise et la date cherchée (eg. date de fermeture d'une ligne).

(1) comparaison des informations sur les gares issues des deux sources :

L'espoir était que la réunion des gares issues des deux fichiers permette d'augmenter le nombre total de gares et de compléter l'information manquante (notamment les coordonnées géographiques). Les difficultés principales sont venues des différences d'écriture des libellés de gares : accents, positionnement des traits d'union, noms simples ou composés, adjectifs non partagés (ex. nom du département), etc. Les tentatives automatiques (distance de Hamming ou plus complexe) n'ont résolu qu'un faible pourcentage de cas. Trop de cas particuliers.

(2) recherche de la liste des gares d'une ligne :

  • nom de ligne connu : recherche InfoBox de la page wikipedia (redirections à prévoir)
  • recherche à partir d'une gare connue : recherche d'une page wikipedia éventuelle

(3) recherche des coordonnées :

  • gare déjà présente sur une autre ligne : jointure
  • gare nouvelle : "remonter le temps" positionné sur libellé

(4) vérifications :

  • ordre correct des points kilométriques dans la ligne
  • correspondance coordonnées de gares et polygone de la commune qui les contient

Travaux pratiques : code JavaScript

Exercice 1: (facile) vérifier si la gare la plus proche du "centre (IGN)" de la France est bien celle des Trillers.

Exercice 2: (facile) comparer le centre du nuage des gares avec le centre de la France (situé en Bocage bourbonnais), mesurer le décalage. Idem avec gares en activité versus toutes gares.

Exercice 3: (moins facile) compter combien d'arêtes rendent le graphe du réseau ferré français non planaire.