轨迹纠偏 最后更新时间: 2026年05月26日
轨迹记录、纠偏类需求强烈建议您使用高德开放平台提供的猎鹰SDK或者猎鹰服务API,后续版本的地图SDK会逐步停止轨迹纠偏接口的维护。
简介
轨迹纠偏可帮助您将您记录的行车轨迹点进行抽稀、纠偏操作,将轨迹匹配到道路上,提供平滑的绘制效果,并计算行驶里程(地图SDK V2.2.5以上支持);也可以通过结合高德定位帮助您记录真实行车轨迹(地图SDK V2.2.5版本以上支持)。
值得注意的是,目前该功能只支持将驾车轨迹纠正到路上。

结合定位轨迹纠偏(自2.2.5版本起支持)
第 1 步 初始化LBSTraceClient
开始记录轨迹,每2s记录一次轨迹,每隔5个点合并请求一次纠偏并回调。
this.traceClient = LBSTraceClient.getInstance(getContext());第 2 步 开启轨迹纠偏
this.traceClient.startTrace(this.traceStatusListener);//开始采集,需要传入一个状态回调监听。第 3 步 解析返回结果
traceStatusListener: TraceStatusListener = {
onTraceStatus:(locations?:ArrayList<TraceLocation>,rectifications?:ArrayList<LatLng>,errorInfo?:string)=>{
//locations 定位得到的轨迹点集,rectifications 纠偏后的点集,errorInfo 轨迹纠偏错误信息
}
}第 4 步 结束轨迹纠偏
this.traceClient.stopTrace()//在不需要轨迹纠偏时(如行程结束),可调用此接口结束纠偏自有轨迹纠偏
第 1 步,初始化LBSTraceClient
this.mTraceClient = new LBSTraceClient(getContext())第 2 步,构造轨迹点数据 List
需要按照 TraceLocation 定义好的格式构造轨迹点 List。
TraceLocation 的信息通过下表中的方法设置:
需要您注意的是,
1、必填信息的缺失会导致纠偏失败,非必填信息的缺失会在一定程度影响最终纠偏结果,因此尽可能的多提供以下信息是确保绘制一条平滑轨迹的最佳方案。建议使用HarmonyOS定位SDK中高精度,且有速度和角度返回的位置点数据。
2、传入的经纬度点,必须是国内的坐标,轨迹纠偏功能不支持国外的坐标点的纠偏。
第 3 步,进行轨迹纠偏
轨迹纠偏支持传入多种坐标系(高德、GPS原始坐标以及百度)的轨迹点数据,并且可支持多条数据同时纠偏。进行轨迹纠偏的方法如下:
this.mTraceClient.queryProcessedTrace(this.mSequenceLineID,this.mTraceList,this.mCoordinateType,this.traceListener)第 4 步,获取纠偏后的数据
1、实现 TraceListener 监听器。
TraceListener 监听器作为轨迹纠偏方法的参数传入后,通过其回调函数,获取纠偏点数据、轨迹的总距离。
2、轨迹纠偏结束回调。
只要当前轨迹点纠偏全部成功就一定会进入 onFinished 回调。该回调方法的说明如下:
3、轨迹纠偏失败回调。
当传入的轨迹点数据出现以下几种情况,会因为参数错误导致纠偏失败,进入 onRequestFailed 回调。
- 网络不连通。
- 原始轨迹数据只有1个点。
该回调方法的说明如下
4、轨迹纠偏过程回调。
我们采用分段的方式处理轨迹数据,按分段的顺序,每完成一段轨迹数据的纠偏就会进 onTraceProcessing 回调。
采用分段方式有以下两个优势:
- 当轨迹点数据量大的时候,可减少处理整条轨迹数据的等待时间。
- 当有部分的轨迹数据不符合要求导致纠偏失败时,通过过程回调可看到已完成部分的结果。
该回调方法的说明如下:
private traceListener:TraceListener = {
/**
* 轨迹纠偏失败回调
*/
onRequestFailed:(lineID: number, errorInfo: string)=>{
this.getUIContext().getPromptAction().showToast({ message: errorInfo})
if (this.mOverlayList.hasKey(lineID)) {
const overlay = this.mOverlayList.get(lineID)
overlay.setTraceStatus(TraceOverlay.TRACE_STATUS_FAILURE)
this.setDistanceWaitInfo(overlay)
}
},
/**
* 轨迹纠偏过程回调
*/
onTraceProcessing:(lineID: number,index: number,segments: ArrayList<LatLng>)=>{
if (!segments) {
return
}
if (this.mOverlayList.hasKey(lineID)) {
const overlay = this.mOverlayList.get(lineID)
overlay.setTraceStatus(TraceOverlay.TRACE_STATUS_PROCESSING)
overlay.add(segments)
}
},
/**
* 轨迹纠偏结束回调
*/
onFinished:(lineID: number,linepoints:ArrayList<LatLng>, distance:number,waitingtime: number)=>{
this.getUIContext().getPromptAction().showToast({ message: 'onFinished'})
if (this.mOverlayList.hasKey(lineID)) {
const overlay = this.mOverlayList.get(lineID)
overlay.setTraceStatus(TraceOverlay.TRACE_STATUS_FINISH)
overlay.setDistance(distance)
overlay.setWaitTime(waitingtime)
this.setDistanceWaitInfo(overlay)
}
}
}注意事项
1、作为地图SDK的功能,需要设置正确的高德Key才能保证轨迹纠偏功能的正确使用。
2、若您对纠偏结果存疑(例如:距离计算不准确,轨迹不正确等等),可将您的轨迹点转成标准的 JSON 格式文件,通过工单提交给我们(注意:我们只接受转成我们能验证格式的轨迹点数据)。
a)标准的 JSON 格式文件可通过 http://tool.oschina.net/codeformat/json 转化。
b)检查参数的字段名称是否与下表吻合,不一样请修改成一样。
c)通过工单提交给我们
