我有一个小的算法问题。
我正在开发一款Android应用程序。我获取GPS坐标。例如:纬度:23.23907
,经度:50.45786
。
所以我得到了一个点。我想计算这个点加减5米的边界细节。也就是说:
[23.23907 - 5 meters ; 23.23907 + 5 meters]
[50.45786 - 5 meters ; 50.45786 + 5 meters]
如何进行这个计算?
非常感谢!
我有一个小的算法问题。
我正在开发一款Android应用程序。我获取GPS坐标。例如:纬度:23.23907
,经度:50.45786
。
所以我得到了一个点。我想计算这个点加减5米的边界细节。也就是说:
[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(latitude))度。分母中的余弦来自于该纬度下经线的长度比赤道短得多。
因此,如果地球的周长为40075.04公里,则向南/北移动5米将从纬度中加/减0.0000449并使用相同的经度。向西/东移动5米将使用相同的纬度,并将0.0000449/cos(latitude)加/减到经度上。不要忘记极端情况:在极地附近,您必须将纬度夹紧到90°,在经度180°附近,您将需要添加或减去360°以保持经度在正确的范围内。
根据您的数字,范围约为:
latitude: [23.23903 ; 23.23911]
longitude: [50.45781 ; 50.45791]
修正经度的公式应该很简单,因为平行线仍然是圆:你只需要将cos(latitude)
换成正确的系数即可。计算正确的纬度较难,因为子午线不是圆而是椭圆,并且椭圆弧长无法使用初等函数计算,因此必须使用近似值。
我想要添加一个非常重要的评论:
余弦值应该根据纬度以弧度而不是角度计算。
转换公式:弧度 = PI / 180 * 角度