我一直在尝试在 Java 中查找代码示例,我可以在其中将度量距离添加到特定坐标点。
例如,将 A 点的纬度增加 2 公里,将 B 点的经度减去 2 公里,我想获得一个位于 A 点西北部的新坐标点(B 点)。
那里有这种功能的示例源代码吗?
如果您不需要高精度并且距离很小,您可以假设地球是一个半径约为 R = 6370 公里的球体。以弧度表示的纬度差就是 dNorth / R,经度差是 dEast / R / cos(lat)。
为了获得更高的精度,您必须考虑到地球的形状更像是一个椭球体。
我想是的,你可以使用大圆算法来做到这一点。
在半径为 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 公里的地球图形的球面近似值是:
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中获得的减法计算新坐标