Android: как получить шаговую доступность между двумя гео-координатами?

Я использовал этот URL запроса

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

, который дан в ответе на этот вопрос. Но после того, как я попробовал его, это не работает с координатами. Это работает с tho имен адреса. Я предполагаю, что мог использовать геокодирование Google для получения адресов сначала. Но интересно, существует ли другой способ получить шаговую доступность между двумя координатами?

5
задан Cœur 3 March 2019 в 10:18
поделиться

1 ответ

Мой новый ответ :)

Используйте 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 должен быть тривиальным.

5
ответ дан 14 December 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: