Optimiseur de trajets routiers multicritère pour la France, auto-hébergeable et sans API commerciale obligatoire.
Le projet compare plusieurs itinéraires selon :
Le profil initial correspond à une Renault Twingo 2 essence :
Fonctionnel :
Encore incomplet :
Le fichier CHATGPT_CONTEXT.md contient l’état exact du projet pour reprendre le développement dans une nouvelle conversation.
La cible publique est Détour, distribuée pour Windows, Linux et macOS. L’installateur restera léger : au premier lancement, l’application téléchargera une seule fois le pack de données France depuis GitHub Releases, le vérifiera par SHA-256 puis le conservera sur l’ordinateur.
Les outils préparés dans cette version sont :
./.venv/bin/python scripts/build_data_release.py --version 1
bash scripts/publish_data_release.sh dist/data-release/data-france-v1
./.venv/bin/python scripts/install_release_data.py \
https://github.com/Alexis-Tissier/routeco/releases/download/data-france-v1/detour-data-france-v1.json
Le pack peut être fractionné automatiquement en fichiers de 1 900 Mio maximum, compatibles avec la limite par fichier de GitHub Releases.
La page publique est préparée dans site/ pour :
https://detour.alexis-tissier.fr.
Voir docs/distribution/DESKTOP.md.
Python 3.11+ et Java 17+ sont requis.
python3 -m venv .venv
./.venv/bin/python -m pip install -U pip
./.venv/bin/python -m pip install -e '.[dev]'
GraphHopper et les données France sont volontairement exclus du dépôt Git :
GRAPHHOPPER_RAM=8g ./scripts/setup_graphhopper.sh
Le premier import construit le graphe local et peut prendre plusieurs minutes.
./scripts/routeco.sh start
Puis ouvrir :
http://127.0.0.1:8000
Commandes utiles :
./scripts/routeco.sh status
./scripts/routeco.sh logs
./scripts/routeco.sh restart-app
./scripts/routeco.sh restart
./scripts/routeco.sh verify-geocoding
./scripts/routeco.sh verify-diversity
./scripts/routeco.sh verify-cache
./scripts/routeco.sh doctor
./scripts/routeco.sh stop
Copier l’exemple :
cp .env.example .env
Exemple pour placer la BAN sur un autre disque :
ROUTECO_BAN_DB=/chemin/vers/routeco-data/ban/ban.sqlite
L’index des communes est créé automatiquement au premier démarrage à partir de l’API Découpage administratif officielle. Il peut être actualisé manuellement :
./scripts/routeco.sh update-communes
Il est indépendant de la BAN : une commune comme Versailles reste donc
disponible même si son département n’a pas été importé dans ban.sqlite.
Les données lourdes restent hors Git :
data/france-latest.osm.pbf ;data/graph-cache/ ;data/ban.sqlite ou une BAN externe ;data/communes.sqlite ;data/graphhopper-web-*.jar ;Les petites matrices normalisées de data/tolls/*.csv sont versionnées afin qu’une nouvelle conversation puisse analyser le moteur sans télécharger les données lourdes.
./.venv/bin/python -m pytest -q
La version 0.4.5 contient 191 tests automatiques.
Une GitHub Action exécute également les tests à chaque push et pull request.
Le guide docs/deployment/VPS.md décrit la cible
personnelle 2 OCPU / 12 Gio, les limites de concurrence et les services
systemd proposés.
GraphHopper doit tourner :
./scripts/routeco.sh validate
./scripts/routeco.sh validate-random 50
./scripts/routeco.sh validate-gold
Les rapports locaux sont créés dans data/reports/ et ignorés par Git. Le dernier rapport utile a été copié dans docs/validation/ pour conserver l’historique de travail.
Navigateur
├── interface de comparaison
├── détail carburant / péages
└── carte OpenStreetMap interactive + liens GPS
↓
FastAPI
├── index national des communes
├── BAN SQLite pour les adresses détaillées
├── modèle de consommation
├── sélection multicritère
└── appariement des péages
↓
GraphHopper local + OpenStreetMap France
Les villes de validation servent uniquement de tests. Le moteur ne doit jamais contenir de correction du type « si départ = Paris et arrivée = Lyon ».
Toute correction doit reposer sur des propriétés générales : géométrie du tracé, ordre des gares, réseau concessionnaire, sections payantes, matrices tarifaires et confiance du résultat.
./.venv/bin/python scripts/prepare_data_release.py \
--version 1 \
--output dist/data-release \
--publish
La release de données est fractionnée sous 2 Gio par fichier, vérifiée localement et publiée sans devenir la « dernière version » de l’application.