java 轨迹平滑算法_地图坐标轨迹平滑和纠偏

轨迹平滑和纠偏

纠偏

通过gps获取坐标点时 因为gps信号不稳定等原因 出现坐标点异常 不符合实际 进行异常点的处理 来对轨迹纠正

轨迹偏移不正常

7333180474e341fcc76b727a34e23e03.png

取得轨迹坐标集合 对此段轨迹设置起点和终点 取得相邻两坐标点 计算出两点之间距离 对比获取坐标点的时间 判断坐标时速异常 对坐标点移除处理

代码逻辑

6305520b19ee88ae1f3bc9f3cc4ecbbd.png

e41428466869c158ddc4895888c450bb.png

异常点去除之后轨迹

e43b0520ba4f55947b4ff80a5e3ded9e.png

轨迹平滑处理

实现思路方法

1.百度地图鹰眼服务:

源码主要实现思路:计算相邻坐标点之间距离 通过时间判断速度 挑出 异常点 绑定道路的实现方式

2.数据库坐标去重过滤:

高斯滤波:.

百度鹰眼服务

文档地址:http://lbsyun.baidu.com/index.php?title=yingyan/api/v3/trackupload

上传轨迹 —轨迹处理—返回轨迹

请求方式 http://yingyan.baidu.com/api/v3/track/addpoint //POST请求

参数

核心参数

ak 用户授权标识

Service_id 鹰眼服务标识

entity_name 轨迹所属实例

Longitude 经度

Latitude 纬度

loc_time 获取坐标点时间

coord_type_input 坐标类型

wgs84:GPS 坐标

gcj02:国测局加密坐标

bd09ll:百度经纬度坐标

7eb27aa0593e4f05c42a25771919e7fa.png

返回值参数

6f1d750f3db338d80d8305975652c585.png

多轨迹上传

可上传多个实例的多个轨迹 核心方法 addpoins

http://yingyan.baidu.com/api/v3/track/addpoints //POST请求

所需参数如下

5ea188ddbeb3e6f4be0160ade6d7db2c.png

Point_list 为多个实例和轨迹的集合格式如下 返回值如下

25adffc422e96c5a82065e9dc6d30cc3.png

10c328c18e6dd69887c3cb2a4eb7d472.png这是entity实例 可单个上传或批量

a7370494070dc3975407d91c2d7b73d2.png

这是属于entity的轨迹addpionts 可批量上传 单独上传 进行轨迹处理

可有去噪 抽稀 绑路 终端补偿等 在传递参数时设置 返回纠正后集合

纠正之后

3a85c4b2ea4d10a068fbe5766c3cd8d9.png

数据库坐标去重过滤

以下方案摘取:https://www.jianshu.com/p/1c71d10e18bf

将取到的若干坐标点存入到数据库 核心字段 id 经纬度 时间

434bd80fac397776ccf93e659f7a4c52.png

将数据库坐标点去重

e5fe137b4549df4fb7d5fa7d5bd765b4.png

数据平滑采用高斯滤波进行平滑处理

94dd8a9c186f2d9d3d8150ace8d0832e.png

将处理后的坐标点铺到地图上

5f668c1de58d8c1cead1c691e14b0fe0.png

坐标匹配到道路上去,但是由于精度不是那么可靠,切在转弯处的数据匹配也是明显的错误,但是目前没找到好的解决方案

总结:

无论纠偏、异常点处理、轨迹平滑 其根本都是对坐标点的处理 核心参数是经纬度以及经纬度对应的时间 进行处理 在坐标点做够多的情况下 gps不稳定获取的坐标点不够精确导致的问题

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
贝塞尔数据平滑算法是一种常用于数据平滑处理的算法,它可以通过通过一系列控制点来定义曲线,并且能够对给定的输入数据进行平滑处理。在Java中,我们可以编写一个贝塞尔数据平滑算法的工具类来实现这一功能。 首先,我们需要定义一个Point类,用于表示二维空间中的一个点。这个类可以包含两个属性x和y,分别表示点的横坐标和纵坐标。同时,我们还可以为这个类实现一些常用的方法,例如获取点的横坐标和纵坐标的方法。 接下来,我们可以在工具类中定义一个方法,用于根据给定的控制点列表和平滑度参数来计算出平滑后的曲线上的点。这个方法可以接受一个Point类型的列表作为输入,以及一个平滑度参数smoothness,表示控制点之间的平滑程度。 在这个方法中,我们可以首先计算出每个控制点之间的插值点,通过贝塞尔曲线的计算公式来确定。具体的计算过程可以在for循环中实现,每次计算出一个插值点,然后将其添加到结果列表中。在计算过程中,我们可以根据平滑度参数来调整曲线的平滑程度,例如可以通过调整控制点之间的距离来实现。 最后,我们可以在工具类中定义一个主方法,用于测试这个贝塞尔数据平滑算法。在这个方法中,我们可以创建一个测试用的控制点列表,调用平滑算法的方法来获取平滑后的曲线上的点,并输出结果。 总之,通过编写一个贝塞尔数据平滑算法的工具类,我们可以方便地在Java中进行数据平滑处理。这个工具类可以根据控制点列表和平滑度参数来计算出平滑后的曲线上的点,并可以方便地进行测试和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值