Android 反向位置。距离之间()

Android 反向位置。距离之间(),android,geospatial,Android,Geospatial,我有一个纬度和经度的位置,我想得到一个新的位置,距离这个位置x米,角度d度。这与Location.distanceBetween()相反。有没有Android API可以做到这一点。我知道我可以自己编写这样一个函数,但我想知道是否已经有了一个API用于它。现在自己实现这个函数,但确实希望这个函数在某个时候出现,所以相应地编写代码-创建自己的函数,添加一些单元测试 以后,请在函数中添加以下内容: def myFunc(args): res = # compute stuff #if(deb

我有一个纬度和经度的位置,我想得到一个新的位置,距离这个位置x米,角度d度。这与Location.distanceBetween()相反。有没有Android API可以做到这一点。我知道我可以自己编写这样一个函数,但我想知道是否已经有了一个API用于它。

现在自己实现这个函数,但确实希望这个函数在某个时候出现,所以相应地编写代码-创建自己的函数,添加一些单元测试

以后,请在函数中添加以下内容:

def myFunc(args):
  res = # compute stuff
  #if(debug):
    res2 = # make api call
    assert(res = res2)
  return res
SphericalUtil.computeDistanceBetween(...);
过了一段时间:

def myFunc(args):
  return # make api call

过了一段时间,就完全删除了这个函数。

这被称为“第一测地线”(有时也被称为“主测地线”)问题,如果你需要自己实现,这可能会帮助你在谷歌上找到一个算法。

这里有一些公式和示例代码(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应该很简单。

这里是它的反面:

SphericalUtil.computeOffsetOrigin(loc1, dist, angle);
它还具有distanceBetween功能:

def myFunc(args):
  res = # compute stuff
  #if(debug):
    res2 = # make api call
    assert(res = res2)
  return res
SphericalUtil.computeDistanceBetween(...);
库:


我不这么认为,但这种方法很不精确。你可以在3D球体上试试:(需要Google Earth Web插件)这假设地球是球形的(这就是为什么你需要
R
),但误差与你的旅行距离成正比。此误差的绝对值在长距离内都会很大,这就是为什么大值看起来有问题的原因。为了防止有人发现此错误而无法使其工作,lat和lon需要以弧度而不是度为单位,结果也是弧度。仅供参考,你可能想在将来使用更多的标签,如“geospatial:-)再给自己30分,Roman,你可以自己重新标记问题!;)