RoughRoute — waypoints entrants, un véritable itinéraire routier sortant
Un mini-routeur hors ligne construit sur les données OpenStreetMap. Donnez-lui des points de cheminement ordonnés et il renvoie une polyligne qui suit de vraies routes – sans appels réseau au moment de l'exécution, en millisecondes à un chiffre.
Gratuit et open source · Rust · MIT License
🧭 Une ligne droite n'est pas une route
Tout ce qui simule un mouvement (un outil de lecture mock-GPS, une démo, une animation de carte) nécessite un chemin qui semble avoir été parcouru, et non une ligne droite traversant des bâtiments. Les moteurs de routage complet résolvent ce problème, mais ils sont lourds et la plupart d'entre eux s'attendent à un serveur à l'autre extrémité d'un appel réseau.
📦 Assez petit pour être intégré
RoughRoute fait une chose : des waypoints entrants, une ligne plausible de suivi de route. La carte est compilée à l'avance dans un fichier de carte compact fourni avec votre application. Ainsi, au moment de l'exécution, il n'y a pas de serveur, pas de clé API et rien pour vous limiter le débit.
Ce que ça fait
📴 Aucun réseau au moment de l'exécution
Les requêtes sont exécutées sur un fichier de carte prédéfini sur l'appareil. Fonctionne dans un avion, dans un tunnel ou en CI avec le réseau éteint.
🧩 Un noyau, trois coques
Le même noyau Rust se compile en WebAssembly pour le navigateur, une bibliothèque native Android via UniFFI et un binaire de ligne de commande.
⚡ Requêtes en millisecondes à un chiffre
A* sur un réseau routier compressé. Assez rapide pour router sur chaque image d'une lecture, pas seulement une fois au début.
🗜 Fichiers cartographiques mesurés en mégaoctets
L'effondrement de degré 2 et la géométrie compressée delta maintiennent une région utilisable suffisamment petite pour être groupée ou servie à partir d'un CDN.
🚗 Conduire et marcher
Un fichier de carte transporte les deux profils via des masques de bits d'accès, de sorte que vous ne construisez pas et n'expédiez pas la région deux fois.
🔁 Même entrée, mêmes octets
Le routage est déterministe : les mêmes waypoints et le même fichier cartographique produisent toujours la même ligne. Bonne nouvelle pour les tests qui comparent les résultats.
⚙️ Trois étapes
- À l’avance, compilez une région .osm.pbf dans un fichier compact .graph.
- Expédiez ce fichier : regroupez-le avec l'application ou placez-le derrière un CDN.
- Sur l'appareil, chargez ce fichier et exécutez des requêtes localement. Vous récupérez les coordonnées et la distance.
⌨️ Depuis la ligne de commande
roughroute build region.osm.pbf -o region.graph
roughroute route region.graph \
--profile car \
--via 40.7128,-74.0060 \
--via 40.7580,-73.9855 \
--format geojson
Ou depuis le navigateur, via WebAssembly :
const router = new WasmRouter(graphBytes);
const { coords, distance } = router.route(waypoints, "car");
⚖️ Ce qu'il ne fait délibérément pas
RoughRoute échange la précision contre la taille et la vitesse. Il ignore les rues à sens unique, les restrictions de virage et les coûts basés sur la vitesse, et s'il ne trouve pas de chemin, il renvoie un segment droit plutôt que de refuser. C’est le bon compromis pour la lecture, les démos et les solutions de secours hors ligne – et le mauvais pour la navigation étape par étape, où vous souhaitez un moteur de routage complet.
Licence sous MIT. Les données cartographiques proviennent de OpenStreetMap contributeurs, sous licence ODbL.