2010-01-05 59 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