【问题标题】:Calculate distance between two points in spherical coordinate计算球坐标中两点之间的距离
【发布时间】:2021-01-15 08:05:49
【问题描述】:

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

有两个经纬度数组,大小在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))]

【问题讨论】:

标签: python arrays distance geopy


【解决方案1】:

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

这需要 sklearn 是 (lat,long) 对。此外,结果可能与其他实现略有不同,因为地球需要近似为一个大球体。精确半径的选择有(小)影响。

【讨论】: