是否有一个Python包可以有效地计算数组a
中每个(纬度,经度)点到数组b
中每个(纬度,经度)点的最小大圆距离?例如scipy.spatial.distance.cdist不幸的是,就我所见,它不支持球面距离。你知道吗
对于许多数据点(例如,a
和b
分别有~70000和~1200个点),如果需要使用不同的a
和b
数组重复迭代,则类似于下面示例的手动计算会变得太慢。你知道吗
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)
由于大圆的长度与弦的长度成正比,因此最小大圆距离等价于嵌入欧氏三维空间的点的最小距离。你知道吗
所以我建议计算相当于每个经纬度对的x,y,z坐标,并使用前面提到的scipy函数
找到最短的三维欧氏距离,可以很容易地转换回大圆距离。你知道吗
相关问题 更多 >
编程相关推荐