Haversine 距离计算

Haversine 公式,也称为大圆距离,是计算地球表面两点之间角度距离的一种方法。在这种计算中,每个点的第一个坐标被假定为纬度,第二个坐标为经度,且这些坐标是以弧度为单位给出的。数据的维度必须是2。

Haversine 距离的计算公式如下:

D(x, y) = 2 * arcsin[sqrt(sin^2((x_lat - y_lat) / 2) + cos(x_lat) * cos(y_lat) * sin^2((x_lon - y_lon) / 2))]

参数说明:

  • X:形状为 (n_samples_X, 2) 的数组或稀疏矩阵,表示特征数组。
  • Y:形状为 (n_samples_Y, 2) 的数组或稀疏矩阵,默认为 None。如果为 None,则使用 Y=X。

返回值:

  • distances:形状为 (n_samples_X, n_samples_Y) 的 ndarray,表示距离矩阵。

注意:由于地球近似为球形,Haversine 公式提供了地球表面两点之间距离的良好近似,平均误差小于1%。

例如,想要计算阿根廷布宜诺斯艾利斯的埃塞萨国际机场和法国巴黎的戴高乐机场之间的距离。

from sklearn.metrics.pairwise import haversine_distances from math import radians bsas = [-34.83333, -58.5166646] paris = [49.0083899664, 2.53844117956] bsas_in_radians = [radians(_) for _ in bsas] paris_in_radians = [radians(_) for _ in paris] result = haversine_distances([bsas_in_radians, paris_in_radians]) result * 6371000 / 1000 # 乘以地球半径得到千米

上述代码将输出一个距离矩阵,其中包含了埃塞萨国际机场和戴高乐机场之间的距离。通过将结果乘以地球的平均半径(大约6371000米),可以将距离从弧度转换为千米。

在实际应用中,Haversine 公式被广泛用于地理信息系统(GIS)、地图服务和导航系统中,以计算两点之间的最短路径。这种计算方法不仅适用于地球表面的距离计算,也可以推广到其他球形体上。

尽管 Haversine 公式提供了一种相对简单的计算方法,但在处理大量数据或需要更高精度的场合时,可能需要考虑地球的椭球体形状和其他因素。在这些情况下,更复杂的地理空间计算方法,如 Vincenty 公式,可能会提供更准确的结果。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485