地图拟路化实现——利用百度鹰眼

将一串gps轨迹纠偏为绑路的轨迹

超图需要购买服务,而百度和高德提供了免费接口,百度还额外提供了鹰眼平台管理这些数据,所以这次预研了下鹰眼地图。

具体思路为:

1.添加终端

2.上传点位

3.查询纠偏后轨迹

百度鹰眼api地址:http://lbsyun.baidu.com/index.php?title=yingyan/api/v3/trackupload

这里介绍下鹰眼功能模块:

终端:可以理解为设备、人、车,为移动轨迹的载体;

点位:可以理解为终端在时间轴上的单位位置信息;

纠偏:普通的纠偏在webGis内的概念主要是不同地图厂商投影坐标系不同产生了误差,需要坐标系转换,这里用于轨迹的纠偏,分为去噪、抽稀、绑路,

去噪,则是去除前后时间轴上方差过大的点,简言之就是速度100码,但前一个点在西湖,后一个点已在湘湖,偏差过大了,也可能根据radius精度判断,

抽稀,则是去除重复性太大的点,点位一秒上传一次,但一条100米的路却因为开的慢上传了上万个点,轨迹几乎是直线,优化下,

绑路,则是将点位纠正到道路上,对点位进行最近距离的路网信息进行搜索,然后选取最适道路绑定,坐标也做一个纠正

轨迹:可以理解为终端在时间轴上的历史位置展示,可根据速度分析出停留点、驾驶行为、里程信息;

围栏:可以理解为一个多边形区域,终端在一个时间段在区域外,或在区域内但不满足限速,产生出栏、超速、低速、停止等可报警元素。


踩坑1:addpoints批量上传点位接口,反复出现loc_time类型不匹配,经查,不是类型不匹配,而可能原因有

1、loc_time是unix时间戳,取得是秒数,js举例为Math.round((new Date()).getTime()/1000)

2、loc_name时间小于了或重复了原已存在点位时间

3、entity_name不存在

4、掺夹了没有添加的自定义字段

踩坑2:gettrack查不出纠偏后数据

原因:addpoints上传的点位只有经纬度,并没有设模拟的方向和速度

解决:速度暂设100km/h,而方向则根据前后两个点形成的向量算出与y正轴顺时针的方向夹角即可。


踩坑3:gettrack无法查询出wgs84坐标系的数据,只支持百度和国测局,百度公开的坐标转换api

http://api.map.baidu.com/geoconv/v1/?coords=x,y&from=1&to=5 

无法将百度或国测局转化为wgs84坐标系;

解决:找到另一个百度不公开的api转换,还是不行,链接如下:

http://api.map.baidu.com/ag/coord/convert?from=0&to=2&x=longitude&y=latitude

民间算法不准确,

最后办法为addPoint上传wgs84,然后gettrack查出未绑路的gcj02,算出这两条线的平均偏移,

再gettrack查出绑路后的gcj02,减去之前算出的偏移,算出绑路后的wgs84。

因为这两者距离很小,可以避开国测局大范围的不同经纬区块偏移策略,偏移基本够用,误差很小。


猜你喜欢

转载自blog.csdn.net/qq_26409257/article/details/78432782