0

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

对于许多数据点(例如a和分别有 ~70000 和 ~1200 点),如果需要使用不同的和数组b重复迭代,类似于以下示例的手动计算会变得太慢。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)
4

1 回答 1

1

由于大圆的长度与其弦长成正比,因此最小的大圆距离等于嵌入欧几里得 3D 空间中的点的最小距离。

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

scipy.spatial.distance.cdist

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

于 2019-07-16T08:19:47.467 回答