Я использовал этот URL запроса
, который дан в ответе на этот вопрос. Но после того, как я попробовал его, это не работает с координатами. Это работает с tho имен адреса. Я предполагаю, что мог использовать геокодирование Google для получения адресов сначала. Но интересно, существует ли другой способ получить шаговую доступность между двумя координатами?
Используйте API Google Directions .
Должна быть возможность сделать запрос к http://maps.google.com/maps/api/directions/
и указать координаты как origin
и параметр назначения
. Я ненадолго попробовал, но безрезультатно. В их документации это должно работать, но они не объясняют подробно, как указать широту и долготу. Но говорят, что это возможно. Цитата:
[...] 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 должен быть тривиальным.