0

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

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

那里有这种功能的示例源代码吗?

4

2 回答 2

2

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

为了获得更高的精度,您必须考虑到地球的形状更像是一个椭球体。

于 2012-12-21T09:10:09.440 回答
0

我想是的,你可以使用大圆算法来做到这一点。

在半径为 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. 使用加法计算坐标。

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

于 2012-12-21T09:09:01.437 回答