python - 计算球坐标中两点之间的距离
问题描述
我尝试计算球坐标中两点之间的距离。
有两个经纬度数组,大小约为 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))]
解决方案
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)
。此外,结果可能与其他实现略有不同,因为地球需要近似为一个大球体。精确半径的选择具有(小)影响。
推荐阅读
- amazon-web-services - SSH端口转发与秘密文件(mac)
- python - 'numpy.reshape' 和 'ndarray.reshape' 如何等效?
- html - 引导卡中的中心进度条
- r - 难以接近的点被置于边界上
- python - 根据 WTForms 上单独字段中的输入验证 StringField
- composer-php - bower-asset 无法下载 bower-asset/jquery-ui
- java - Windowbuilder Java Eclipse 中的空指针异常
- xml - 使用 Unix 脚本计算元素下的 xml 元素
- android - 填充数据不可见的片段?
- c# - XmlSerializer 和数组属性 C# - Roslyn 抱怨