2010-06-03 3 views
5

J'ai utilisé cette URL de requêteAndroid: comment obtenir la distance de marche entre deux géo-coordinats?

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

, qui est donnée dans la réponse à cette question. Mais après l'avoir essayé, cela ne fonctionne pas avec les coordonnées. Cela fonctionne avec les noms d'adresses tho. Je suppose que je pourrais utiliser le géocodage de google pour obtenir les adresses en premier. Mais je me demande s'il y a une autre façon d'obtenir la distance de marche entre deux coordonnées?

Répondre

5

Ma nouvelle réponse :)

Utilisez le Google Directions API.

Il devrait être possible de faire une demande à http://maps.google.com/maps/api/directions/<json|xml>?<params> et en spécifiant les coordonnées comme paramètres origin et destination. Je l'ai brièvement essayé mais il n'y a eu aucun résultat. Le long de leurs documents, cela devrait fonctionner, mais ils n'expliquent pas en détail comment spécifier la latitude et la longitude. Mais ils disent que c'est possible. Quote:

[...] origine (obligatoire) - L'adresse ou valeur latitude/longitude textuelle à partir de laquelle vous souhaitez calculer l'itinéraire à [...]

Néanmoins, cela ne devrait vous avez commencé. Je suggère d'aller avec le format de sortie JSON. Il est beaucoup plus simple d'analyser et d'utiliser moins de bande passante (c'est moins bavard que XML).

Il fonctionne: Voici un exemple d'URL: http://maps.google.com/maps/api/directions/json?origin=49.75332,6.50322&destination=49.71482,6.49944&mode=walking&sensor=false

ma réponse précédente

La distance en ligne droite peut facilement être déterminée en utilisant la formule Haversine. Si vous récupérez l'itinéraire depuis Google, vous pouvez calculer la distance de chaque segment et les additionner.

Un peu en arrière, j'ai écrit l'algorithme (bien connu) (Haversine) dans un billet de blog (python et pl/sql)

Voici la copie du code 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 

Traduction ceci à Java devrait être trivial.

+0

Merci! Mais je suis particulièrement intéressé par la distance de marche. Le problème en ce moment est que je ne sais pas comment obtenir l'itinéraire de google avec seulement des coordonnées. J'ai essayé l'URL avec les coordonnées dans le navigateur, il dit qu'il ne comprend pas l'emplacement. – wei

+0

Je ne sais pas si la modification dans la réponse a déclenché une notification ... donc je vais également écrire ce commentaire qui devrait prendre soin de cela. – exhuma

+0

Et maintenant ça marche ... :) – exhuma

Questions connexes