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

基于经纬度的坐标点列表距离求和实现求助

计算连续坐标点的距离总和

没问题,我来帮你搞定这个连续点距离总和的计算!你的Haversine距离函数已经写得很到位了,现在只需要遍历轨迹里的连续点对,依次计算距离并累加就行。

实现思路

  1. 初始化一个总和变量,用来累加每一段的距离
  2. 遍历轨迹列表中的连续点对:也就是第i个点和第i+1个点(i从0到轨迹长度-2,避免索引越界)
  3. 对每一对点,提取它们的纬度和经度,传入你写的distance函数计算距离
  4. 把每次计算的距离加到总和变量里

完整代码示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:46:26