Kostenloses Tool

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

Das Problem

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

Die Idee

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

Merkmale

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.

So funktioniert es

⚙️ Drei Schritte

  1. Kompilieren Sie vorab eine .osm.pbf-Region in eine kompakte .graph-Datei.
  2. Versenden Sie diese Datei – bündeln Sie sie mit der App oder legen Sie sie hinter ein CDN.
  3. Laden Sie diese Datei auf dem Gerät und führen Sie Abfragen lokal aus. Sie erhalten die Koordinaten und die Entfernung zurück.
Probieren Sie es aus

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