Imagine que você tenha uma lista de pontos (latitude + longitude) que você gravou anteriormente com um receptor GPS. Agora, você precisa convertê-lo em uma representação textual da rota que você seguiu. Exemplo:
- Comece na Redmond Avenue 12
- Caminhada 200 m
- Vire à esquerda em outra St.
- Ande 100 m
- Pare em outra St. 10
- Fim
Realmente não precisa ser muito detalhado. A primeira idéia que me vem à mente é usar um serviço externo (google, yahoo ...) para reverter geocódigo cada ponto. Em seguida, aplique um algoritmo simples para escrever a rota quando eu detectar uma alteração no nome da rua.
Qualquer dica sobre o melhor algoritmo a ser usado ou qualquer implementação existente (aberta) é bem-vinda. Não parece ser trivial.
Start at Redmond Avenue 12
eWalk 200 m
não saberei em que direção andar? Desculpe por nitpicking.Respostas:
Se você pode usar um serviço externo, a API do Google Directions fornece essa funcionalidade diretamente. Ele suporta waypoints ao longo do caminho, para que você possa:
Isso retornará um
JSON
documentosteps
para cada direção.Se você quiser fazer isso sozinho, terá algumas etapas para começar a processar as direções: precisará de um conjunto de dados para rotear os caminhos, como OSM , e um mecanismo de roteamento, como pgRouting . Algo como o OSM2PostGIS fornece o trabalho pesado necessário para obter uma configuração como essa em execução. Você deseja reposicionar cada um dos seus pontos na aresta mais próxima, o que pode ser feito no PostGIS com
ST_Line_Locate_Point
( documentação ). Entre a referência linear no PostGIS e pgRouting, você deve ser capaz de criar instruções razoáveis o suficiente.fonte