RoughRoute — waypoints de entrada, uma rota rodoviária real de saída
Um mini-roteador offline baseado em dados OpenStreetMap. Forneça pontos de referência ordenados e ele retornará uma polilinha que segue estradas reais – sem chamadas de rede em tempo de execução, em milissegundos de um dígito.
Gratuito e de código aberto · Rust · MIT License
🧭 Uma linha reta não é uma estrada
Qualquer coisa que simule movimento — uma ferramenta de reprodução mock-GPS, uma demonstração, uma animação de mapa — precisa de um caminho que pareça ter sido percorrido, e não de uma linha reta através de edifícios. Mecanismos de roteamento completo resolvem isso, mas são pesados, e a maioria deles espera um servidor do outro lado de uma chamada de rede.
📦 Pequeno o suficiente para incorporar
RoughRoute faz uma coisa: pontos de referência, uma linha plausível de seguimento de estrada. O mapa é compilado antecipadamente em um arquivo de mapa compacto que acompanha seu aplicativo, portanto, em tempo de execução, não há servidor, nenhuma chave API e nada que limite sua taxa.
O que isso faz
📴 Nenhuma rede em tempo de execução
As consultas são executadas em um arquivo de mapa pré-criado no dispositivo. Funciona em avião, túnel ou CI com a rede desligada.
🧩 Um núcleo, três cascas
O mesmo núcleo Rust é compilado em WebAssembly para o navegador, uma biblioteca nativa Android via UniFFI e um binário de linha de comando.
⚡ Consultas de milissegundos de um dígito
A* através de uma rede rodoviária comprimida. Rápido o suficiente para rotear cada quadro de uma reprodução, não apenas uma vez no início.
🗜 Arquivos de mapa medidos em megabytes
O colapso de grau 2 e a geometria comprimida delta mantêm uma região utilizável pequena o suficiente para agrupar ou servir de um CDN.
🚗 Dirigindo e caminhando
Um arquivo de mapa transporta ambos os perfis através de máscaras de acesso, para que você não construa e envie a região duas vezes.
🔁 Mesma entrada, mesmos bytes
A rota é determinística: os mesmos pontos de referência e o mesmo arquivo de mapa sempre produzem a mesma linha. Boas notícias para testes que comparam resultados.
⚙️ Três etapas
- Com antecedência, compile uma região .osm.pbf em um arquivo .graph compacto.
- Envie esse arquivo – agrupe-o com o aplicativo ou coloque-o atrás de um CDN.
- No dispositivo, carregue esse arquivo e execute consultas localmente. Você recebe de volta as coordenadas e a distância.
⌨️ Da linha 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
Ou no navegador, via WebAssembly:
const router = new WasmRouter(graphBytes);
const { coords, distance } = router.route(waypoints, "car");
⚖️ O que deliberadamente não faz
RoughRoute troca precisão por tamanho e velocidade. Ignora ruas de mão única, restrições de conversão e custos baseados na velocidade e, se não conseguir encontrar um caminho, devolve um segmento reto em vez de recusar. Essa é a opção certa para reprodução, demonstrações e substitutos off-line – e a errada para navegação passo a passo, onde você deseja um mecanismo de roteamento completo.
Licenciado pelo MIT. Os dados do mapa vêm de contribuidores OpenStreetMap, licenciados sob ODbL.