【问题标题】:Latitude / Longitude and meters纬度/经度和米
【发布时间】:2013-02-21 21:03:26
【问题描述】:

我有一个小算法问题。

我正在开发一个 Android 应用程序。我得到 GPS 坐标。例如:纬度:23.23907,经度:50.45786

所以我明白了。我想计算这一点正负 5 米的边界细节。即:

[23.23907 - 5 meters ; 23.23907 + 5 meters]
[50.45786 - 5 meters ; 50.45786 + 5 meters]

如何计算?

非常感谢!

【问题讨论】:

标签: android math distance latitude-longitude


【解决方案1】:

当您仅在南北和东西方向工作时,可以大大简化半正弦公式。

如果地球的周长是 C,则给定点以南 d 公里处的点向南 360*d/C 度。以东 d 公里处的点为东 360*d/(C*cos(latitude)) 度。分母中的余弦来自这样一个事实,即给定纬度的经度长度比赤道短那么多。

因此,如果the Earth's circumference 是 40075.04 公里,要向北/南移动 5 m,您需要从纬度中添加/减去 0.0000449 并使用相同的经度。要向西/向东移动 5 m,您将使用相同的纬度并在经度上加上/减去 0.0000449/cos(latitude)。不过不要忘记边缘情况:在极点附近,您必须将纬度限制在 90°,而在经度 180° 附近,您必须加或减 360°,以将经度保持在正确的范围内。

根据你的数字,范围大约是:

latitude:  [23.23903 ; 23.23911]
longitude: [50.45781 ; 50.45791]

更新:请注意,这仍然假设地球是一个完美的球体,which it's not。例如,GPS 系统将地球建模为一个椭球体,其中赤道位于 6378.137 公里处,两极位于距地球中心 6356.7523142 公里处。差异大约为 1/300,对于许多应用程序来说非常重要,但在这种情况下,它在误差范围内。

修正经度公式应该很简单,因为平行线仍然是圆:您只需将cos(latitude) 换成正确的系数。计算correct latitude 比较困难,因为子午线不是圆而是椭圆,椭圆的弧长不能用初等函数计算,所以必须使用近似值。

【讨论】:

  • 非常感谢,这很简单!
【解决方案2】:

我想添加一个非常重要的评论:

余弦的计算是以弧度为单位的纬度,而不是度数。

换算:弧度 = PI / 180 * 度

【讨论】:

  • 是的,但这不是错误仍然很重要的原因。错误主要是由于上面更新的内容:“......这仍然假设地球是一个完美的球体,但事实并非如此。”
猜你喜欢
  • 2013-11-17
  • 2011-07-06
  • 2011-08-16
  • 1970-01-01
  • 2011-08-28
  • 2010-10-12
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多