GraphHopper é um mecanismo de roteamento rápido e com uso eficiente de memória lançado sob a licença Apache 2.0. Ele pode ser usado como uma biblioteca Java ou um servidor web independente para calcular a distância, o tempo, as instruções passo a passo e muitos atributos da estrada para uma rota entre dois ou mais pontos. Além deste roteamento "A-para-B", ele suporta "snap to road", cálculo de isócrona, navegação móvel e muito mais. GraphHopper usa dados OpenStreetMap e GTFS por padrão e também pode importar outras fontes de dados.
Temos uma comunidade aberta e acolhemos a todos. Conte-nos seus problemas, casos de uso ou apenas diga olá. Consulte nossas diretrizes da comunidade.
Todas as perguntas vão para nosso fórum, onde também temos subseções especialmente para desenvolvedores, uso móvel e nosso componente de correspondência de mapas. Você também pode pesquisar respostas no Stackoverflow.
Leia nosso guia de contribuição para obter informações sobre tópicos como encontrar e corrigir bugs e melhorar nossa documentação ou traduções! Também temos bons primeiros problemas para começar a contribuir.
Para começar, você pode experimentar o GraphHopper Maps, ler nossa documentação e instalar o GraphHopper incluindo a UI do Maps localmente.
Consulte o arquivo changelog para alterações na API Java.
Para instalar a UI do GraphHopper Maps e o serviço da web localmente, você precisa de uma JVM (>= Java 17) e faz:
wget https://repo1.maven.org/maven2/com/graphhopper/graphhopper-web/10.0/graphhopper-web-10.0.jar
https://raw.githubusercontent.com/graphhopper/graphhopper/10.x/config-example.yml
http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
java -D " dw.graphhopper.datareader.file=berlin-latest.osm.pbf " -jar graphhopper * .jar server config-example.yml
Depois de um tempo você verá uma mensagem de log com 'Servidor - Iniciado', então vá para http://localhost:8989/ e você verá um mapa de Berlim. Você deve conseguir clicar com o botão direito no mapa para criar uma rota.
Consulte a documentação que contém, por exemplo, o guia de elevação e o guia de implantação.
As imagens Docker criadas pela comunidade a partir do branch master
podem ser encontradas aqui (atualmente diariamente). Consulte o Dockerfile para obter mais detalhes.
Para ver o recurso de roteamento rodoviário do GraphHopper em ação, vá para GraphHopper Maps.
GraphHopper Maps é uma interface de usuário de código aberto, que você pode encontrar aqui. Ele pode usar este mecanismo de roteamento de código aberto ou a API GraphHopper Directions, que fornece a API de roteamento, uma API de otimização de rota (baseada em jsprit), uma API Matrix rápida e uma pesquisa de endereço (baseada em photon). O projeto Photon também é apoiado pela GraphHopper GmbH. Além da API GraphHopper Directions, são usados blocos de mapas de vários provedores, sendo o padrão Omniscale.
Tudo isso está disponível gratuitamente, através de conexões criptografadas e de servidores alemães - para uma experiência agradável e privada de planejamento de rotas!
Comece
Existe um serviço web que pode ser consumido pelo nosso cliente Android de navegação.
O roteamento offline não é mais compatível oficialmente, mas ainda deve funcionar, pois o Android oferece suporte à maior parte do Java. Veja a versão 1.0 com a demonstração do Android e também esta solicitação pull do fork do iOS incluindo uma demonstração para iOS.
Use isócronas para calcular e visualizar a área alcançável para um determinado modo de viagem.
Você pode experimentar a interface do usuário de depuração em http://localhost:8989/maps/isochrone para ver os endpoints /isochrone
e /spt
em ação.
Existe o subprojeto de correspondência de mapas para encaixar os traços GPX na estrada.
GraphHopper suporta vários algoritmos de roteamento, como Dijkstra e A *
e suas variantes bidirecionais. Além disso, permite usar Hierarquias de Contração (CH) com muita facilidade. Chamamos isso de modo de velocidade ; sem esta preparação CH, chamamos isso de modo flexível .
O modo de velocidade vem com respostas muito rápidas e leves (menos RAM) e não utiliza heurística. No entanto, apenas perfis de veículos predefinidos são possíveis e esta preparação adicional de CH consome tempo e recursos.
Depois, há o modo híbrido que também requer mais tempo e memória para a preparação, mas é muito mais flexível no que diz respeito à alteração de propriedades por solicitação ou, por exemplo, à integração de dados de tráfego. Além disso, esse modo híbrido é mais lento que o modo rápido, mas é uma ordem de magnitude mais rápido que o modo flexível e usa menos RAM para uma solicitação.
Se houver preparativos, você poderá alternar entre todos os modos no momento da solicitação.
Leia mais sobre os detalhes técnicos aqui.
Escolhemos a licença Apache para facilitar a incorporação do GraphHopper em seus produtos, mesmo de código fechado. Sugerimos que você contribua com suas alterações, pois o GraphHopper evolui rapidamente.
OpenStreetMap é suportado diretamente pelo GraphHopper. Sem os dados incríveis do OpenStreetMap, o GraphHopper não seria possível. Outros dados do mapa precisarão de um procedimento de importação personalizado, consulte, por exemplo, Ordnance Survey, Shapefile como ESRI ou Navteq.
GraphHopper é escrito em Java e roda oficialmente em Linux, Mac OS X e Windows.
Incorpore GraphHopper com suporte OpenStreetMap em seu aplicativo Java por meio do seguinte snippet:
< dependency >
< groupId >com.graphhopper</ groupId >
< artifactId >graphhopper-core</ artifactId >
< version >[LATEST-VERSION]</ version >
</ dependency >
Veja nosso aplicativo de exemplo para começar rapidamente.
Você pode customizar o GraphHopper com conhecimento de Java (com API de alto e baixo nível) e também sem conhecimento de Java usando os modelos customizados.
Com o módulo web, fornecemos código para consultar o GraphHopper por HTTP e diminuir ao máximo o uso de largura de banda. Para isso usamos uma codificação de polilinha eficiente, o algoritmo Ramer–Douglas–Peucker e um filtro de servlet GZIP simples.
No lado do cliente, fornecemos um cliente Java e JavaScript.
GraphHopper também roda no Desktop em um aplicativo Java sem acesso à internet. Para fins de depuração, o GraphHopper pode produzir blocos vetoriais, ou seja, uma visualização da rede rodoviária no navegador (ver #1572). Além disso, uma UI baseada em Swing de nível mais baixo é fornecida via MiniGraphUI no módulo de ferramentas, veja algumas visualizações feitas com ela aqui. Uma visualização de mapa rápida e pronta para produção para o Desktop pode ser implementada via MapsForge ou MapsForge vtm.