Python - 从 long/lat 的两个不同列表计算距离

Python - Calculating distances from two different list of long/lat

我有两个带有经度和纬度坐标的数据框。 df1 有 20 个坐标,df2 有 600 个坐标。我正在尝试做的是获取 df1 中的每个坐标并在 df 中找到最接近的坐标。例如,df1 中的第一个坐标是 52.2296756、21.0122287,因此我必须以某种方式创建循环以获取这两个值并计算 df2 中每个坐标和 return 距离最短的坐标的距离。

到目前为止我有这个代码:

import geopy.distance
import pandas as pd

coords_1 = (52.2296756, 21.0122287)
coords_2 = (52.406374, 16.9251681)

print(geopy.distance.vincenty(coords_1, coords_2).km)

我将如何编写此函数以从 df1 中获取第一个坐标并针对 df 中的每个坐标和 return 最近的坐标执行计算?

好吧,你可以遍历你的数据框,一个一个地计算距离,但如果你有更大的数据,我不推荐它。

# Find the minimum distances
min_distances = []
longitudes = []
latitudes = []

for index1, row1 in df1.iterrows():
  coords_1 = (row1['longitude'], row1['latitude'])
  min_distance = 0
  long = 0
  lat = 0

  for index2, row2 in df2.iterrows():
    coords_2 = (row2['longitude'], row2['latitude'])

    if min_distance == 0: 
      min_distance = geopy.distance.vincenty(coords_1, coords_2).km
      continue

    distance = geopy.distance.vincenty(coords_1, coords_2).km
    if distance < min_distance:
      min_distance = distance
      long = row2['longitude']
      lat = row2['latitude']

  min_distances.append(min_distance)
  longitudes.append(long)
  latitudes.append(lat)

# Create a column based on the result
df1['min_distance'] = min_distances
df1['long'] = longitudes
df1['lat'] = latitudes