产品服务
解决方案
文档与支持
定价
轨迹查询与纠偏
下载开发文档
简介

Harmony鹰眼SDK提供了一系列与轨迹相关的功能。通过调用 TraceClient 类中相应的接口发起请求,接口返回值即为请求结果。轨迹相关的功能主要包括:

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

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

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

轨迹纠偏

各种定位方式或多或少都存在着一定的误差。如果是在室外,如果GPS信号比较好,定位结果会比较准确。当GPS信号不好的时候(例如高架桥下、隧道、高层建筑遮挡等),可能就会使用WIFI或基站定位,特别是当周边WIFI热点比较少的时候会使用基站定位,定位误差会有所加大,产生轨迹漂移的现象。
为了更好地帮助开发者管理轨迹和展现轨迹,鹰眼提供了轨迹纠偏功能,达到优化轨迹、校正里程等效果。

注意:纠偏轨迹与原始轨迹数据相互独立,原始轨迹数据仍被保留并可查询。

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

去噪

对于明显的噪点进行识别并去除
关于去噪的使用教程请见:《轨迹去噪功能应用》

抽稀

对于冗余的数据点进行去除,如一条直线上的多个轨迹点,减少数据量,提升展示效率
关于抽稀的使用教程请见:《轨迹抽稀功能应用》

绑路

将轨迹点绑定至道路,达到纠正偏移轨迹、补充中断轨迹点(如:轨迹不连续、进入隧道导致的丢点)、补充道路拐点等效果。
关于绑路的使用教程请见:《轨迹绑路功能应用》

中断区间补偿

对于轨迹中前后轨迹点定位时间相差>5分钟,且距离大于300米地区间,鹰眼认定其为中断区间。对于中断区间,鹰眼支持根据对应地交通方式(驾车、骑行、步行)使用路线规划进行轨迹点和里程的补偿,实现轨迹的完整性。 关于中断区间补偿的使用教程请见:《轨迹补偿功能应用》

如何使用轨迹纠偏
中断区间补偿

对于轨迹中前后轨迹点定位时间相差>5分钟,且距离大于300米地区间,鹰眼认定其为中断区间。对于中断区间,鹰眼支持根据对应地交通方式(驾车、骑行、步行)使用路线规划进行轨迹点和里程的补偿,实现轨迹的完整性。
关于中断区间补偿的使用教程请见: 《轨迹补偿功能应用》
鹰眼HarmonyOS SDK中使用 CoreProcessOption、ExtendProcessOption、ExtendProcessOption 几种接口对象来设置轨迹纠偏选项:
denoise_grade 设置纠偏时是否需要去噪。
vacuate_grade 设置纠偏时是否需要抽稀。
need_mapmatch 设置纠偏时是否需要绑路。
transport_mode 设置轨迹对应的交通方式,鹰眼纠偏模块将根据不同的交通方式采用不同的轨迹纠偏处理。

里程补偿

在查询某时间段内的轨迹或里程时,除了指定纠偏选项外,还支持里程补偿。两个轨迹点定位时间间隔5分钟以上,被认为是中断,鹰眼支持对中断5分钟以上的轨迹区间进行里程补偿。里程补偿只是对里程数进行补偿纠正,并不会补充具体的轨迹点。
鹰眼HarmonyOS SDK中使用 SupplementMode 枚举类型表示里程补偿的方式:
NO_SUPPLEMENT 代表不进行补充
STRAIGHT 代表使用直线距离补充
DRIVING 代表使用最短驾车路线距离补充
RIDING 代表使用最短骑行路线距离补充
WALKING 代表使用最短步行路线距离补充
里程补偿的默认值为不补充,中断两点间距离不记入里程。

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

轨迹纠偏需要一定的上下文进行分析,为保证纠偏效果,尽量保证查询区间内有5个以上的轨迹点。
对于纠偏选项的使用,开发者可根据业务需要灵活使用,例如:
若当前业务需求只要求去除噪点,尽量保留原始轨迹点,则可以将纠偏选项设置为:
denoise_grade=1,vacuate_grade=0,need_mapmatch=0;
若当前业务需求要求在保证轨迹正确性的前提下,尽量去掉重复或者不必要的轨迹点,减少点量,则可以将纠偏选项设置为:
denoise_grade=1,vacuate_grade=1,need_mapmatch=0;
若当前业务需求绑路,可以将纠偏选项设置为:
denoise_grade=1,vacuate_grade=1,need_mapmatch=1;
若当前业务需求绑路,出行方式是骑行,可以将纠偏选项设置为:
denoise_grade=1,vacuate_grade=1,need_mapmatch=1,transport_mode=2;

示例代码

通过 - queryHistoryTrack; 方法,查询某终端实体的经过轨迹纠偏后的轨迹数据。

// 纠偏选项,用于控制返回坐标的纠偏处理方式,不填则按默认纠偏方式处理
let extendOption: ExtendProcessOption = {
denoise_grade: DenoiseGrade.LIGHT, // 设置降噪等级,取值范围[0,5],数值越大去噪力度越大,代表越多的点会被当做噪点去除。若取值0,则代表不去噪。
vacuate_grade: VacuateGrade.LIGHT, // 设置抽稀等级,取值范围[0,5],数值越大抽稀度力度越大,代表轨迹会越稀疏。若取值0,则代表不抽稀。
transport_mode: TransportMode.DRIVING, // 交通方式,鹰眼将根据不同交通工具选择不同的纠偏策略,目前支持:自动(即鹰眼自动识别的交通方式)、驾车、骑行和步行
need_mapmatch: MapMatch.BIND, // 绑路,可选值0和1,0表示不绑路,1表示绑路
}
// 构造历史轨迹查询请求
let historyTrackRequest: TrackQuery.HistoryTrackRequest = {
    entity_name: "entityA", // 实体
    start_time: 1760544000, // 开始时间,单位秒
    end_time: 1760630399, // 结束时间,单位秒
is_processed: ProcessSwitch.ON, // 可选值0和1,0代表关闭,1代表打开
    process_option: extendOption, // 纠偏选项
// 轨迹补偿交通方式选择,默认值:no_supplement。可选值:no_supplement:不补充,中断两点间距离不记入里程。straight:使用直线距离补充。
// driving:使用最短驾车路线距离补充。riding:使用最短骑行路线距离补充。walking:使用最短步行路线距离补充。
supplement_mode: SupplementMode.DRIVING,
// 仅在supplement_mode不为no_supplement时生效。默认值:only_distance。
// 可选值:only_distance:对于中断区间,只补偿中断的里程,不补偿轨迹点。distance_and_points:对于中断区间,既补偿里程,又补偿轨迹点
supplement_content: SupplementContent.DISTANCE_AND_POINTS,
// 低速阈值,若填写该值且is_processed=1时,则返回结果中将增加low_speed_distance字段,表示速度低于该值的里程,单位:千米/小时。
low_speed_threshold: 20,
coord_type_output: CoordType.BD09LL, // 坐标类型
sort_type: SortType.ASC, // 返回轨迹点的排序规则,默认值:asc。可选值:asc:按照定位时间升序,desc:按照定位时间降序。
    page_index: 1, // 分页索引,默认值:1。与page_size一起计算从第几条结果返回,代表返回第几页。
    page_size: 10, // 分页大小,默认值:100。返回结果最大个数与page_index一起计算从第几条结果返回,代表返回结果中每页有几个轨迹点。
}
// 获取查询管理实例,traceClient 为TraceClient实例
let queryManager: TrackQuery.TrackQueryManager = traceClient.createTrackQueryService();
// 执行历史轨迹查询
queryManager.queryHistoryTrack(historyTrackRequest).then(res=>{ })

通过 - queryLatestPoint; 方法,查询某终端实体的经过轨迹纠偏后的实时位置。

// 纠偏选项,用于控制返回坐标的纠偏处理方式,不填则按默认纠偏方式处理
let mainOption: MainProcessOption = {
denoise_grade: DenoiseGrade.LIGHT, // 设置降噪等级,取值范围[0,5],数值越大去噪力度越大,代表越多的点会被当做噪点去除。若取值0,则代表不去噪。
transport_mode: TransportMode.DRIVING, // 交通方式,鹰眼将根据不同交通工具选择不同的纠偏策略,目前支持:驾车、骑行和步行
need_mapmatch: MapMatch.BIND, // 绑路,可选值0和1,0表示不绑路,1表示绑路
}
// 构造实时位置查询请求
let lastestPointRequest: TrackQuery.LatestPointRequest = {
    entity_name: "entityA", // 实体
    coord_type_output: CoordType.BD09LL, // 坐标类型
    process_option: mainOption // 纠偏选项
}
// 获取查询管理实例,traceClient 为TraceClient实例
let queryManager: TrackQuery.TrackQueryManager = traceClient.createTrackQueryService();
// 执行实时位置查询
queryManager.queryLatestPoint(lastestPointRequest).then(res=>{ })
轨迹展示

查询获得历史轨迹后,可结合鸿蒙NEXT地图 SDK绘制并展示轨迹。

trackshowios1.png

上一篇

空间检索

下一篇

里程计算

本篇文章对您是否有帮助?