RoughRoute – Wegpunkte rein, eine echte Straßenroute raus
Ein Offline-Mini-Router, der auf OpenStreetMap-Daten basiert. Geben Sie ihm geordnete Wegpunkte und es gibt eine Polylinie zurück, die echten Straßen folgt – ohne Netzwerkaufrufe zur Laufzeit, in einstelligen Millisekunden.
Kostenlos und Open Source · Rust · MIT License
🧭 Eine gerade Linie ist keine Straße
Alles, was Bewegung simuliert – ein mock-GPS Wiedergabetool, eine Demo, eine Kartenanimation – benötigt einen Pfad, der aussieht, als wäre er gefahren, und keine gerade Linie durch Gebäude. Vollständige Routing-Engines lösen dieses Problem, aber sie sind umfangreich und die meisten erwarten einen Server am anderen Ende eines Netzwerkanrufs.
📦 Klein genug zum Einbetten
RoughRoute macht eines: Wegpunkte rein, eine plausible Straße, die der Straße folgt, raus. Die Karte wird vorab in einer kompakten Kartendatei kompiliert, die mit Ihrer App ausgeliefert wird. Zur Laufzeit gibt es also keinen Server, keinen API-Schlüssel und nichts, was Ihre Geschwindigkeit begrenzen könnte.
Was es bewirkt
📴 Kein Netzwerk zur Laufzeit
Abfragen werden für eine vorgefertigte Kartendatei auf dem Gerät ausgeführt. Funktioniert im Flugzeug, in einem Tunnel oder in CI bei ausgeschaltetem Netzwerk.
🧩 Ein Kern, drei Schalen
Derselbe Rust-Kern wird zu WebAssembly für den Browser, einer nativen Android-Bibliothek über UniFFI und einer Befehlszeilen-Binärdatei kompiliert.
⚡ Abfragen im einstelligen Millisekundenbereich
A* über ein komprimiertes Straßennetz. Schnell genug, um bei jedem Frame einer Wiedergabe weiterzuleiten, nicht nur einmal am Anfang.
🗜 Kartendateien werden in Megabyte gemessen
Grad-2-Kollaps und deltakomprimierte Geometrie halten einen nutzbaren Bereich klein genug, um ihn von einem CDN zu bündeln oder zu bedienen.
🚗 Fahren und Gehen
Eine Kartendatei überträgt beide Profile über Zugriffsbitmasken, sodass Sie die Region nicht zweimal erstellen und versenden.
🔁 Gleiche Eingabe, gleiche Bytes
Das Routing ist deterministisch: Dieselben Wegpunkte und dieselbe Kartendatei erzeugen immer dieselbe Linie. Gute Nachrichten für Tests, die die Ausgabe vergleichen.
⚙️ Drei Schritte
- Kompilieren Sie vorab eine .osm.pbf-Region in eine kompakte .graph-Datei.
- Versenden Sie diese Datei – bündeln Sie sie mit der App oder legen Sie sie hinter ein CDN.
- Laden Sie diese Datei auf dem Gerät und führen Sie Abfragen lokal aus. Sie erhalten die Koordinaten und die Entfernung zurück.
⌨️ Über die Befehlszeile
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
Oder im Browser über WebAssembly:
const router = new WasmRouter(graphBytes);
const { coords, distance } = router.route(waypoints, "car");
⚖️ Was es bewusst nicht tut
RoughRoute tauscht Genauigkeit gegen Größe und Geschwindigkeit. Es ignoriert Einbahnstraßen, Abbiegebeschränkungen und geschwindigkeitsbasierte Kostenberechnungen, und wenn es keinen Weg findet, gibt es ein gerades Segment zurück, anstatt es abzulehnen. Das ist der richtige Trade für Wiedergabe, Demos und Offline-Fallbacks – und der falsche für die Turn-by-Turn-Navigation, wo Sie eine vollständige Routing-Engine wünschen.
Lizenziert unter MIT. Die Kartendaten stammen von OpenStreetMap Mitwirkenden, lizenziert unter ODbL.