You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算两个数据集内各站点间的最小距离?(附问题代码)

问题分析与解决建议

你的代码无法运行的核心问题是遍历对象错误:你把数据集转成字典后,循环遍历的是字典的键(比如site_id、latitude这类列名),而不是每个站点的坐标对,geopy.distance需要的是单个坐标元组((纬度, 经度)),不是整列数据,所以会报错。

修正步骤与代码示例

  1. 首先确保dataset1和dataset2是Pandas DataFrame(取消注释你代码里的pd.DataFrame转换行,或者直接使用原始的DataFrame)
  2. 遍历dataset1的每个站点,提取其坐标,再与dataset2的所有站点坐标计算距离,筛选出最小值
  3. 将最小距离存入dataset1的新列中

修正后的代码:

from geopy import distance
import pandas as pd

# 确保数据集是DataFrame(如果原始dataset1/dataset2已经是DataFrame,这两行可以省略)
dataset1 = pd.DataFrame({
    'site_id': dataset1['site_id'],
    'latitude': dataset1['latitude'],
    'longitude': dataset1['longitude']
})
dataset2 = pd.DataFrame({
    'site_id': dataset2['site_id'],
    'latitude': dataset2['latitude'],
    'longitude': dataset2['longitude']
})

# 新增一列存储最小距离
dataset1['min_distance_to_dataset2'] = 0.0

# 遍历dataset1的每个站点
for idx, row in dataset1.iterrows():
    # 获取当前站点的坐标
    current_coord = (row['latitude'], row['longitude'])
    min_dist = float('inf')  # 初始化最小距离为无穷大
    
    # 遍历dataset2的所有站点计算距离
    for _, d_row in dataset2.iterrows():
        target_coord = (d_row['latitude'], d_row['longitude'])
        dist_km = distance.distance(current_coord, target_coord).km
        
        # 更新最小距离
        if dist_km < min_dist:
            min_dist = dist_km
    
    # 将最小距离存入新列
    dataset1.loc[idx, 'min_distance_to_dataset2'] = min_dist
    print(f"站点{row['site_id']}到dataset2的最近距离: {min_dist:.2f} km")

# 查看结果
print(dataset1)

优化建议(针对大数据集)

如果你的数据集行数较多,双重循环会非常慢,推荐使用scipy.spatial.distance.cdist批量计算距离矩阵,再取每行的最小值,效率会提升很多:

from geopy.distance import geodesic
from scipy.spatial.distance import cdist
import pandas as pd

# 提取坐标数组
coords1 = dataset1[['latitude', 'longitude']].values
coords2 = dataset2[['latitude', 'longitude']].values

# 批量计算距离矩阵(注意geodesic需要转换为函数传入)
distance_matrix = cdist(coords1, coords2, lambda u, v: geodesic(u, v).km)

# 取每行的最小值,即每个站点的最近距离
dataset1['min_distance_to_dataset2'] = distance_matrix.min(axis=1)

内容的提问来源于stack exchange,提问作者S L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:52:13