抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

维基百科推荐使用公式,理由是公式用到了大量余弦函数, 而两点间距离很短时(比如地球表面上相距几百米的两点),余弦函数会得出 0.999… 的结果, 会导致较大的舍入误差。而公式采用了正弦函数,即使距离很小,也能保持足够的有效数字。 以前采用三角函数表计算时的确会有这个问题,但经过实际验证,采用计算机来计算时,两个公式的区别不大。 稳妥起见,这里还是采用公式。

Haversine 公式


其中

为地球半径,可取平均值
, 表示两点的纬度;
表示两点经度的差值。

距离计算函数

下面就是计算球面间两点之间距离的函数。

from math import sin, asin, cos, radians, fabs, sqrt

EARTH_RADIUS=6371 # 地球平均半径,6371km

def hav(theta):
s = sin(theta / 2)
return s * s

def get_distance_hav(lat0, lng0, lat1, lng1):
"用haversine公式计算球面两点间的距离。"
# 经纬度转换成弧度
lat0 = radians(lat0)
lat1 = radians(lat1)
lng0 = radians(lng0)
lng1 = radians(lng1)

dlng = fabs(lng0 - lng1)
dlat = fabs(lat0 - lat1)
h = hav(dlat) + cos(lat0) * cos(lat1) * hav(dlng)
distance = 2 * EARTH_RADIUS * asin(sqrt(h))

return distance

相关文献

LBS 球面距离公式

推荐阅读
LaTeX数学符号语法速查表 LaTeX数学符号语法速查表 特征向量和特征值的几何本质 特征向量和特征值的几何本质 传输介质 传输介质 尝试在博客中添加简易文章推荐功能 尝试在博客中添加简易文章推荐功能 基于K均值聚类的网络流量异常检测(pyspark) 基于K均值聚类的网络流量异常检测(pyspark) 回顾几个有趣的小题目 回顾几个有趣的小题目

留言区

Are You A Robot?