laem / cartes

L'appli Web de cartes grand public
https://cartes.app
GNU Affero General Public License v3.0
104 stars 13 forks source link

À propos de notre algo de construction du plan de l'offre SNCF #295

Open laem opened 1 month ago

laem commented 1 month ago

Je bosse sur une carte interactive des réseaux de transport en commun français et je m'attaque au plus haut niveau : la SNCF (agencyID 1187 pour les intimes :D).

Ma problématique :

Les cartes topographiques sont intéressantes pour étudier le réseau ferré, mais moins pour voyager : on peut voir une ligne tracée alors qu'elle est inactive, ou active que 2 mois dans l'année, ou active le matin, etc. Donc elles sont plus adaptées aux ferrovipathes. Les cartes éditorialisées ne montrent que les lignes actives, voir seulement les lignes super actives (TGV, ouigo), mais rien de cliquable, rien d'automatisable.

J'aimerais donc proposer une carte interactive basée sur les voyages disponibles, donc basée sur les GTFS publiés sur TDGV cc @antoine.augusti. Sauf que la SNCF ne publie pas les shapes.txt. Donc on sait qu'il y a un Paris -> Lyon -> Marseille, mais pas où il passe précisément (sans s'arrêter), ce qui provoque sur la carte des lignes partout qui nuisent à la lisibilité.

cf capture 1.

J'ai testé le paquet Pfaedle pour déduire les shapes.txt à partir de france-latest.osm.bz2 mais c'est hyper lent au point que j'ai arrêté. Une piste serait de prendre les tracés de rail publiés par la SNCF sur son portail open data, mais en plus de la complexité du mapping geojson => shapes GTFS, j'ai surtout conclu que pour le voyageur, les détours précis que font les rails sur le territoire sont peu intéressants voir illisibles. Mieux vaut une carte symbolique ou la maille la plus basse est une droite (ou une courbe symbolique) entre les deux gares reliées les plus proches.

Je me suis donc lancé dans un algo de "développement" des liaisons directes qui va déduire des autres routes que le Paris->Lyon->Marseille passe en fait par Valence, Avignon, etc. (exemple fictif).

C'est assez simple : un couple de gares A->D sur une route directe, s'il existe une autre route contenant A -> B -> C -> D, on va remplacer sa forme géométrique pour passer par ces gares qui représentent la ligne de train plus réelle, et donc éviter des arcs qui traversent de vaste région à côté de la ligne de train principale.

C'est pas parfait mais ça clarifie la carte déjà beaucoup, cf capture 2, tout en gardant l'information des routes pour les afficher d'une autre façon quand l'utilisateur interagit. On peut observer les lignes de train de nuit qui sont les seules à partir d'Austerlitz donc l'algo n'a pas d'autres routes pour déduire le trajet réel. Je vais peut-être lui adjoindre un coup de pouce à la main en lui disant que sur la LGV sud-est il y a Macon et Le Creusot, et nettoyer un peu la région Paris->Grand-est. L'avantage, c'est que ça permet aussi de générer des shapes un peu moins basiques pour n'importe quel réseau GTFS sans shapes, ou en proposer une vue symbolique plutôt que géographique.

Ensuite, différencier visuellement (et au zoom) les types de train : TER, Intercités, de nuit, TGV Inoui, Ouigo. Et peut-être courber artificiellement un peu tout ça pour rendre le rendu moins rude.

Voilà, si vous avez d'autres idées, d'autres cartes de voyage que j'aurais loupées n'hésitez pas :)

image

image