基于权重的地图匹配技术

基于权重的地图匹配技术地图匹配技术概览文章目录目录地图匹配技术概览文章目录前言一 地图匹配概述二 轨迹预处理 1 降噪 1 1 中值滤波 1 2 极值滤波 1 3 分段 1 4 插值算法三 基于权重的地图匹配算法 3 1 计算方向相似度

大家好,欢迎来到IT知识分享网。


前言

随着生活质量的日益提高,地图相关技术已经渗透到人们生活的各个角落,本文对地图匹配技术,进行简单的概述和实现,为没接触过地图开放的朋友,又想要了解相关技术的提供一个参考信息,内容有误之处,还请大神指点。

一、地图匹配概述

由于GPS技术特性原因,定位结果受客观存在的环境因素影响,我们拿到的原始轨迹数据并不是我们在轨迹结果上看到的那么整洁、规范和有序,如果直接把这些点打到地图上,那么我们的行动轨迹,可能看起来就是这样:

基于权重的地图匹配技术

所以信号也有颗不安分的心,这份轨迹数据让人看起来很灰心,因为勺子里面装了一些不该有的东西。那么我们需要通过一系列的技术手段,来保留我们想要的、看起来合理的轨迹,去掉看起来不合理的数据。

这一系列的技术手段,包括降噪、分段、抽稀、路网匹配、轨迹补偿等,如下图

基于权重的地图匹配技术

降噪:降噪技术在数据处理方面应用得非常广泛,例如BI、机器学习等领域,数据几乎都需要进行噪点处理,降噪后的数据通常会存在多多少少的失真,这个缺陷可以通过后期的路网匹配来进行修正;

抽稀:浮点运算是个比较消耗CPU性能的计算,我们通常需要对原始数据进行抽稀处理,将原始数据精简为足以还原轨迹的数量即可;

路网匹配:由于信号偏移、降噪处理等因素,导致有些轨迹点是不在道路网上的,当我们把这些点打到地图上以后,会发现我们可能行走在山顶、湖泊、大海,显然这并不合理,所以我们需要结合路网数据,将轨迹拟合到道路网。

二、轨迹预处理

1.降噪

剔除数据中的冗余点和噪音点,通常使用,噪音滤波技术,主要算法包括中值滤波、均值滤波、卡尔曼滤波等;

轨迹压缩技术,通常使用道格拉斯压缩算法;

轨迹分段技术,通常使用网格划分算法,以及角度、密度、速度相似度匹配算法

后续小节将对各个处理节点算法进行一一详解。

1.1 中值滤波

当时由于项目时间原因,中值滤波算法是本次主要降噪算法,该算法在当前版本中,实现成本、学习成本、处理效果是最优选择。

算法原理

1、对坐标点Pi,获取前后n(n为大于2的偶数)个节点的集合R;
2、将R的经度、纬度,分别进行正序排序;
3、分别取经度和纬度的中间值,作为该节点的最终经度和纬度;

图例:

基于权重的地图匹配技术

关键代码:

/ 起始索引,前面range个坐标不处理 int startIndex = STEP_SIZE / 2 + 1; // 结束索引,后range个坐标不处理         int endIndex = tracks.size() - STEP_SIZE / 2;         // STEP_SIZE每次处理的坐标个数,除以二即为前后处理的范围         int range = STEP_SIZE / 2;         for (int i = startIndex; i < endIndex; i++) {             UserTrackDTO track = tracks.get(i);             List<Double> lngs = new ArrayList<>();             List<Double> lats = new ArrayList<>();             // 获取预定范围间的所有经度和纬度             for (int j = i - range; j <= i + range; j++) {                 lngs.add(tracks.get(j).getLngDouble());                 lats.add(tracks.get(j).getLatDouble());             }             // 排序             Collections.sort(lngs);             Collections.sort(lats);             // 取中间             track.setLng(String.valueOf(lngs.get(3)));             track.setLat(String.valueOf(lats.get(3)));     }

中值滤波的缺点:对于连续多个噪点的数据处理得并不理想,增加步长会增加时间复杂度和严重失真,后续会考虑引入卡尔曼滤波算法看看效果;

1.2 极值滤波

算法原理
1、计算各个坐标点距离上一个点的距离、速度;
2、按比例移除距离、速度较大的点;
关键代码:

 tracks.get(0).setDistance(0);         for (int i = 1; i < tracks.size(); i++) {             UserTrackDTO lastTrack = tracks.get(i - 1);             UserTrackDTO track = tracks.get(i);             Double distance = DistanceHepler.distance(track, lastTrack);             track.setDistance(distance.intValue());         }         Double maxSize = tracks.size() * 0.80D;         tracks = tracks.stream()                 .sorted(Comparator.comparing(UserTrackDTO::getDistance))                 .collect(Collectors.toList());         tracks = tracks.stream()                 .limit(maxSize.intValue())                 .collect(Collectors.toList());         tracks = tracks.stream()                 .sorted(Comparator.comparing(UserTrackDTO::getIndex))                 .collect(Collectors.toList());

算法原理
(1)在曲线首尾两点A,B之间连接一条直线AB,该直线为曲线的弦;
(2)得到曲线上离该直线段距离最大的点C,计算其与AB的距离d;
(3)比较该距离与预先给定的阈值threshold的大小,如果小于threshold,则该直线段作为曲线的近似,该段曲线处理完毕。
(4)如果距离大于阈值,则用C将曲线分为两段AC和BC,并分别对两段曲线进行1~3的处理。
(5)当所有曲线都处理完毕时,依次连接各个分割点形成的折线,即可以作为曲线的近似。
图例:

基于权重的地图匹配技术

关键代码:


                                                        

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156262.html

(0)
上一篇 2025-02-13 22:05
下一篇 2025-02-13 22:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信