2010-01-05 4 views
2

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

+0

FYI, вы можете захотеть использовать более Теги, подобные «геопространственному» в будущем :-) –

+0

r 30 очков, Роман, и вы можете сами задавать вопросы! ;) –

+0

Это не похоже на это. – CaseyB

ответ

0

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

В будущем добавить следующее вы действуете:

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

И спустя некоторое время:

def myFunc(args): 
    return # make api call 

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

1

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

3

Существует несколько формул и пример кода (JavaScript) для этого здесь: Movable Type Scripts. Ищите «Точку назначения, заданную расстояние и несущую из начальной точки».

Вот выдержка из 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 должно быть тривиальным.

+0

Это предполагает, что Земля плоская, верно? –

+0

Я так не думаю, но этот метод далек от точного. Вы можете попробовать это в 3D-сфере здесь: http://earth-api-utility-library.googlecode.com/svn/trunk/extensions/examples/destination.html (требуется веб-плагин Google Планета Земля) –

+0

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

0

Вот обратное его:

SphericalUtil.computeOffsetOrigin(loc1, dist, angle); 

Он также имеет функцию distanceBetween:

SphericalUtil.computeDistanceBetween(...); 

Lib:

SphericalUtil

Смежные вопросы