qq_44702103 2024-03-11 20:16 采纳率: 0%
浏览 111
已结题

懂路网匹配、地图匹配相关,了解并会使用相关开源库如graphhopper

通过数据库查询出这条轨迹,它是缺失了中间某一段的,因为在设备掉电宕机
到重启之间有一段缺失轨迹未被收集到。我们调用路网匹配接口
得到缺失前后轨迹序列映射到路网后的路径序列。
最后,使用 路网匹配得到的路径进行均匀采样,以此恢复缺失的轨迹序列。
首先获得缺失轨迹段前后两个轨迹点的信息以及映射到路段后投影点位置,提取
两点的时间戳,结合采样周期得到中间缺失轨迹点序列的点个数 𝑠 以及缺失的每
个点的时间戳,以缺失段前一个轨迹点映射到路段后投影点为起点,后一个轨迹点
映射到路段后投影点为终点,得出中间路径的总长度 𝑙,在中间路径上每隔 ⌈ 𝑙
𝑠+1 ⌉
取一个轨迹点算出其经纬度坐标并赋予对应时间戳,并插入到原轨迹点序列对应
位置上,以此达到恢复缺失轨迹点的目的,得到重建后的完整轨迹

  • 写回答

27条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-11 20:16
    关注

    引自免费微信小程序:皆我百晓生

    针对您所描述的问题,解决缺失轨迹恢复的方案可以按照以下步骤进行:

    1. 获取缺失前后轨迹点信息: 首先从数据库中获取缺失轨迹段前后的两个有效轨迹点,并利用路网匹配接口将这两个点映射到实际路网上,得到它们在路段上的投影位置。

    2. 计算采样点个数和时间戳: 根据前后两个点的时间戳差异以及设定的采样周期,计算出中间缺失部分需要插入的轨迹点个数 s。同时,为每个待插入的点生成对应的时间戳。

    3. 确定路径长度并均匀采样: 计算出缺失段在路网中的实际长度 l,然后根据采样点个数 s 来决定每隔多长距离取一个点。这里的间隔公式是 distance_interval = l / (s + 1)(向上取整),即每隔 ⌈l/(s+1)⌉ 单位长度取一个点。

    4. 生成缺失轨迹点: 在前一个投影点与后一个投影点之间的路径上进行均匀采样,生成经纬度坐标。这里可以用循环实现:

    import math
    
    # 假设 projected_start 和 projected_end 分别代表缺失段前后映射到路网的投影点
    projected_start, projected_end = get_projected_points() 
    length = calculate_path_length(projected_start, projected_end)
    num_samples = s + 1
    interval_distance = math.ceil(length / num_samples)
    
    for i in range(1, num_samples):
        sample_distance = interval_distance * i
        sampled_point = interpolate_on_path(projected_start, projected_end, sample_distance)
        timestamp = calculate_timestamp(projected_start.timestamp, projected_end.timestamp, i)
        # 将采样的经纬度坐标及时间戳插入原始轨迹序列中
        insert_to_trajectory(sampled_point, timestamp)
    
    1. 插值函数实现: 上述代码片段中 interpolate_on_path() 函数用于在两点间进行线性插值或其他更精确的地理空间插值方法以获取经纬度坐标。而 calculate_timestamp() 函数则根据前后点的时间戳来分配中间点的时间戳。

    请注意,上述代码仅为示例逻辑,具体实现时需根据graphhopper等开源库提供的API和实际需求进行调整。此外,在实际情况中,路网匹配可能涉及复杂的空间分析,如考虑道路方向、转弯限制等因素,因此插值过程可能需要结合实际路网拓扑结构进行优化。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月16日
  • 赞助了问题酬金200元 3月12日
  • 请提交代码 3月12日
  • 创建了问题 3月11日