A algum tempo atras, precisei implementar uma ferramenta para gerar rotas rodoviárias entre 2 pontos de interesse.
Em um primeiro momento, pensei no Google Maps API, mas este é um serviço pago e então procurei alternativas OPEN SOURCE que atencessem a necessidade e foi aí que conheci o Valhalla.
O Valhalla é um mecanismo de roteamento OPEN SOURCE.
- Geração de rotas em varias modalidades:
- Auto;
- pedestrian;
- truck;
- etc;
- Geração de rotas evitando determinados caminhos;
- Utilização direta no QGIS com o uso de pluguin;
- Utilização no LeafletJS para uma interface interativa em mapa.
Uma demo da API em funcionamento pode ser vista na pagina DEMO
a documentação completa da API pode ser vista em Documentação
Abaixo um exemplo de docker-compose para a implementação de um servidor de maneira rápida.
Lembrando que na primeira execução, o processo é bem demorado pois ele irá baixar o mapa de rodovias e preparar os dados para entao deixar a API funcional.
version: '3'
services: valhalla: image: ghcr.io/gis-ops/docker-valhalla/valhalla:3.4.0 environment: - tile_urls=https://download.geofabrik.de/south-america/brazil-latest.osm.pbf - use_tiles_ignore_pbf=True - force_rebuild=False - force_rebuild_elevation=False ports: - 8002:8002 volumes: - /opt/valhalla/custom_files/:/custom_files restart: always
abaixo um exemplo de estruturação da chamada com os parametros que utilizo.
$queryParams = ['json' => json_encode([ 'locations' => [ ['lat' => $lat_a, 'lon' => $long_a], ['lat' => $lat_b, 'lon' => $long_b] ], 'costing' => 'pedestrian', 'narrative' => false, 'id' => 'my_second_route', //'avoid_locations' => $shapeToIgnore,//para rotas alternativas 'directions_options' => [ 'units' => 'meters', 'language' => 'pt-BR' ], ])]; $response = Http::get('http://1.2.3.4:8002/route', $queryParams);