Refonte de la carte Suisse de Mapnificent : jusqu'où aller en transports publics en un temps donné, depuis ou vers un ou plusieurs points.
Ce que fait la page
- Courbes par tranches de 5, 10, 15 ou 30 minutes, avec surface cumulée en km².
- Deux sens : au départ des points ou pour y arriver.
- Jusqu'à cinq points, combinés de quatre façons : le plus proche (couverture d'un réseau de sites), tous à la fois (où se réunir), moyenne, A contre B (lequel de deux lieux est le plus accessible, et de combien).
- Points de rendez-vous : les arrêts qui minimisent le trajet le plus long du groupe.
- Trajet détaillé jusqu'au point touché, avec lignes et arrêts réels, tracé sur la carte.
- Six créneaux : mardi matin, midi, fin de journée et soir ; samedi ; dimanche.
- Lien partageable (points, réglages, vue) et export GeoJSON des courbes.
Données en ligne
Horaire officiel 2026 (GTFS gtfs_fp2026_20260930.zip, opentransportdata.swiss), valable du 14.12.2025 au 12.12.2026. Semaine de référence : 2 au 8 novembre 2026. Environ 30 000 arrêts dans un cadre autour de la Suisse.
La page affiche en pied de panneau un avertissement dès que la date de fin de validité est passée.
Mise à jour au changement d'horaire (décembre)
Le nouvel horaire entre en vigueur le 13.12.2026. Pour mettre la carte à jour :
-
Télécharger le GTFS de l'horaire 2027 sur opendata.swiss : jeu « Timetable 2027 (GTFS2020) », fichier
gtfs_fp2027_AAAAMMJJ.zip, le plus récent (environ 300 Mo). -
Le donner à Claude avec la consigne « mets à jour les isochrones avec ce GTFS ». Claude lance, depuis la racine du clone :
python3 -I tools/isochrones/depuis_gtfs.py gtfs_fp2027_….zip \ public/perso/voyages/isochrones-suisse/data --horaire 2027Le calcul prend environ deux minutes et demande Python 3 et numpy.
-
Envoyer avec GitHub Desktop.
Le script fait seul le reste :
- il choisit une semaine de référence ordinaire, au moins deux semaines après le début de l'horaire et hors vacances scolaires ;
- il écrit le réseau sous un nom qui porte son empreinte (
reseau-<empreinte>.bin) et met à jourdata/reseau.json, que la page lit à chaque visite : aucun numéro de version à monter, aucun cache à vider ; - il retire l'ancien
reseau-*.bindu dossier ; l'envoi l'efface aussi en ligne.
Pour imposer une semaine : --date AAAAMMJJ (un lundi).
Méthode
Modèle par fréquences : pour chaque créneau, on compte les passages réels de chaque ligne à chaque arrêt, le jour de référence. L'attente à une correspondance vaut la moitié de l'intervalle (réglable), plus un temps de correspondance ; les variantes d'une même ligne qui partent dans la même direction sont additionnées. Le calcul est un plus court chemin exact (Dijkstra) sur les états « à pied à l'arrêt » et « à bord ». Marche en ligne droite majorée de 20 %, correspondances à pied jusqu'à 400 m. Tout tourne dans le navigateur ; seuls le fond de carte, la recherche d'adresses et le nom des arrêts sur la carte viennent de geo.admin.ch.
Limite connue : un même train peut figurer sous deux libellés (IC et IC1) ; ils sont comptés comme deux lignes.
Fichiers
| Fichier | Rôle |
|---|---|
index.html, app.css, app.js |
interface |
worker.js |
calcul en arrière-plan : temps, grille, courbes, rendez-vous |
moteur.js |
lecture du réseau et plus courts chemins (aussi utilisable sous Node) |
data/reseau.json |
manifeste : désigne le réseau courant et sa validité |
data/reseau-<empreinte>.bin |
réseau au format ISO1 (décrit dans tools/isochrones/reseau_format.py) |
Générateurs dans tools/isochrones/ : depuis_gtfs.py (horaire officiel), depuis_mapnificent.py (ancien réseau 2017 de Mapnificent, pour mémoire).
Bibliothèques : Leaflet 1.9.4, d3-contour 4.0.2 et d3-array 3.2.4, servies depuis /assets/vendor/.