2010-06-03 4 views
5

Ich habe diese Abfrage URLAndroid: Wie erreicht man die Gehstrecke zwischen zwei Geo-Koordinaten?

http://maps.google.com/maps?q=from+A+to+B&output=kml

, die in der Antwort auf diese question gegeben. Aber nachdem ich es versucht habe, funktioniert es nicht mit Koordinaten. Es funktioniert mit Adressnamen tho. Ich denke, ich könnte Googles Geokodierung verwenden, um die Adressen zuerst zu bekommen. Aber ich frage mich, ob es eine andere Möglichkeit gibt, die Entfernung zwischen zwei Koordinaten zu berechnen?

Antwort

5

My New Antwort :)

Verwenden Sie die Google Directions API.

Es sollte möglich sein, eine Anfrage an http://maps.google.com/maps/api/directions/<json|xml>?<params> zu stellen und die Koordinaten als origin und destination Parameter anzugeben. Ich versuchte es kurz, aber es gab keine Ergebnisse zurück. Entlang ihrer Dokumente sollte es funktionieren, aber sie erklären nicht im Detail, wie man Längen- und Breitengrade vorgibt. Aber sie sagen, dass es möglich ist. Zitat:

[...] Herkunft (erforderlich) - Die Adresse oder Text Breite/Länge Wert, von dem Sie Richtungen berechnen [...]

Dennoch sollte dies fang an. Ich würde vorschlagen, mit dem JSON-Ausgabeformat zu gehen. Es ist viel einfacher zu analysieren und sollte weniger Bandbreite verbrauchen (es ist weniger ausführlich als XML).

Es funktioniert: Hier ist ein Beispiel URL: http://maps.google.com/maps/api/directions/json?origin=49.75332,6.50322&destination=49.71482,6.49944&mode=walking&sensor=false

meine Antwort

Die gerade Linie Abstand leicht bestimmt werden kann, die Haversine Formel. Wenn Sie die Route von Google abrufen, können Sie die Entfernung jedes Segments berechnen und zusammenfassen.

Vor einiger Zeit schrieb ich unten die (bekannten) Algorithmus (Haversine) in einem Blog-Post (python und pl/sql)

Hier ist die Kopie des Codes Python:

from math import sin, cos, radians, sqrt, atan2 

    def lldistance(a, b): 
    """ 
    Calculates the distance between two GPS points (decimal) 
    @param a: 2-tuple of point A 
    @param b: 2-tuple of point B 
    @return: distance in m 
    """ 
    r = 6367442.5    # average earth radius in m 
    dLat = radians(a[0]-b[0]) 
    dLon = radians(a[1]-b[1]) 
    x = sin(dLat/2) ** 2 + \ 
     cos(radians(a[0])) * cos(radians(b[0])) *\ 
     sin(dLon/2) ** 2 
    #original# y = 2 * atan2(sqrt(x), sqrt(1-x)) 
    y = 2 * asin(sqrt(x)) 
    d = r * y 

    return d 

Translating Dies sollte Java trivial sein.

+0

Vielen Dank! Aber ich bin besonders an der Laufdistanz interessiert. Das Problem ist im Moment, dass ich nicht die Route von Google mit nur Koordinaten bekomme. Ich habe versucht, die URL mit Koordinaten im Browser, es sagt, dass es den Ort nicht versteht. – wei

+0

Ich weiß nicht, ob die Änderung in der Antwort eine Benachrichtigung ausgelöst hat ... also schreibe ich zusätzlich diesen Kommentar, der sich darum kümmern sollte. – exhuma

+0

Und jetzt funktioniert es ... :) – exhuma