Wie konvertiere ich eine Spur von Punkten in Laufrichtungen?

8

Stellen Sie sich vor, Sie haben eine Liste von Punkten (Breite + Länge), die Sie zuvor mit einem GPS-Empfänger aufgezeichnet haben. Jetzt müssen Sie es in eine Textdarstellung der Route konvertieren, der Sie gefolgt sind. Beispiel:

  1. Beginnen Sie an der Redmond Avenue 12
  2. Gehen Sie 200 m
  3. Biegen Sie links ab in eine andere St.
  4. Gehen Sie 100 m
  5. Halten Sie an einer anderen St. 10
  6. Ende

Es muss nicht wirklich sehr detailliert sein. Die erste Idee, die mir in den Sinn kommt, ist die Verwendung eines externen Dienstes (Google, Yahoo ...), um den Geocode für jeden Punkt umzukehren. Wenden Sie dann einen einfachen Algorithmus an, um die Route zu schreiben, wenn ich eine Änderung des Straßennamens feststelle.

Jeder Tipp, welcher Algorithmus am besten zu verwenden ist oder welche (offene) Implementierung vorhanden ist, ist willkommen. Es scheint nicht trivial zu sein.

Guido
quelle
1
Ist es erwähnenswert, dass , wenn ich gesagt habe Start at Redmond Avenue 12und Walk 200 mich will nicht wissen , in welche Richtung zu gehen? Entschuldigung für das Nitpicking.
Mark
@fmark, danke. Sie sind streng, aber es ist in diesem Fall nicht wichtig. Die Anweisungen werden angezeigt, bevor die Punkte als Teil eines internen auditorischen Systems aufgezeichnet wurden. Der Detaillierungsgrad ist nicht so wichtig, als dass andere Personen die ungefähre Route kennen, die befolgt wurde.
Guido

Antworten:

4

Wenn Sie einen externen Dienst verwenden können, bietet die Google Directions-API diese Funktionalität direkt an. Es unterstützt Wegpunkte entlang des Pfades, sodass Sie Folgendes tun können:

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

Dies gibt ein JSONDokument mit stepsfür jede Richtung zurück.

Wenn Sie dies selbst tun möchten, müssen Sie einige Schritte ausführen, um die Verarbeitungsanweisungen zu starten: Sie benötigen ein Dataset für das Routing der Pfade, z. B. OSM , und eine Routing-Engine wie pgRouting . So etwas wie OSM2PostGIS bietet das notwendige schwere Heben, um ein solches Setup zum Laufen zu bringen. Anschließend möchten Sie jeden Ihrer Punkte auf der nächsten Kante neu positionieren. Dies kann in PostGIS mit ST_Line_Locate_Point( Dokumentation ) erfolgen. Zwischen der linearen Referenzierung in PostGIS und pgRouting sollten Sie in der Lage sein, ausreichend vernünftige Richtungen zu erstellen.

scw
quelle
1
Vielen Dank. Ich kenne diesen Dienst von Google, aber er erlaubt nur 25 Punkte auf dem Weg. Das GPS speichert alle 10 Sekunden einen Punkt, sodass ich das Limit in weniger als 5 Minuten erreichen würde.
Guido
2
Richtig, es würde Sie auf 25 Punkte beschränken, aber Sie könnten wahrscheinlich eine geringere Auflösung verwenden, da die Pfade für den Großteil der Route den Kanten in den Basisdaten von Google folgen. Alternativ können Sie mehrere Abfragen für eine einzelne Route senden und dann die Ergebnisse wieder zusammen analysieren (es gibt auch ein Beispiel in der API dafür).
Scw