Python 中是否有任何包允许对球体表面的经度/纬度进行类似 kdtree 的操作? (这需要适当考虑球面距离,以及经度环绕)。
最佳答案
我相信来自 scikit-learn 的 BallTree 和 Haversine 指标应该可以为您解决问题。
举个例子:
from sklearn.neighbors import BallTree
import numpy as np
import pandas as pd
cities = pd.DataFrame(data={
'name': [...],
'lat': [...],
'lon': [...]
})
query_lats = [...]
query_lons = [...]
bt = BallTree(np.deg2rad(cities[['lat', 'lon']].values), metric='haversine')
distances, indices = bt.query(np.deg2rad(np.c_[query_lats, query_lons]))
nearest_cities = cities['name'].iloc[indices]
请注意,这会返回假设半径为 1 的球体的距离 - 得到地球上的距离乘以半径 = 6371km
见:
- https://jakevdp.github.io/blog/2013/04/29/benchmarking-nearest-neighbor-searches-in-python/
- https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.BallTree.html
- https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.haversine_distances.html#sklearn.metrics.pairwise.haversine_distances
关于python - 用于经度/纬度的 KDTree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10549402/