2010-06-03 7 views
5

He utilizado esta pregunta URLAndroid: ¿cómo conseguir la distancia a pie entre dos geo coordinaciones?

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

, que se da en la respuesta a esta question. Pero después de probarlo, no funciona con coordenadas. Funciona con nombres de direcciones tho. Creo que podría usar la geocodificación de google para obtener las direcciones primero. Pero me pregunto si hay otra forma de obtener la distancia a pie entre dos coordenadas.

Respuesta

5

Mi Nueva respuesta :)

Uso del Google Directions API.

Debería ser posible realizar una solicitud al http://maps.google.com/maps/api/directions/<json|xml>?<params> y especificar las coordenadas como origin y destination parámetro. Lo intenté brevemente pero no devolvió ningún resultado. A lo largo de sus documentos debería funcionar, pero no explican en detalle cómo especificar la latitud y la longitud. Pero dicen que es posible. Cita:

[...] origen (requerido) - La dirección o Pruebas valor de latitud/longitud desde el que se desea calcular las direcciones [...]

Sin embargo, esto debe comienza. Sugeriría ir con el formato de salida JSON. Es mucho más simple de analizar y debería usar menos ancho de banda (es menos detallado como XML).

Funciona: He aquí un ejemplo de URL: http://maps.google.com/maps/api/directions/json?origin=49.75332,6.50322&destination=49.71482,6.49944&mode=walking&sensor=false

Mi respuesta anterior

La distancia en línea recta se puede determinar fácilmente utilizando la fórmula Haversine. Si recupera la ruta de Google, puede calcular la distancia de cada segmento y resumirlos.

Hace un tiempo, me escribió el algoritmo (conocido) (Haversine) en un blog (python y pl/sql)

Aquí está la copia del código 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 

Traducción esto a Java debería ser trivial.

+0

¡Gracias! Pero estoy particularmente interesado en la distancia a pie. El problema ahora mismo es que no sé cómo obtener la ruta de google con solo coordenadas. Probé la URL con coordenadas en el navegador, dice que no entiende la ubicación. – wei

+0

No sé si la edición de la respuesta provocó una notificación ... así que también escribiré este comentario que debería ocuparse de eso. – exhuma

+0

Y ahora funciona ... :) – exhuma

Cuestiones relacionadas