高效的测地线最近邻



从纬度/经度数据(以弧度为单位(开始,我正在尝试有效地找到最近的n个邻居,理想情况下是测地线(WGS-84(距离。

现在我正在使用 sklearn 的 BallTree 具有哈弗正弦距离(KD-Tres 只采用闵可夫斯基距离(,这既好又快(3-4 秒在 7500 个可能的匹配中找到 1200 个位置的最近 5 个邻居(,但不如我需要的那么准确。法典:

tree = BallTree(possible_matches[['x', 'y']], leaf_size=2, metric='haversine')
distances, indices = tree.query(locations[['x', 'y']], k=5)

当我在自定义函数中替换公制 (metric=lambda u, v: geopy.distance.geodesic(u, v).miles( 时,它需要"不合理"的时间(与上述相同的情况下为 4 分钟(。据记载,自定义函数可能需要很长时间,但不能帮助我解决问题。

我查看了使用带有 ECEF 坐标和欧几里得距离的 KD 树,但我不确定这是否真的更准确。

如何保持当前方法的速度,同时提高距离精度?

你的指标速度慢的主要原因是它是用Python编写的,而sklearn中的其他指标是用Cython/C++/C编写的。

例如,这里讨论的随机森林或这里,你必须在Cython中实现你的指标,分叉你自己的BallTree版本,并在那里包含你的自定义指标。

最新更新