返回经度/纬度坐标集之间的最小距离

时间:2019-11-13 19:55:47

标签: python geopy

我正在编写代码以计算两组点之间的最短距离。本质上,我创建了一个在坐标中有一堆位置的csv,在第二个csv中有坐标堆中的第二位置。例如,列表A中的坐标可以是(50,-10),(60,70),(40,-19),列表B中的坐标可以是(40,87),(60,90),( 23,20)。我在网上找到的所有可帮助我在列表和单点之间进行计算的内容:这对我而言不起作用。

到目前为止,我已经能够计算出所有点之间的距离(因此,A1和B1,A1和B2,A1和B3,A2和B1等)。很好,但是我想要的是从列表A中的点1到列表B中的任何点的最小距离。从本质上讲,列表B中的哪个位置最接近列表A中的每个点?

我试图找到一种运行它的方法,以便它针对B1,B2,B3等检查A1,然后返回,例如,最短的距离是A1和B3之间的x英里。

到目前为止,我的情况是:

import pandas as pd
import geopy.distance

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

for i,row in df2.iterrows():
coordinate = row.lat, row.long
for i,row in df.iterrows():
    coordinate2 = row.latitude, row.longitude

    distance = geopy.distance.geodesic(coordinate, coordinate2).km
    print(distance)

1 个答案:

答案 0 :(得分:1)

您正在谈论将A的每个元素与B的每个元素进行比较,这意味着您应该有一个嵌套循环,但是示例代码实际上按顺序有2个循环。

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)

    print("A", i, "is closest to B", min_index, min_distance, "km")