技术教程|百度鹰眼历史轨迹查询:轨迹去噪功能应用

本期教程主要介绍百度鹰眼轨迹服务(下简称鹰眼)WebAPI中的历史轨迹查询API的使用技巧。

开发者将设备的定位信息上传至鹰眼服务后,可以通过 https://yingyan.baidu.com/api/v3/track/gettrack 接口查看指定设备在一段时间内的历史轨迹。详细的接口文档链接可参考https://lbsyun.baidu.com/index.php?title=yingyan/api/v3/trackprocess#service-page-anchor6 。 如果只能查询出开发者上传的原始轨迹,鹰眼服务的价值将大打折扣。那么鹰眼的历史轨迹查询还提供了哪些独家功能呢?

  1. 针对低质飘移轨迹的纠偏能力(去噪、抽稀、绑路);

  2. 针对中断区间的轨迹与里程补偿能力;

  3. 完善的轨迹途径道路信息(道路名称、等级、限速等信息);

 

由于篇幅所限,本篇教程将通过一个例子,着重介绍鹰眼历史轨迹查询接口中的纠偏能力,剩余部分将在后续的教程中介绍,感兴趣的开发者可关注。

  1. 在历史轨迹查询接口中,和纠偏相关的请求参数包括 is_processed 和 process_option 两个:is_processed字段:用于控制是否开启纠偏,只有is_processed字段的值为1时,process_option字段才有效;

  2. process_option字段:包括4个子选项,是本篇教程的重点,后文会详细介绍每个子选项的作用。

 

 

denoise_grade 去噪级别

 

介绍去噪之前,先简单介绍一下噪声从何而来,这要先从轨迹点的定位方式开始讲起。常见的定位终端主要包括3种定位方式:GPS定位、Wi-Fi定位、基站定位。各种定位方式都存在定位误差,我们将真实坐标和定位坐标的直线距离,称为定位精度。不同定位方式的定位精度是有区别的。

  • GPS定位的精度最高,条件好的情况下能达到米级,普遍在20米以下;

  • Wi-Fi定位的精度在百米级,精度较高的Wi-Fi定位的定位精度可以低于50米;

  • 基站定位的精度最低,在千米级,精度较高时可以达到500米左右;


在野外空旷的开阔地带,一般都可以进行GPS定位,可以获得较高的定位精度。而在城市中,情况却并不如意。城市中的高楼大厦、高架桥、隧道、涵洞等建筑物都会对GPS信号产生阻碍,影响定位的精度。运气好的话,比如在商场或写字楼中,可以借助于周边的Wi-Fi进行Wi-Fi定位(你不需要通过密码连上这些Wi-Fi,只需要你的手机等定位设备能搜到这些Wi-Fi即可),在这种情况下,如果你在楼宇中工位坐着,也许会把你定位到公司门口,不过这也还算可以接受。而如果是在隧道中或高架桥下等没有Wi-Fi的地方,就只能依赖于定位精度最差的基站定位了,这种情况下,也许会把你定位到几公里之外的某个地方。

 

当定位点和你的实际位置出现严重的偏差时,轨迹就会产生“飘移”现象。鹰眼轨迹查询中的去噪能力,就是用来消除那些“飘移”点的。而denoise_grade选项,用来让开发者指定去噪的力度。

 

从接口文档中我们看到,该选项可以取从0到5共六个值:0代表不去噪,值越大代表去噪的力度越大,5代表最高的去噪等级。 有一点需要明确的是,除了denoise_grade=0以外,denoise_grade字段取其他的值时,鹰眼都会通过内部一整套复杂的去噪算法来去噪,不同的值只会影响去噪的效果,我们下文会通过一辆城市内行驶的车辆的典型轨迹,详细地演示denoise_grade取不同的值时,对历史轨迹去噪效果的影响。广大开发者在使用鹰眼的历史轨迹查询接口时,可以以此作为参考,选择适合自己的去噪级别。

 

下图所示是一辆车在浙江省杭州市文一路上行驶的原始轨迹。

 

 

图中的轨迹从东南角开始,先向北行驶,后左转沿着文一路向西一直走到图的最左侧。每个白底红框的标签代表轨迹点序号。从图中可以明显地看出整个轨迹中,发生了3处比较明显的飘移。 第一处飘移是在车辆向西行驶过程中,突然向东发生了一次“折返”(137号轨迹点),可以从放大的图中看出:

 

 

第二处飘移是比较明显的偏离了行驶路线的“噪点”(168号轨迹点),可能是由于高大建筑物的遮挡产生的,如下图:

 

 

第三处飘移也很典型,由于从车辆进入文一路隧道,在隧道中没有GPS信号也无法依赖Wi-Fi定位,只能通过基站定位(前文我们介绍的最倒霉的情况),导致文一路隧道中的定位点都“飘移”到了隧道出口的某片区域,如下图:

 

 

这样的原始轨迹,肯定不符合实际的行驶情况。下面我们来看看,在只进行“去噪”的情况下,通过赋予denoise_grade字段不同的值,指定不同的去噪精度时,对轨迹的优化。

 

denoise_grade=0 

 

不去噪,就是查询原始轨迹,请求中和纠偏相关的选项设置如下: 不去噪的轨迹就是原始轨迹,如图1中所示,这里不再重复展示。

 

is_processed=1&process_option=denoise_grade=0,need_mapmatch=0,transport_mode=auto,vacuate_grade=0

 

denoise_grade=2

 

只保留定位精度在500米以内的轨迹点(相当于保留GPS定位点、大部分Wi-Fi定位点和精度较高的基站定位点)后,再通过鹰眼内部的去噪算法进一步去噪。相关选项设置如下:

is_processed=1&process_option=denoise_grade=2,need_mapmatch=0,transport_mode=auto,vacuate_grade=0

 

去噪整体效果如下图:

 

 

我们发现此时,飘移到文一路隧道出口的轨迹点有所减少,但另外2处噪点都没有消除,去噪效果并不明显。

 

denoise_grade=3

 

只保留定位精度在100米以内的轨迹点(相当于保留GPS定位点和大部分Wi-Fi定位点),然后再交给鹰眼内部的去噪算法进行去噪。效果如下:

 

 

可以看出,飘移到隧道出口的点已经少了很多,只剩下一个比较“顽固”的躁点,然而另外2处躁点仍然岿然不动。

 

denoise_grade=4

 

只保留定位精度在50米以内的轨迹点(相当于保留GPS定位点和精度较高的Wi-Fi定位点),然后再交给鹰眼内部的去噪算法进行去噪。效果如下:

 

 

这一次的去噪效果就比较理想了,3处躁点都得到了消除,整条轨迹虽然和真实情况还有差距(比如没有完全按照道路行驶),但整体上看,没有那么“扎眼”了,大体上符合真实的轨迹了。

 

denoise_grade=5

 

最严格的去噪级别,只保留定位精度在20米以内的轨迹点,相当于只保留GPS定位点,Wi-Fi定位和基站定位的轨迹点都会被抛弃,然后再由鹰眼去噪算法进一步处理。效果如下:

 

 

我们看出来,在我们的这个case中,4级和5级几乎是没有区别的,实际上经过我们对比,保留下来的点数都一模一样(只是特例)。

 

通过以上略显繁琐的实验,我们对不同去噪力度,对轨迹去噪效果的影响,有了一个感性的认识。可以看出,对于一辆在城市内行驶的汽车,行驶过程中受到高楼或行道树的遮挡、进入隧道、高架桥下穿行等典型城市行驶路况下,设置denoise_grade=4,也就是保留GPS轨迹点和定位精度较高的Wi-Fi定位点,可以达到比较理想的去噪效果。为什么不推荐一股脑地直接设置为最高的去噪级别,也就是每次都无脑设置denoise_grade=5呢?因为这可能造成误伤,虽然在我们这个例子中没有出现这种情况,但有些情况下,设置denoise_grade=5,也就是只保留GPS定位点,可能太“严格”了,以至于把一些虽然定位精度不高,但还算“靠谱”的定位点都给过滤掉了,那么接下来交给去噪算法的候选点就极其有限,反倒会陷入“巧妇难为无米之炊”的尴尬境地。

 

通过本篇教程中讲解的denoise_grade选项,可以将原始轨迹中那些“扎眼”的噪点去除,使轨迹更加平滑。不过在去噪后的轨迹中,仍有很多需要改进的空间。比如下图:

 

 

图中的轨迹仍然是本篇教程中的从右向左行驶的车辆的轨迹,截图中的部分是从右侧的第267号轨迹点,向左行驶到第276号轨迹点。从图中看出,在图的右侧从267号到270号的轨迹点都飘到了路的外面,而272号点到275号的轨迹点虽然在路上,但飘到了对向车道,这是与实际车辆的行驶情况不符的。要解决这个问题,需要依赖鹰眼历史轨迹查询的绑路(道路匹配)能力。

 

在下一期鹰眼技术教程中,我们将详细介绍鹰眼历史轨迹查询的绑路能力如何优化轨迹点不在路上这种问题,欢迎开发者关注。