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.
¡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
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
Y ahora funciona ... :) – exhuma