Apa*_*hee 8 math android 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]
Run Code Online (Sandbox Code Playgroud)
怎么做这个计算?
非常感谢你!
Jon*_*oni 15
当您只在南北和东西方向工作时,可以简化大概的公式.
如果地球的周长为C,则给定点以南d公里处的点向南为360*d/C度.向东d公里处的点是向东360*d /(C*cos(纬度))度.分母中的余弦来自这样一个事实:给定纬度的经度长度比赤道短得多.
因此,如果地球的周长为40075.04 km,要向北/向移动5 m,您将从纬度添加/减去0.0000449并使用相同的经度.要向西/向东移动5米,您将使用相同的纬度,并向经度加上/减去0.0000449/cos(纬度).不要忘记边缘情况:近极点你需要将纬度钳位到90°,而在经度180°附近,你需要加上或减去360°以保持经度在正确的范围内.
根据您的数字,范围大约是:
latitude: [23.23903 ; 23.23911]
longitude: [50.45781 ; 50.45791]
Run Code Online (Sandbox Code Playgroud)
更新:请注意,这仍然假设地球是一个完美的球体,它不是.例如,GPS系统将地球模拟为椭圆体,其中赤道为6378.137km,极点距离地球中心6356.7523142km.差异大约是1/300,对许多应用来说都很重要,但在这种情况下,它在误差范围内.
校正经度的公式应该很简单,因为平行线仍然是圆形的:你只需要交换cos(latitude)正确的系数.计算正确的纬度更难,因为经线不是圆而是椭圆,并且椭圆的弧长不能使用基本函数计算,因此必须使用近似.
我想补充一个非常重要的意见(门外汉或为那些谁已经忘记了这一点):
余弦要在弧度纬度,而不是在度计算.
转换:弧度= PI/180*度
(我为自己的答案道歉,但我目前的声誉为35我不能发表评论)