RoughRoute — punti di ingresso, un vero percorso stradale in uscita
Un mini-router offline basato sui dati OpenStreetMap. Assegnagli punti di passaggio ordinati e restituisce una polilinea che segue strade reali, senza chiamate di rete in fase di esecuzione, in millisecondi a una cifra.
Gratuito e open source · Rust · MIT License
🧭 Una linea retta non è una strada
Tutto ciò che simula il movimento (uno strumento di riproduzione mock-GPS, una demo, l'animazione di una mappa) ha bisogno di un percorso che sembri guidato, non di una linea retta attraverso gli edifici. I motori di routing completi risolvono questo problema, ma sono pesanti e la maggior parte di essi si aspetta un server dall'altra parte della chiamata di rete.
📦 Abbastanza piccolo da incorporare
RoughRoute fa una cosa: inserire waypoint e uscire una linea plausibile che segue la strada. La mappa viene compilata in anticipo in un file di mappa compatto fornito con l'app, quindi in fase di esecuzione non sono presenti server, chiave API e nulla che limiti la velocità.
Cosa fa
📴 Nessuna rete in fase di esecuzione
Le query vengono eseguite su un file di mappa predefinito sul dispositivo. Funziona in aereo, in tunnel o in CI con la rete spenta.
🧩 Un nucleo, tre gusci
Lo stesso core Rust viene compilato in WebAssembly per il browser, una libreria nativa Android tramite UniFFI e un binario da riga di comando.
⚡ Query in millisecondi a una cifra
A* su una rete stradale compressa. Abbastanza veloce da poter essere indirizzato su ogni fotogramma di una riproduzione, non solo una volta all'inizio.
🗜 File di mappa misurati in megabyte
Il collasso di grado 2 e la geometria compressa delta mantengono una regione utilizzabile sufficientemente piccola da raggruppare o servire da un CDN.
🚗 Guidare e camminare
Un file di mappa trasporta entrambi i profili tramite maschere di bit di accesso, in modo da non creare e spedire la regione due volte.
🔁 Stesso input, stessi byte
Il percorso è deterministico: gli stessi waypoint e lo stesso file mappa producono sempre la stessa linea. Buone notizie per i test che confrontano i risultati.
⚙️ Tre passi
- Compilare in anticipo una regione .osm.pbf in un file .graph compatto.
- Spedisci il file: raggruppalo con l'app o inseriscilo in un CDN.
- Sul dispositivo, carica il file ed esegui le query localmente. Ottieni le coordinate e la distanza.
⌨️ Dalla riga di comando
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
Oppure dal browser, tramite WebAssembly:
const router = new WasmRouter(graphBytes);
const { coords, distance } = router.route(waypoints, "car");
⚖️ Ciò che deliberatamente non fa
RoughRoute baratta la precisione con dimensioni e velocità. Ignora le strade a senso unico, i divieti di svolta e i costi basati sulla velocità e, se non riesce a trovare un percorso, restituisce un segmento rettilineo anziché rifiutare. Questo è lo scambio giusto per la riproduzione, le demo e i fallback offline, ma quello sbagliato per la navigazione passo passo, dove desideri un motore di routing completo.
Concesso in licenza dal MIT. I dati della mappa provengono dai contributori di OpenStreetMap, concessi in licenza con ODbL.