Return longitude/latitude 组坐标之间的最小距离

Return minimum distance between sets of longitude/latitude coordinates

我正在编写代码来计算两组点之间的最短距离。本质上,我已经创建了一个带有一堆坐标位置的 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 中的每个点?

我正在尝试找到一种方法 运行 它会检查 A1 与 B1、B2、B3 等,然后返回 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)

你说的是将 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")