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
我有两个带有经度和纬度坐标的数据框。 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