Обратный Location.distanceBetween () - PullRequest
2 голосов
/ 06 января 2010

У меня есть местоположение с широтой и долготой, и я хочу получить новое местоположение, которое находится на расстоянии х метров от этого места под углом d градусов. Это было бы противоположностью Location.distanceBetween (). Есть ли Android API для этого. Я знаю, что мог бы самостоятельно программировать такую ​​функцию, но мне интересно, есть ли уже API для нее.

Ответы [ 4 ]

3 голосов
/ 06 января 2010

Здесь есть некоторые формулы и пример кода (JavaScript) для этого: Скрипты подвижного типа . Ищите «Пункт назначения с указанным расстоянием и азимутом от начальной точки».

Вот выдержка из JavaScript с сайта:

var lat2 = Math.asin( Math.sin(lat1)*Math.cos(d/R) + 
                      Math.cos(lat1)*Math.sin(d/R)*Math.cos(brng) );
var lon2 = lon1 + Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(lat1), 
                             Math.cos(d/R)-Math.sin(lat1)*Math.sin(lat2));

В приведенном выше коде d - это расстояние, brng - это азимут в градусах, а R - радиус Земли.

Портирование этого на Java должно быть тривиальным.

1 голос
/ 06 января 2010

Это называется «первой геодезической» (или иногда «основной геодезической») проблемой, которая, вероятно, поможет вам найти алгоритм в Google, если вам нужно реализовать это самостоятельно.

0 голосов
/ 09 марта 2018

Вот обратная сторона:

SphericalUtil.computeOffsetOrigin(loc1, dist, angle);

Также имеется функция distanceBetween:

SphericalUtil.computeDistanceBetween(...);

Lib:

SphericalUtil

0 голосов
/ 06 января 2010

Реализуйте это сами пока, но ожидайте, что эта функция появится в какой-то момент, поэтому создайте код соответствующим образом - создайте свою собственную функцию, добавьте несколько модульных тестов.

В будущем добавьте к вам следующую функцию:

def myFunc(args):
  res = # compute stuff
  #if(debug):
    res2 = # make api call
    assert(res = res2)
  return res

А через некоторое время:

def myFunc(args):
  return # make api call

А через некоторое время полностью удалите эту функцию.

...