Outil gratuit

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

Le problème

🧭 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.

L'idée

📦 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.

Caractéristiques

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.

Comment ça marche

⚙️ Trois étapes

  1. À l’avance, compilez une région .osm.pbf dans un fichier compact .graph.
  2. Expédiez ce fichier : regroupez-le avec l'application ou placez-le derrière un CDN.
  3. Sur l'appareil, chargez ce fichier et exécutez des requêtes localement. Vous récupérez les coordonnées et la distance.
Essayez-le

⌨️ 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.