基于经纬度的坐标点列表距离求和实现求助
计算连续坐标点的距离总和
没问题,我来帮你搞定这个连续点距离总和的计算!你的Haversine距离函数已经写得很到位了,现在只需要遍历轨迹里的连续点对,依次计算距离并累加就行。
实现思路
- 初始化一个总和变量,用来累加每一段的距离
- 遍历轨迹列表中的连续点对:也就是第i个点和第i+1个点(i从0到轨迹长度-2,避免索引越界)
- 对每一对点,提取它们的纬度和经度,传入你写的
distance函数计算距离 - 把每次计算的距离加到总和变量里
完整代码示例
import math def distance(lat_start, lon_start, lat_ciel, lon_ciel): R = 6371000 lat_start = math.radians(lat_start) lon_start = math.radians(lon_start) lat_ciel = math.radians(lat_ciel) lon_ciel = math.radians(lon_ciel) DiffLat = lat_ciel - lat_start DiffLon = lon_ciel - lon_start a = math.sin(DiffLat/2) ** 2 + math.cos(lat_start) * math.cos(lat_ciel) * math.sin(DiffLon / 2) ** 2 c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) return R * c def calculate_total_distance(track): total_distance = 0.0 # 遍历所有连续点对 for i in range(len(track) - 1): # 提取当前点和下一个点的经纬度,忽略海拔值 current_lat, current_lon, _ = track[i] next_lat, next_lon, _ = track[i+1] # 计算两点距离并累加 segment_distance = distance(current_lat, current_lon, next_lat, next_lon) total_distance += segment_distance return total_distance # 测试你的轨迹数据 track = [[49.16967, 20.21491, 1343], [49.17066, 20.22002, 1373], [49.16979, 20.22416, 1408], [49.17077, 20.22186, 1422], [49.17258, 20.22094, 1467], [49.17294, 20.21944, 1460]] total = calculate_total_distance(track) print(f"总距离:{total} 米")
额外说明
- 我们用
range(len(track)-1)生成循环索引,刚好对应轨迹里所有的连续点对(6个点对应5段距离) - 每个点的第三个元素是海拔,这里用下划线
_忽略它,因为你的距离函数只用到经纬度 - 输出的总距离单位是米,和
distance函数的返回值一致(因为R设置的是6371000米);如果需要转换成千米,只需把结果除以1000即可:print(f"总距离:{total/1000:.2f} 千米")
内容的提问来源于stack exchange,提问作者Jozef
相关产品推荐
相关产品推荐

