轨迹查询

简介

鹰眼iOS SDK提供了一系列与轨迹相关的功能。通过调用 BTKTrackAction 类中相应的接口发起请求,响应通过 BTKTrackDelegate 协议中对应的方法回调给开发者。轨迹相关的功能主要包括以下几个方面:

轨迹查询

查询某终端实体的实时位置,支持轨迹纠偏

查询某终端实体在一段时间内的轨迹,支持轨迹纠偏,支持里程补偿

基本概念

在简介中,出现了轨迹纠偏、里程补偿、自定义轨迹点、缓存轨迹等概念,本节对这几个概念进行解释。

轨迹纠偏

各种定位方式或多或少都存在着一定的误差。如果是在室外,如果GPS信号比较好,定位结果会比较准确。当GPS信号不好的时候(例如高架桥下、隧道、高层建筑遮挡等),可能就会使用WIFI或基站定位,特别是当周边WIFI热点比较少的时候会使用基站定位,定位误差会有所加大,产生轨迹漂移的现象。


为了更好地帮助开发者管理轨迹和展现轨迹,鹰眼提供了轨迹纠偏功能,达到优化轨迹、校正里程等效果。(注:纠偏轨迹与原始轨迹数据相互独立,原始轨迹数据仍被保留并可查询。)


鹰眼轨迹纠偏包括以下步骤:

1. 去噪:对于明显的噪点进行识别并去除。

2. 抽稀:对于冗余的数据点进行去除,如一条直线上的多个轨迹点,减少数据量,提升展示效率。

3. 绑路:将轨迹点绑定至道路,达到纠正偏移轨迹、补充中断轨迹点(如:轨迹不连续、进入隧道导致的丢点)、补充道路拐点等效果。


鹰眼iOS SDK中使用 BTKQueryTrackProcessOption 类来设置轨迹纠偏选项:


denoise 设置纠偏时是否需要去噪。

vacuate 设置纠偏时是否需要抽稀。

mapMatch 设置纠偏时是否需要绑路。

radiusThreshold 设置定位精度过滤阈值,用于过滤掉定位精度较差的轨迹点。

transportMode 设置轨迹对应的交通方式,鹰眼纠偏模块将根据不同的交通方式采用不同的轨迹纠偏处理。


纠偏选项的默认值为去噪、不绑路、不过滤噪点、交通方式为驾车。


里程补偿

在查询某时间段内的轨迹或里程时,除了指定纠偏选项外,还支持里程补偿。两个轨迹点定位时间间隔5分钟以上,被认为是中断,鹰眼支持对中断5分钟以上的轨迹区间进行里程补偿。里程补偿只是对里程数进行补偿纠正,并不会补充具体的轨迹点。


鹰眼iOS SDK中使用 BTKTrackProcessOptionSupplementMode 枚举类型表示里程补偿的方式:


BTK_TRACK_PROCESS_OPTION_NO_SUPPLEMENT 代表不进行补充

BTK_TRACK_PROCESS_OPTION_SUPPLEMENT_MODE_STRAIGHT 代表使用直线距离补充

BTK_TRACK_PROCESS_OPTION_SUPPLEMENT_MODE_DRIVING 代表使用最短驾车路线距离补充

BTK_TRACK_PROCESS_OPTION_SUPPLEMENT_MODE_RIDING 代表使用最短骑行路线距离补充

BTK_TRACK_PROCESS_OPTION_SUPPLEMENT_MODE_WALKING 代表使用最短步行路线距离补充


里程补偿的默认值为不补充,中断两点间距离不记入里程。


这里需要特别说明的是:纠偏选项中的交通方式和里程补偿中的交通方式并无关系,纠偏选项中交通方式只会影响纠偏策略;而里程补偿中的交通方式只有当轨迹点定位间隔超过5分钟时,才起作用。

实时纠偏

通过 -(void)queryTrackLatestPointWith:(BTKQueryTrackLatestPointRequest *)request delegate:(id<BTKTrackDelegate>)delegate; 方法,查询某终端实体的经过轨迹纠偏后的实时位置。

以下代码片段表示查询名称为 “entityA” 的终端,经过纠偏之后的实时位置,去噪、绑路、定位精度大于10米的点将被认为是噪点。

// 设置纠偏选项
BTKQueryTrackProcessOption *option = [[BTKQueryTrackProcessOption alloc] init];
option.denoise = TRUE;
option.mapMatch = TRUE;
option.radiusThreshold = 10;
// 构造请求对象
BTKQueryTrackLatestPointRequest *request = [[BTKQueryTrackLatestPointRequest alloc] initWithEntityName:@"entityA" processOption: option outputCootdType:BTK_COORDTYPE_BD09LL serviceID:100000 tag:11];
// 发起查询请求
[[BTKTrackAction sharedInstance] queryTrackLatestPointWith:request delegate:self];

查询一段时间内的轨迹

通过 -(void)queryHistoryTrackWith:(BTKQueryHistoryTrackRequest *)request delegate:(id<BTKTrackDelegate>)delegate; 方法,查询某终端实体在某段时间内的轨迹。

以下代码片段表示查询名称为 “entityA” 的终端,在过去24小时内经过纠偏后的轨迹,纠偏选项采用默认值(去噪、不绑路、不过滤噪点、交通方式为驾车);选择最短步行路线距离进行里程补偿。如前文中的解释,纠偏选项中的驾车交通方式代表按照驾车的行驶行为进行纠偏,而对定位时间间隔大于5分钟的轨迹点间,采用最短步行路线距离进行里程补偿,正常的轨迹点不受里程补偿方案的影响。

// 构造请求对象
NSUInteger endTime = [[NSDate date] timeIntervalSince1970];
BTKQueryHistoryTrackRequest *request = [[BTKQueryHistoryTrackRequest alloc] initWithEntityName:@"entityA" startTime:endTime - 84400 endTime:endTime isProcessed:TRUE processOption:nil supplementMode:BTK_TRACK_PROCESS_OPTION_SUPPLEMENT_MODE_WALKING outputCoordType:BTK_COORDTYPE_BD09LL sortType:BTK_TRACK_SORT_TYPE_DESC pageIndex:1 pageSize:10 serviceID:103044 tag:13];
// 发起查询请求
[[BTKTrackAction sharedInstance] queryHistoryTrackWith:request delegate:self];


轨迹纠偏使用要点

轨迹纠偏需要一定的上下文进行分析,为保证纠偏效果,尽量保证查询区间内有5个以上的轨迹点。

对于纠偏选项的使用,开发者可根据业务需要灵活使用,例如:


- 若当前业务需求只要求去除噪点,尽量保留原始轨迹点,则可以将纠偏选项设置为:

denoise=1,vacuate=0,mapMatch=0;


- 若当前业务需求要求在保证轨迹正确性的前提下,尽量去掉重复或者不必要的轨迹点,减少点量,则可以将纠偏选项设置为:

denoise=1,vacuate=1,mapMatch=0;


-若当前业务需求绑路,可以将纠偏选项设置为:

denoise=1,vacuate=1,mapMatch=1;


-若当前业务需求绑路,出行方式是骑行,可以将纠偏选项设置为:

denoise=1,vacuate=1,mapMatch=1,transportMode=2;

注:绑路时建议同时选择去噪,否则噪点容易绑路失败

轨迹纠正效果示意图

trackprocess.png

轨迹展示

查询获得历史轨迹后,可结合百度地图iOS SDK绘制并展示轨迹。

iOS轨迹平滑绘制示例代码下载链接: http://wiki.lbsyun.baidu.com/cms/baidutrace/BaiduMap_IOSSDK_v3.0.0_Sample.zip

trackshow2.png