我正在使用 GIS(WGS84)在 Java 中实现模拟。我想把我的代理人转移到对方身上。纬度很容易1 m 是1/111000
度。但是我想在经度侧移动一个代理,我必须考虑地球曲率(我猜!)。
我在 Wiki 上找到了这个公式:a= (2*pi*r*cos(phi))/360
r : radius
phi: latitude
a : should be the distance
我现在尝试将距离乘以1/a
,但位置不合逻辑!
我正在使用 GIS(WGS84)在 Java 中实现模拟。我想把我的代理人转移到对方身上。纬度很容易1 m 是1/111000
度。但是我想在经度侧移动一个代理,我必须考虑地球曲率(我猜!)。
我在 Wiki 上找到了这个公式:a= (2*pi*r*cos(phi))/360
r : radius
phi: latitude
a : should be the distance
我现在尝试将距离乘以1/a
,但位置不合逻辑!
如果您向东移动 1 公里,然后向北移动 1 公里,您将到达与向北移动 1 公里然后向东移动 1 公里不同的位置。
在极端情况下(北极附近的特定纬度),向东移动 1 公里将使您回到原来的位置。
您将纬度和纵向“偏移”分开的概念是错误的,因为它不适合球体/椭球体表面的位置。
无论如何,如果您正在寻找给定纬度的地球周长,并且球面模型对于您的需求来说足够准确,请看这里。
计算两点之间的距离是您的目标吗?
我会使用:
d(P1, P2) = ((r · pi)/180)) · cos−1 (cos(a1) · cos(a2) · cos(b1 − b2) + sin(a1) · sin(a2))
其中 d 是距离,r 是地球半径,cos-1 是反余弦值,a1,a2,b1,b2 是您的 2 个代理的角度
如果您知道垂直和水平距离(l 和 h),您可以简单地计算b1 = a1 - l/(2*pi*r*cos(angleFromEquator)*360)
,a2 = h/(2*pi*r*360) + b2
如果您使用的是球坐标。
如果您在赤道(纬度 = 0)并且向东移动 1.000 公里,您最终会到达(1.000 公里/40.000 公里)* 360° = 9° 再向东。
在 45° 的纬度上,这将是 (1.000 km / 28.000 km) * 360° = 12.8°