Journal Isochrones de transports en commun

Posté par  . Licence CC By‑SA.
Étiquettes :
53
18
juin
2023

Où aller en train ou en bus en moins de 2h ? En moins de 5h ? En moins de 10h ? C'est l'objectif de ce projet : afficher tout ça de manière jolie sur une carte. Démo et explications !

Quelques images motivantes

Isochrones de transport depuis Berne :
Isochrones depuis Bern

Zoom et affichage des stations de bus :
Isochrones depuis Bern

Joli patchwork de stations en Allemagne :
Isochrones depuis Bern

On peut aussi intégrer la carte au projet EnVadrouille que j'avais présenté il y a 5 ans et même déjà 10 ans sur ce site (ça ne nous rajeunit pas tout ça). En bleu les randonnées et tours de vélo que j'ai faits ces dernières années, en coloré les temps de transport. Tiens, faudrait que je randonne plus entre Berne et Lucerne, c'est pas loin en train !
Isochrones depuis Bern

Comment ça marche ?

Le projet se base sur plusieurs jeux de données :
- Les fichiers GTFS fournis par les différentes compagnies de train/bus. Ces fichiers contiennent les horaires.
- Openstreetmap pour retrouver le tracé des lignes de chemin de fer.
- Et enfin MapBox pour le rendu des cartes.

Grosso modo, depuis les fichiers GTFS, je calcule le temps de trajet entre une station (e.g., Neuchâtel) et le reste du monde. La base est un algorithme de plus court chemin (SSSP - single source shortest path), mais en plus compliqué parce que je dois gérer les contraintes des transports en commun—par exemple, on ne peut pas prendre un train qui part à 9h si l'on ne peut pas arriver à la station avant 10h… Il faut aussi prendre en compte les temps d'attente entre trains, le fait que l'on doive marcher entre les plateformes d'une gare (= on ne peut pas passer instantanément d'un train à l'autre, même dans une même gare !), et le fait que l'on puisse marcher entre une gare et tous les arrêts de bus proches. Bref, un joli casse-tête.

Pourquoi ne pas calculer les plus courts chemins en utilisant une API SNCF ou Bahn.de ? Parce que rien qu'en France, Suisse et Allemagne il y a plus d'un million d'arrêts de train et de bus ! (Si, si !) Autant dire que les APIs m'auraient banni bien avant d'avoir collecté toutes les infos…

Une fois les plus courts chemins déterminés, j'interroge un Openstreetmap local pour trouver le tracé des lignes de chemin de fer. Ca me donne des geojson.

On mélange tout ça, et on a des geojson enrichis de temps de trajet. Il ne reste plus qu'à afficher tout ça sur une carte et voilà !

Contribuez !

Je n'ai pas trouvé les fichiers GTFS des équivalents de TGV en Italie pour Italo. Si vous avez le jeu de données, je suis preneur ! Idem pour Trenitalia, pas sûr d'avoir les bonnes données.

Le projet GitHub explique comment générer des fonds de carte. Si vous voulez une ville en particulier, je peux aussi l'ajouter. Vous pouvez aussi tenter de faire tourner le projet. Normalement c'est bien documenté, mais ça prend un peu de temps (il faut récupérer tous les jeux de données).

  • # Pourquoi chercher les tracés ?

    Posté par  (Mastodon) . Évalué à 4.

    Je ne dis pas que cela aurait été mieux, mais je n'aurais pas fait pareil.

    Si j'ai bien compris, tu colores les tracés des lignes de chemin de fer selon le temps pour atteindre ces "points" par rapport à la gare de départ que tu as fixé.

    Moi, j'aurais eu tendance à colorer uniquement les gares et arrêts. Pourquoi ?
    1) C'est plus facile. Si je ne m'abuse, les GTFS comprennent les coordonnées des arrêts => passage par openstreetmap pour chercher les trajets n'est pas nécessaire
    2) C'est plus précis. J'imagine qu'entre deux points d'arrêt, tu es obligé d'appliquer une règle un peu approximative pour déterminer le temps de trajets jusqu'à ce "point" là (vu que les GTFS ne donnent à ma connaissance que les horaires aux arrêts et pas entre eux)
    3) C'est plus correcte. La plupart des sociétés ferroviaires et autres opérateurs de transport publics, invitent en général les voyageurs à ne pas descendre du train (bus, tram,…) avant l'arrêt complet de celui-ci (en gare). Par conséquent, les points entyre deux arrêts ne sont en fait pas accessibles tels quels. Il faut prendre un autre TC et le temps de parcours et plus long.

    Surtout, ne pas tout prendre au sérieux !

    • [^] # Re: Pourquoi chercher les tracés ?

      Posté par  . Évalué à 6.

      Pourquoi ?

      Parce que ça permet de visualiser le cheminement ?

      https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

      • [^] # Re: Pourquoi chercher les tracés ?

        Posté par  . Évalué à 2.

        Ce qu'on obtient aussi avec le tracé des lignes en gris clair et les points d'arrêt en couleur.

        Ça, ce sont les sources. Le mouton que tu veux est dedans.

        • [^] # Re: Pourquoi chercher les tracés ?

          Posté par  . Évalué à 2.

          Le gris est déjà utilisé sur la carte, il faut utiliser ni le gris ni une couleur du dégradé choisi. Je suis pas sûr de la lisibilité finale.

          https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

    • [^] # Re: Pourquoi chercher les tracés ?

      Posté par  . Évalué à 8.

      L'idée c'est de voir vite où aller en approximativement moins de X heures. En colorant juste les gares c'est beaucoup moins visuel (c'est aussi ce que je faisais avant). L'objectif n'est pas vraiment d'être précis, mais d'avoir un joli fond de carte pour éveiller l'inspiration et trouver de nouvelles idées de randonnées. :)

      Après, tu peux adapter le code à tes besoins, tout est sur GitHub. Il suffit d'enlever le layer des rails et c'est ce que tu décris. Qui peut le plus peut le moins ? ;)

      • [^] # Re: Pourquoi chercher les tracés ?

        Posté par  (Mastodon) . Évalué à 2.

        En fait, dans mon équipe (vu qu'on utilise parfois ce genre de représentation)

        • soit on représente les gares avec des "gros" disques de manière à les rendre plus visibles
        • soit, plus fréquemment, on représente une diffusion à partir des arrêt. On simplifie souvent en supposant une diffusion à vol d'oiseau ce qui n'est pas super pour la précision mais comme implicitement c'est de la marche à pied (oui, oui, j'ai vu la contradiction avec le vol d'oiseau ;-)) donc plutôt lent, la perte de précision n'est pas énorme.

        Surtout, ne pas tout prendre au sérieux !

      • [^] # Re: Pourquoi chercher les tracés ?

        Posté par  . Évalué à 1.

        Si c'est facile à mettre en œuvre, pourquoi ne pas inclure une option dans l'interface pour passer d'un mode à l'autre ?

  • # Villes à l'extrémité

    Posté par  (site web personnel) . Évalué à 6.

    Si tu as le temps, ça pourrait être sympa d'avoir les villes aux "extrémités" de la France:
    - Quimper (semble plus loin en temps de Paris que Brest)
    - Bayonne
    - Perpignan
    - Nice
    - Dunkerque
    - Cherbourg

    S'il y a un problème, il y a une solution; s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

    • [^] # Re: Villes à l'extrémité

      Posté par  . Évalué à 10.

      Quimper (semble plus loin en temps de Paris que Brest)

      Ça je peux déjà te répondre : non, la durée minimum d'un Paris-Brest est à peu près la même qu'un Paris-Quimper, 3h30.

      Le Paris-Quimper est néanmoins plus difficile à trouver en pâtisserie.

    • [^] # Re: Villes à l'extrémité

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      Bayonne à l'extrêmité de la France? Alors qu'on peut, en partant de Bayonne, prendre un train pour Irun ou St Jean Pied de Port, qui sont encore plus loin?

    • [^] # Re: Villes à l'extrémité

      Posté par  . Évalué à 2.

      C'est ajouté ;)

  • # Belgique

    Posté par  (site web personnel) . Évalué à 3.

    Merci pour ce projet et ce journal. C'est super intéressant.
    Si ça t'intéresse, les données semblent disponibles pour la Belgique. J'essayerai de jeter un coup d’œil pour voir si c'est possible de générer les données avec tes scripts.

    https://hello.irail.be/gtfs/

  • # Il existe un site équivalent

    Posté par  (site web personnel) . Évalué à 7.

    J'ai déjà vu ce genre de choses, présentées un peu différemment évidemment mais qui semble couvrir une bonne aprtie de l'Europe : https://www.chronotrains.com/fr/station/2795011-Ixelles/1

    • [^] # Re: Il existe un site équivalent

      Posté par  . Évalué à 3.

      Oui, chronotrains est top ! Malheureusement, le site ne montre que les stations de train principales et là où j'habite on a souvent besoin de prendre train + bus… Petit choix entre vouloir un truc précis depuis sa propre ville (ce que je voulais) et avoir des isochrones pour toute l'Europe :)

      Juste à titre de comparaison, 1h depuis Grenoble :
      Titre de l'image
      Titre de l'image

      2h depuis Neuchâtel :
      Titre de l'image
      Titre de l'image

      L'idéal serait de réussir à avoir toutes les infos pour toutes les stations d'Europe, mais il va y avoir un petit problème de stockage…

      • [^] # Re: Il existe un site équivalent

        Posté par  (Mastodon) . Évalué à 4.

        Oui en Suisse il faut prendre en compte à minima les cars postaux[1] sinon ça ne sert à rien. On pourrait aussi imaginer étendre la distance via des calculs de parcours multimodaux (avec un vélo comme extension par exemple).

        [1] j'ai d'ailleurs été étonné de voir il y a quelques années qu'une municipalité du sud de la France utilisait un service opéré par les cars postaux Suisse, ce n'était sans doute pas la seule. Je ne sais pas si c'est toujours le cas.

  • # Autres implémentations open source

    Posté par  . Évalué à 2.

    Il y a quelques années, quand je travaillais dans "l'informatique géographique", j'avais utilisé ces 2 outils pour calculer des isochrones:
    - https://docs.opentripplanner.org/en/v2.3.0/sandbox/TravelTime/?h=isoc#isochrone-api
    - https://github.com/graphhopper/graphhopper#isochrone-web-api

    Les 2 prennent du GTFS en entrée si je ne me trompes pas.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.