通过添加度量距离来获取新的GPS坐标

时间:2012-12-21 08:53:19

标签: java android osmdroid

我一直在尝试在Java中找到代码示例,我可以在其中添加到特定坐标点的度量距离。

例如,通过向Point A的纬度增加2公里,并减去2公里到B点的经度,我想获得一个位于A点西北的新坐标点(B点)。

那里有这样一个功能的样本源代码吗?

2 个答案:

答案 0 :(得分:2)

如果您不需要高精度且距离很小,您可能会认为地球是一个半径约为R = 6370 km的球体。以弧度表示的纬度差异就是dNorth / R,经度差是dEast / R / cos(lat)。

为了获得更高的精确度,你必须考虑到地球的形状更像椭圆体。

答案 1 :(得分:0)

我是这么认为的,你可以使用Great Circle算法来做到这一点。

半径为R的球体表面上两个给定点P1 =(lat1,lon1)和P2 =(lat2,lon2)之间的最短距离(测地线)是大圆距离。它可以使用公式计算:

dist = arccos(sin(lat1) · sin(lat2) + cos(lat1) · cos(lat2) · cos(lon1 - lon2)) · R (1)

例如,自由女神像(40.6892°,-74.0444°)=(0.7102 rad,-1.2923 rad)与艾菲尔铁塔(48.8583°,2.2945°)之间的距离=(0.8527 rad,0.0400 rad) ) - 假设半径为6371 km的地球图形的球面近似 - 是:

dist = arccos(sin(0.7102) · sin(0.8527) + cos(0.7102) · cos(0.8527) · cos(-1.2923 - 0.0400)) · 6371 km
  = 5837 km 

我在探索时发现的另一个例子是::

示例:

lat1: 34
lng1: 34

在lat1中加入5km后,新点应该是这样的     new_lat1:34 + 5km     new_lng1:34(lng1将保持与我们仅在纬度中添加的相同)

所以你可以分两步来划分你的概率::

  1. 使用添加计算坐标。

  2. 然后使用步骤1中获得的减法计算新坐标