herramienta gratuita

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

el problema

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

la idea

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

Características

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.

Cómo funciona

⚙️ Tres pasos

  1. Con anticipación, compile una región .osm.pbf en un archivo .graph compacto.
  2. Envíe ese archivo: combínelo con la aplicación o colóquelo detrás de CDN.
  3. En el dispositivo, cargue ese archivo y ejecute consultas localmente. Recuperas las coordenadas y la distancia.
Pruébalo

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