纬度/经度和米

时间:2013-03-06 21:07:33

标签: android math distance latitude-longitude

我有一个小算法问题。

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

所以我明白了。我想计算这个点上下5米的边界细节。即:

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

如何进行此计算?

非常感谢!

2 个答案:

答案 0 :(得分:15)

当您只在南北和东西方向工作时,可以简化大概的公式。

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

因此,如果the Earth's circumference为40075.04 km,要向北/向移动5 m,您将从纬度添加/减去 0.0000449 并使用相同的经度。要向西/向东移动5米,您将使用相同的纬度,并将 0.0000449 / cos(纬度)加/减到经度。不要忘记边缘情况:近极点你需要将纬度夹紧到90°,而经度接近180°你会增加或减去360°以保持经度在正确的范围内。

根据您的数字,范围大约为:

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

更新:请注意,这仍然假定地球是一个完美的球体,which it's not。例如,GPS系统将地球模拟为椭圆体,其中赤道为6378.137km,极点距离地球中心6356.7523142km。差异大约是1/300,对许多应用来说都很重要,但在这种情况下,它在误差范围内。

校正经度的公式应该很简单,因为平行线仍然是圆形:你只需要交换cos(latitude)来获得正确的系数。计算correct latitude比较困难,因为经线不是圆而是椭圆,并且无法使用基本函数计算椭圆的弧长,因此必须使用近似值。

答案 1 :(得分:6)

我想补充一条非常重要的评论(对于那些不熟悉的人或那些忘记了这一点的人):

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

转换:弧度= PI / 180 *度


(我为自己的答案道歉,但凭借我目前的35的声望,我无法发表评论)