查找 GPS 坐标组之间的最小距离

问题描述

几年前我问过一个与此类似的问题,并得到了一个很好的实用答案。但是,我希望显着提高此代码的速度。

我基本上有两组 gps 坐标:例如,一组数据框是酒店的坐标,另一组是机场的坐标。我想查看具有纬度/经度坐标的数据框 A(酒店),然后从每个酒店的数据框 B 中找到最近的机场。

我可以使用以下代码执行此操作,并且一切正常:

import pandas as pd
import geopy.distance

df = pd.read_csv('AirportCoords.csv')
df2 = pd.read_csv('HotelCoords.csv')


for i,row in df.iterrows(): # A
    a = row.latitude,row.longitude
    distances = []
    for j,row2 in df2.iterrows(): # B
        b = row2.lat,row2.long
        distances.append(geopy.distance.geodesic(a,b).km)

    min_distance = min(distances)
    min_index = distances.index(min_distance)

但是,这需要很长时间。我试图通过使用 scipy 的 cdist 来加快速度,但是,虽然速度很快,但返回的是欧几里德距离。

有什么方法可以将 cdist 输出转换为我想要的?或者有什么其他方法可以让这个过程快速进行?

编辑添加cdist代码

from scipy.spatial import distance
a = np.array(df[['lat','long']])
b = np.array(df2[['lat','long']])

print(distance.cdist(a,b).min(axis=1)

这会打印最短的欧几里得距离,而我正在尝试获取公里。

提前致谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...