在计算两个经纬度点之间的球面距离时,尽管余弦定理在数学上与半正矢公式等价,但在实际编程应用中,余弦定理往往不如半正矢公式受青睐。这主要源于计算机处理数学运算时的边界问题,而非数学原理本身。以下从计算精度的角度简要解释其原因。
首先,考虑几个基本事实:
1.地球上1弧度约对应 107 米的距离;
2.当角度值x接近零时,余弦函数可近似为 1 - x²/2 ;
3.双精度浮点数保留小数点后15位。
当计算小距离(例如1米,相当于10⁻⁷弧度)时,余弦定理会涉及1 - (10⁻⁷)² = 1 - 10⁻¹⁴的运算,此时需要小数点后第15位参与计算,这会导致一定程度的精度损失。在余弦定理中用于将角度转换为距离的反余弦函数(acos)会进一步放大这一问题。导致计算米级距离时,acos可能无法准确计算,甚至在极端情况下因输入值超出定义域而引发程序错误或崩溃。因此,在涉及几百米以内距离时,使用余弦定理可能带来无法接受的精度损失。
相比之下,半正矢公式通过反正切函数(atan2)实现角度到距离的转换。由于小角度的正切值近似等于角度本身,atan2的计算过程几乎无精度损失。这使得半正矢公式在处理小距离(如1米以下)时表现稳健,成为更可靠的选择。
总之,尽管两种方法数学等价,但半正矢公式凭借其计算稳定性,尤其在高精度要求的场景中,更具实用优势。
点击这里,获取半正矢公式JavaScript代码
更多GIS算法问题,欢迎留言或联系我们。转载须注明出处。