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

基于Python与Pandas的经纬度点间距离计算问题求助

多经纬度点间距离计算实现方案

一、基础距离计算(基于Haversine公式)

你的数据集已完成经纬度转弧度,直接用Haversine公式即可计算两点间球面距离,以下是适配你数据集的Pandas实现代码:

import pandas as pd
import numpy as np
from itertools import product

# 假设你的数据框名为df(可根据实际变量名替换)
df = pd.DataFrame({
    'lat': [0.200081, 0.775020, 0.260559, 1.203430, -0.029293],
    'long': [0.246723, -1.437292, -1.594263, -2.425601, 0.592702]
}, index=['Veronica Session', 'Lynne Donahoo', 'Debbie Hanley', 'Lisandra Earls', 'Sybil Leef'])

def haversine(lat1, lon1, lat2, lon2):
    # 地球半径(单位:千米,若需英里可改为3956)
    R = 6371.0
    dlat = lat2 - lat1
    dlon = lon2 - lon1
    a = np.sin(dlat / 2)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon / 2)**2
    c = 2 * np.arctan2(np.sqrt(a), np.sqrt(1 - a))
    return R * c

# 生成所有不重复点对的距离结果
distance_records = []
for (name1, row1), (name2, row2) in product(df.iterrows(), df.iterrows()):
    if name1 < name2:  # 避免重复计算同一对点
        dist = round(haversine(row1['lat'], row1['long'], row2['lat'], row2['long']), 2)
        distance_records.append({
            '起点': name1,
            '终点': name2,
            '距离(km)': dist
        })

distance_df = pd.DataFrame(distance_records)
print(distance_df)

运行后会输出所有点对间的距离(保留两位小数),同时避免重复计算。

二、后续路线扩展优化方向

  • 最优路径规划:若需遍历所有点的最短路线,可基于TSP(旅行商问题)实现,推荐用ortools库的RoutingModel做精确求解,或用scipy优化模块做近似计算。
  • 批量计算提速:数据量较大时,改用向量化运算替代循环,利用Numpy广播机制一次性计算所有点对的距离,大幅提升效率。
  • 自定义距离规则:如果需要考虑道路距离而非球面直线距离,可接入地图API(如高德、百度)的路径规划接口,但需注意调用限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:50:33