RoughRoute — waypoints de entrada, una ruta de carretera real de salida
Un mini enrutador fuera de línea construido con datos de OpenStreetMap. Déle puntos de ruta ordenados y devolverá una polilínea que sigue caminos reales, sin llamadas de red en tiempo de ejecución, en milisegundos de un solo dígito.
Gratis y de código abierto · Rust · MIT License
🧭 Una línea recta no es un camino.
Cualquier cosa que simule movimiento (una herramienta de reproducción mock-GPS, una demostración, una animación de mapa) necesita un camino que parezca recorrido, no una línea recta a través de edificios. Los motores de enrutamiento completos resuelven eso, pero son pesados y la mayoría espera un servidor en el otro extremo de una llamada de red.
📦 Lo suficientemente pequeño como para incrustarlo
RoughRoute hace una cosa: puntos de ruta hacia adentro, una línea de seguimiento de ruta plausible hacia afuera. El mapa se compila con anticipación en un archivo de mapa compacto que se envía con su aplicación, por lo que en tiempo de ejecución no hay servidor, ni clave API, ni nada que lo limite.
que hace
📴 No hay red en tiempo de ejecución
Las consultas se ejecutan en un archivo de mapa prediseñado en el dispositivo. Funciona en un avión, en un túnel o en CI con la red apagada.
🧩 Un núcleo, tres capas
El mismo núcleo Rust se compila en WebAssembly para el navegador, una biblioteca Android nativa a través de UniFFI y un binario de línea de comandos.
⚡ Consultas de milisegundos de un solo dígito
A* sobre una red de carreteras comprimida. Lo suficientemente rápido como para enrutar cada fotograma de una reproducción, no sólo una vez al principio.
🗜 Archivos de mapas medidos en megabytes
El colapso de grado 2 y la geometría comprimida delta mantienen una región utilizable lo suficientemente pequeña como para agruparla o servirla desde un CDN.
🚗 Conducir y caminar
Un archivo de mapa transporta ambos perfiles a través de máscaras de bits de acceso, por lo que no se construye ni se envía la región dos veces.
🔁 Misma entrada, mismos bytes
La ruta es determinista: los mismos puntos de ruta y el mismo archivo de mapa siempre producen la misma línea. Buenas noticias para las pruebas que comparan la producción.
⚙️ Tres pasos
- Con anticipación, compile una región .osm.pbf en un archivo .graph compacto.
- Envíe ese archivo: combínelo con la aplicación o colóquelo detrás de CDN.
- En el dispositivo, cargue ese archivo y ejecute consultas localmente. Recuperas las coordenadas y la distancia.
⌨️ Desde la línea de 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
O desde el navegador, a través de WebAssembly:
const router = new WasmRouter(graphBytes);
const { coords, distance } = router.route(waypoints, "car");
⚖️ Lo que deliberadamente no hace
RoughRoute cambia precisión por tamaño y velocidad. Ignora las calles de un solo sentido, las restricciones de giro y los costos basados en la velocidad, y si no puede encontrar un camino, devuelve un segmento recto en lugar de rechazarlo. Esta es la opción correcta para reproducción, demostraciones y respaldos fuera de línea, y la incorrecta para la navegación paso a paso, donde se necesita un motor de enrutamiento completo.
Con licencia del MIT. Los datos del mapa provienen de contribuyentes OpenStreetMap, con licencia ODbL.