¿Cómo convertir una pista de puntos en direcciones para caminar?

8

Imagine que tiene una lista de puntos (latitud + longitud) que ha registrado previamente con un receptor GPS. Ahora, debe convertirlo en una representación textual de la ruta que siguió. Ejemplo:

  1. Comience en Redmond Avenue 12
  2. Caminar 200 m
  3. Gire a la izquierda hacia Another St.
  4. Caminar 100 m
  5. Pare en otra calle 10
  6. Final

Realmente no necesita ser muy detallado. La primera idea que se me ocurre es utilizar un servicio externo (google, yahoo ...) para revertir la geocodificación de cada punto. Luego aplique un algoritmo simple para escribir la ruta cuando detecte un cambio en el nombre de la calle.

Cualquier sugerencia sobre cuál es el mejor algoritmo para usar o cualquier implementación existente (abierta) es bienvenida. No parece ser trivial.

Guido
fuente
1
¿Vale la pena señalar que si me lo piden Start at Redmond Avenue 12y Walk 200 mno sabré en qué dirección caminar? Perdón por la trampa.
fmark
@fmark, gracias. Eres justo pero no es importante en este caso. Las instrucciones se muestran antes de que se hayan registrado los puntos, como parte de un sistema auditivo interno. El nivel de detalle no es tan importante como permitir que otras personas conozcan la ruta aproximada que se siguió.
Guido

Respuestas:

4

Si puede utilizar un servicio externo, la API de Google Directions proporciona esta funcionalidad directamente. Admite waypoints a lo largo del camino, por lo que podría hacer:

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

Esto devolverá un JSONdocumento con stepspara cada dirección.

Si desea hacerlo usted mismo, debe seguir algunos pasos para comenzar a procesar las instrucciones: necesitará un conjunto de datos para enrutar las rutas, como OSM , y un motor de enrutamiento como pgRouting . Algo como OSM2PostGIS proporciona el trabajo pesado necesario para ejecutar una configuración como esta. Luego querrá reposicionar cada uno de sus puntos en el borde más cercano, lo que se puede hacer en PostGIS con ST_Line_Locate_Point( documentación ). Entre la referencia lineal en PostGIS y pgRouting, debería poder crear direcciones lo suficientemente razonables.

scw
fuente
1
Gracias. Conozco ese servicio proporcionado por Google, pero solo permite 25 puntos a lo largo del camino. El GPS ahorra un punto cada 10 segundos, por lo que alcanzaría el límite en menos de 5 minutos.
Guido
2
Correcto, lo limitaría a 25 puntos, pero probablemente podría usar menos resolución ya que las rutas seguirán los bordes en los datos base de Google para la mayoría de la ruta. Alternativamente, puede enviar múltiples consultas para una sola ruta y luego analizar los resultados nuevamente (también hay un ejemplo en la API para esto).
scw