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

2024-04-28 08:48:05 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有一个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)

Tags: none距离npscipy数组sincosspatial
1条回答
网友
1楼 · 发布于 2024-04-28 08:48:05

由于大圆的长度与弦的长度成正比,因此最小大圆距离等价于嵌入欧氏三维空间的点的最小距离。你知道吗

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

scipy.spatial.distance.cdist

找到最短的三维欧氏距离,可以很容易地转换回大圆距离。你知道吗

相关问题 更多 >