我有一个小算法问题。
我正在开发一个 Android 应用程序。我得到 GPS 坐标。例如:纬度:23.23907
,经度:50.45786
。
所以我得到了一点。我想计算这一点正负 5 米的边界细节。IE:
[23.23907 - 5 meters ; 23.23907 + 5 meters]
[50.45786 - 5 meters ; 50.45786 + 5 meters]
如何进行这个计算?
非常感谢你!
我有一个小算法问题。
我正在开发一个 Android 应用程序。我得到 GPS 坐标。例如:纬度:23.23907
,经度:50.45786
。
所以我得到了一点。我想计算这一点正负 5 米的边界细节。IE:
[23.23907 - 5 meters ; 23.23907 + 5 meters]
[50.45786 - 5 meters ; 50.45786 + 5 meters]
如何进行这个计算?
非常感谢你!
当您仅在南北和东西方向工作时,可以大大简化半正弦公式。
如果地球的周长是 C,则给定点以南 d 公里处的点是向南360*d/C度。向东 d 公里处的点是向东360*d/(C*cos(纬度))度。分母中的余弦来自这样一个事实,即给定纬度的经度长度比赤道短那么多。
因此,如果地球的周长为 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]
更新:请注意,这仍然假设地球是一个完美的球体,但事实并非如此。例如,GPS 系统将地球建模为一个椭球体,其中赤道位于 6378.137 公里处,两极位于距地球中心 6356.7523142 公里处。差异大约为 1/300,对于许多应用程序来说非常重要,但在这种情况下,它在误差范围内。
修正经度公式应该很简单,因为平行线仍然是圆圈:您只需要交换cos(latitude)
正确的系数。计算正确的纬度比较困难,因为子午线不是圆而是椭圆,而且椭圆的弧长不能用初等函数计算,所以必须使用近似值。
我想添加一个非常重要的评论:
余弦是在纬度上以弧度而不是度数计算的。
换算:弧度 = PI / 180 * 度