Python 点集之间的(最小)大圆距离

Python (minimal) great-circle distance between sets of points

是否有一个Python包可以有效地计算数组中每个(纬度,经度)点a到数组中每个(纬度,经度)点的最小大圆距离b?例如 scipy.spatial.distance.cdist 不幸的是,据我所知,它不支持球面距离。

对于许多数据点(例如 ab 分别有 ~70000 和 ~1200 点),如果使用不同的 ab 数组是必需的。

deg2rad = np.pi/180.0
rho_cos = (np.sin(lat1[:,None]*deg2rad)*np.sin(lat2[None,:]*deg2rad) +
      np.cos(lat1[:,None]*deg2rad)*np.cos(lat2[None,:]*deg2rad)*np.cos(np.abs(lon1[:,None] - lon2[None,:])*deg2rad))    
rho = np.arccos(rho_cos) / deg2rad
rho_min = np.nanmin(rho,axis=1)

由于大圆的长度与其弦的长度成正比,因此最小大圆距离相当于欧几里德3D中嵌入点的最小距离space.

所以我建议计算对应于每个纬度和经度对的 x、y、z 坐标,并使用提到的 scipy 函数

scipy.spatial.distance.cdist

找到最小的 3D 欧几里得距离,它可以很容易地转换回大圆距离。