【问题标题】:Formula for getting longitude获得经度的公式
【发布时间】:2012-07-30 14:25:12
【问题描述】:

我正在使用 GIS (WGS84) 在 Java 中实现模拟。我想把我的代理人转移到对方身上。纬度很容易1 m 是1/111000degrees。但是我想在经度侧移动一个代理,我必须考虑地球曲率(我猜!)。

我在 Wiki 上找到了这个公式:a= (2*pi*r*cos(phi))/360

r  : radius
phi: latitude
a  : should be the distance

我现在尝试将我的距离乘以 1/a,但位置不合逻辑!

【问题讨论】:

  • 您可以使用this question中的公式。当您将方位角设置为 0 时,您可以获得给定距离和纬度的经度角。

标签: java latitude-longitude


【解决方案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 公里 / 28.000 公里) * 360° = 12.8°

【讨论】:

  • 我知道垂直和水平距离并且想要角度!
  • 我的意思是我知道到代理 b 的垂直和水平距离,并通过使用代理 a 的角度想要它的角度!
  • 在这方面纬度与经度没有什么不同
  • 因此,如果我在位置角度 (a1,a2) 上有代理 A,并且我希望代理 B 在移动位置 1m(垂直)和 2000m(水平)。我的新职位是:b1 = a1 - (1*1/111000) 和 b2 = a2 - (2000*1/111000) ???
  • 啊现在我明白我忘记了什么了。在赤道上是这样,但如果你在不同的角度,你必须乘以 cos(angleFromTheEquator)
【解决方案2】:

如果您向东移动 1 公里,然后向北移动 1 公里,与向北移动 1 公里然后向东移动 1 公里的情况不同,您将到达不同的位置。

在极端情况下(北极附近的特定纬度),向东移动 1 公里会带您回到原来的位置。

您将纬度和纵向“偏移”分开的概念是错误的,因为它不适合球体/椭圆体表面上的位置。

无论如何,如果您正在寻找给定纬度的地球周长,并且球形模型足以满足您的需求,请查看here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    相关资源
    最近更新 更多