Мой новый ответ:)
Используйте Google Directions API .
Должна быть возможность сделать запрос к http://maps.google.com/maps/api/directions/<json|xml>?<params>
и указать координаты в качестве параметров origin
и destination
. Я кратко попробовал, но он не дал результатов. Вместе с их документами это должно работать, но они не объясняют подробно, как указать широту и долготу. Но они говорят, что это возможно. Цитата:
[...] origin (обязательно) - адрес или текстовое значение широты / долготы , из которого вы хотите рассчитать направления [...]
Тем не менее, это должно начать вас. Я бы предложил использовать выходной формат JSON. Гораздо проще анализировать и использовать меньше полосы пропускания (это менее многословно, как XML).
Работает: Вот пример URL: http://maps.google.com/maps/api/directions/json?origin=49.75332,6.50322&destination=49.71482,6.49944&mode=walking&sensor=false
Мой предыдущий ответ
Расстояние по прямой можно легко определить по формуле Хаверсайна. Если вы извлекаете маршрут из Google, вы можете рассчитать расстояние каждого сегмента и суммировать их.
Некоторое время назад я записал (общеизвестный) алгоритм ( Haversine ) в своем блоге ( python и pl / sql )
Вот копия кода 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
Перевод этого на Java должен быть тривиальным.