Como converter uma trilha de pontos em direções a pé?

8

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:

  1. Comece na Redmond Avenue 12
  2. Caminhada 200 m
  3. Vire à esquerda em outra St.
  4. Ande 100 m
  5. Pare em outra St. 10
  6. 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.

Guido
fonte
1
Vale a pena ressaltar que, se me disserem Start at Redmond Avenue 12e Walk 200 mnão saberei em que direção andar? Desculpe por nitpicking.
fmark 6/08/10
@mark, obrigado. Você é rigoroso, mas não é importante neste caso. As instruções são mostradas antes dos pontos serem registrados, como parte de um sistema auditivo interno. O nível de detalhe não é tão importante quanto permitir que outras pessoas conheçam a rota aproximada que foi seguida.
Guido

Respostas:

4

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:

http://maps.google.com/maps/api/directions/json?origin=Redmond+Avenue+12,01864
&destination=Concord,MA&waypoints=lat1,long1|lat2,long2|lat3,long3&sensor=true

Isso retornará um JSONdocumento stepspara 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.

scw
fonte
1
Obrigado. Eu conheço esse serviço fornecido pelo Google, mas ele permite apenas 25 pontos no caminho. O GPS economiza um ponto a cada 10 segundos, então eu chegaria ao limite em menos de 5 minutos.
Guido
2
Certo, você o limitaria a 25 pontos, mas você provavelmente poderia usar menos resolução, já que os caminhos seguirão as bordas dos dados básicos do Google na maior parte do percurso. Como alternativa, você pode enviar várias consultas para uma única rota e depois analisar os resultados novamente (também há um exemplo na API para isso).
ACS