示例中心
功能在线体验
控制台

高德 开发 Android 地图SDK 开发指南 在地图上绘制 轨迹纠偏

更新时间:2018年11月29日

轨迹记录、纠偏类需求强烈建议您使用高德开放平台提供的猎鹰SDK或者猎鹰服务API后续版本的地图SDK会逐步停止轨迹纠偏接口的维护。

简介

轨迹纠偏可帮助您将您记录的行车轨迹点进行抽稀、纠偏操作,将轨迹匹配到道路上,提供平滑的绘制效果,并计算行驶里程(地图SDK V3.4.0以上支持);也可以通过结合高德定位帮助您记录真实行车轨迹(地图SDK V5.1.0版本以上支持)。

值得注意的是,目前该功能只支持将驾车轨迹纠正到路上。

结合定位轨迹纠偏(自5.2.0版本起支持)

第 1 步 初始化LBSTraceClient

 开始记录轨迹,每2s记录一次轨迹,每隔5个点合并请求一次纠偏并回调。

 LBSTraceClient lbsTraceClient = LBSTraceClient.getInstance(context);

第 2 步 开启轨迹纠偏

lbsTraceClient.startTrace(TraceListener); //开始采集,需要传入一个状态回调监听。

第 3 步 解析返回结果

void onTraceStatus(List<TraceLocation> locations,List<LatLng> rectifications,String errorInfo); 
//locations 定位得到的轨迹点集,rectifications 纠偏后的点集,errorInfo 轨迹纠偏错误信息

第 4 步 结束轨迹纠偏

lbsTraceClient.stopTrace();//在不需要轨迹纠偏时(如行程结束),可调用此接口结束纠偏

自有轨迹纠偏

第 1 步,初始化LBSTraceClient

mTraceClient = new LBSTraceClient(this.getApplicationContext());

第 2 步,构造轨迹点数据 List

需要按照 TraceLocation 定义好的格式构造轨迹点 List。

TraceLocation 的信息通过下表中的方法设置:

需要您注意的是,

1、必填信息的缺失会导致纠偏失败,非必填信息的缺失会在一定程度影响最终纠偏结果,因此尽可能的多提供以下信息是确保绘制一条平滑轨迹的最佳方案。建议使用Android定位SDK中高精度,且有速度和角度返回的位置点数据。

2、传入的经纬度点,必须是国内的坐标,轨迹纠偏功能不支持国外的坐标点的纠偏。

方法名

参数说明

返回值说明

方法效果

setLongitude(double mLongitude)

mLongitude:经度,必填

void

设置经度。

setLatitude(double mLatitude)

mLatitude:纬度,必填

void

设置纬度。

setSpeed(float mSpeed)

mSpeed:速度,必填

void

设置速度。

setBearing(float mBearing)

mBearing:方向角,必填

void

设置方向角。

setTime(long mTime)

mTime:时间,必填

void

设置时间。

第 3 步,进行轨迹纠偏

轨迹纠偏支持传入多种坐标系(高德、GPS原始坐标以及百度)的轨迹点数据,并且可支持多条数据同时纠偏。进行轨迹纠偏的方法如下:

方法名

参数说明

返回值说明

方法效果

queryProcessedTrace

lineID: 用于标示一条轨迹,支持多轨迹纠偏,如果多条轨迹调起纠偏接口,则lineID需不同。

locations : 一条轨迹的点集合。建议为一条行车GPS高精度定位轨迹。

type: 轨迹坐标系,目前支持高德 LBSTraceClient.TYPE_AMAP;GPS LBSTraceClient.TYPE_GPS;百度 LBSTraceClient.TYPE_BAID。

listener : 轨迹纠偏回调

void

进行轨迹纠偏,返回就偏后的轨迹数据。

mTraceClient.queryProcessedTrace(mSequenceLineID, mTraceList,
                mCoordinateType, this);

第 4 步,获取纠偏后的数据

1、实现 TraceListener 监听器。

TraceListener 监听器作为轨迹纠偏方法的参数传入后,通过其回调函数,获取纠偏点数据、轨迹的总距离。

2、轨迹纠偏结束回调。

只要当前轨迹点纠偏全部成功就一定会进入 onFinished 回调。该回调方法的说明如下:

方法名

参数说明

返回值说明

方法效果

onFinished

lineID:用于标示一条轨迹,支持多轨迹纠偏,如果多条轨迹调起纠偏接口,则lineID需不同。

linepoints:整条轨迹经过纠偏后点的经纬度集合。

distance:轨迹经过纠偏后总距离,单位米。

waitingtime:该轨迹中间停止时间,以GPS速度为参考,单位秒。

void

传入的轨迹点数据全部纠偏完成时回调。

示例代码:


/**
 * 轨迹纠偏结束回调
 */
@Override
public void onFinished(int lineID, List<LatLng> linepoints, int distance,
        int waitingtime) {
    Log.d(TAG, "onFinished");
    Toast.makeText(this.getApplicationContext(), "onFinished",
            Toast.LENGTH_SHORT).show();
    if (mOverlayList.containsKey(lineID)) {
        TraceOverlay overlay = mOverlayList.get(lineID);
        overlay.setTraceStatus(TraceOverlay.TRACE_STATUS_FINISH);
        overlay.setDistance(distance);
        overlay.setWaitTime(waitingtime);
        setDistanceWaitInfo(overlay);
    }
}

3、轨迹纠偏失败回调。

当传入的轨迹点数据出现以下几种情况,会因为参数错误导致纠偏失败,进入 onRequestFailed 回调。

  • 网络不连通。
  • 原始轨迹数据只有1个点。

该回调方法的说明如下:

方法名

参数说明

返回值说明

方法效果

onRequestFailed

lineID:用于标示一条轨迹,支持多轨迹纠偏,如果多条轨迹调起纠偏接口,则lineID需不同。

errorInfo:轨迹纠偏失败原因。

void

轨迹纠偏发生错误时回调。

示例代码:


/**
 * 轨迹纠偏失败回调
 */
@Override
public void onRequestFailed(int lineID, String errorInfo) {
    Log.d(TAG, "onRequestFailed");
    Toast.makeText(this.getApplicationContext(), errorInfo,
            Toast.LENGTH_SHORT).show();
    if (mOverlayList.containsKey(lineID)) {
        TraceOverlay overlay = mOverlayList.get(lineID);
        overlay.setTraceStatus(TraceOverlay.TRACE_STATUS_FAILURE);
        setDistanceWaitInfo(overlay);
    }
}

4、轨迹纠偏过程回调。

我们采用分段的方式处理轨迹数据,按分段的顺序,每完成一段轨迹数据的纠偏就会进 onTraceProcessing 回调。

采用分段方式有以下两个优势:

  • 当轨迹点数据量大的时候,可减少处理整条轨迹数据的等待时间。
  • 当有部分的轨迹数据不符合要求导致纠偏失败时,通过过程回调可看到已完成部分的结果。

该回调方法的说明如下:

方法名

参数说明

返回值说明

方法效果

onTraceProcessing

lineID:用于标示一条轨迹,支持多轨迹纠偏,如果多条轨迹调起纠偏接口,则lineID需不同。


index:一条轨迹分割为多个段,标示当前轨迹段索引。


segments:一条轨迹分割为多个段,segments标示当前轨迹段经过纠偏后经纬度点集合。

void

一条轨迹分割为多个段,按索引顺序回调其中一段。

示例代码:


/**
 * 轨迹纠偏过程回调
 */
@Override
public void onTraceProcessing(int lineID, int index, List<LatLng> segments) {
    Log.d(TAG, "onTraceProcessing");
    if (segments == null) {
        return;
    }
    if (mOverlayList.containsKey(lineID)) {
        TraceOverlay overlay = mOverlayList.get(lineID);
        overlay.setTraceStatus(TraceOverlay.TRACE_STATUS_PROCESSING);
        overlay.add(segments);
    }
}

注意事项

1、作为地图SDK的功能,需要设置正确的高德Key才能保证轨迹纠偏功能的正确使用。

2、若您对纠偏结果存疑(例如:距离计算不准确,轨迹不正确等等),可将您的轨迹点转成标准的 JSON 格式文件,通过工单提交给我们(注意:我们只接受转成我们能验证格式的轨迹点数据)。

      a)标准的 JSON 格式文件可通过 http://tool.oschina.net/codeformat/json 转化。

      b)检查参数的字段名称是否与下表吻合,不一样请修改成一样。

经度

lon

纬度

lat

时间(单位:毫秒)

loctime

速度(单位:Km/h)

speed

角度(单位:度)

bearing

      c)通过工单提交给我们  

示例中心 功能
在线体验
常见问题