首页 > 解决方案 > 计算球坐标中两点之间的距离

问题描述

我尝试计算球坐标中两点之间的距离。

有两个经纬度数组,大小约为 1100000

lat = [-10, 10, 1, 82, ..., -72]
lon = [120, -58, 13, 22, ..., 122]

还有一个标准点

loc_lat = -60
loc_lon = -50

所以我尝试使用下面的代码进行计算,但这需要太多时间。有什么有效的方法吗?

from geopy import distance    
D_from_loc = [distance.distance((lat[i], lon[i]), (loc_lat, loc_lon)).km for i in range(len(lon))]

标签: pythonarraysdistancegeopy

解决方案


sklearn实现非常快;

import numpy as np
from sklearn.metrics import pairwise_distances
size = 1100000
X = np.random.random( (size,2))
Y = np.array([[-60,-50]])

radians_X = np.radians(X)
radians_Y = np.radians(Y)

result = pairwise_distances(radians_X,radians_Y, metric='haversine')
result * 6371000/1000  # multiply by Earth radius to get kilometers

这将需要 <1 秒。确保测试您是否有正确的纬度/经度顺序,即成sklearn(lat,long)。此外,结果可能与其他实现略有不同,因为地球需要近似为一个大球体。精确半径的选择具有(小)影响。


推荐阅读