2010-01-05 19 views
2

我有經緯度位置,並希望得到那以x米,從該位置的距離爲d度角的新位置。這將與Location.distanceBetween()相反。有沒有任何Android API來做到這一點。我知道我可以自己編寫這樣一個函數,但是我想知道是否有API。反向Location.distanceBetween()

+0

僅供參考,您可能需要使用更多標籤如'geospatial'在未來:-) – 2010-01-05 23:05:19

+0

讓自己一個人30分,羅馬,你可以自己重新提出問題! ;) – 2010-01-06 00:07:17

+0

它看起來不像。 – CaseyB 2010-01-05 22:44:34

回答

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

這就是所謂的「第一大地」(或有時「主要測」)的問題,這可能會幫助你找到關於谷歌的算法,如果你需要這個工具自己。

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

這假定地球是平的,對吧? – 2010-01-05 23:27:09

+0

我不這麼認爲,但這種方法遠非精確。你可以在這裏嘗試一下3D球體:http://earth-api-utility-library.googlecode.com/svn/trunk/extensions/examples/destination.html(需要谷歌地球網頁插件) – 2010-01-06 00:22:56

+0

這個假設是球形地球(這就是爲什麼你需要'R'),但有一個誤差與你旅行的距離成正比。這個錯誤的絕對值在很大的距離上會很大,這就是爲什麼它對於大的值看起來有問題。 – 2010-02-01 18:46:38

0

這裏是它的相反:

SphericalUtil.computeOffsetOrigin(loc1, dist, angle); 

它還具有distanceBetween功能:

SphericalUtil.computeDistanceBetween(...); 

庫:

SphericalUtil