基于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
相关产品推荐
相关产品推荐

