我一直在尝试在Java中找到代码示例,我可以在其中添加到特定坐标点的度量距离。
例如,通过向Point A的纬度增加2公里,并减去2公里到B点的经度,我想获得一个位于A点西北的新坐标点(B点)。
那里有这样一个功能的样本源代码吗?
答案 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中获得的减法计算新坐标