轨迹纠偏及高德和百度的webapi请求示例

背景

由于中交兴路,手机app和车联网等回传的运单的车辆轨迹数据存在漂移,缺失,脱页等问题,会导致绘制出来的轨迹不连贯,不平滑,中途间断和突变等表现,现需要设计一套算法对这些问题进行修正,根据给定的坐标点、车辆的方位角以及行驶速度,通过对轨迹降噪和插值等处理,将用户的轨迹纠偏到路上,使得轨迹展示的更接近实际情况,最后输出纠偏后的轨迹数据,统称为轨迹纠偏。

思路及流程

1,先对轨迹数据进行检测,检测其完整性,异常性,合格率等;
2,筛选出已经很好的完全没必要纠偏的轨迹数据,有一些缺陷但还可以挽救一下符合纠偏的轨迹数据,完全没必要纠偏价值的轨迹数据,对符合纠偏的轨迹数据进行轨迹纠偏;
3,剔除噪声点,离群点等异常点;
4,对过滤后的轨迹数据进行适当的插值处理使得轨迹表现更为平滑合理贴近真实路径;
5,利用Douglas-Peucker算法、Ramer-Douglas-Peucker算法、Simplification算法等方法对轨迹进行纠偏;
6,评估纠偏前和纠偏后的轨迹数据质量,以评估纠偏的效率;

前面是基于业务场景和自身需要设计的算法流程,经调研发现,地图供应商已经有现成的轨迹纠偏服务,下面给出高德和百度的轨迹纠偏的webapi请求示例,可以结合自身业务需求的选择合适的供应商。

高德轨迹纠偏的webapi请求示例

def gdtrajectoryRectify(trajectory):
    """
    高德轨迹纠偏
    """
    url = "https://restapi.amap.com/v4/grasproad/driving?key=‘你的ak’"  #queryString
    trajectory['tm'] = [trajectory['loc_time'][0]]+ [trajectory['loc_time'].tolist()[i+1] - trajectory['loc_time'].tolist()[0] for i in range(len(trajectory)-1)]
    trajectory.rename(columns = {"longitude": "x"}, inplace = True)
    trajectory.rename(columns = {"latitude": "y"}, inplace = True)
    trajectory.rename(columns = {"speed": "sp"}, inplace = True)
    trajectory.rename(columns = {"direction": "ag"}, inplace = True)
    trajectory= trajectory[['x', 'y',  'sp', 'ag', 'tm']] #留取保留字段 
    trajectory = trajectory[0:499] #截取一段
    points = trajectory.to_json(orient = "records", force_ascii = False) #dataframe的json化
    response = requests.post(url=url, data = points)
    if response.json()["errcode"]==0:
        rect_point = response.json()['data']['points']
        print(rect_point) 

将queryString中的ak替换成你自己的ak即可。

百度轨迹纠偏的webapi请求示例

def bdtrajectoryRectify(trajectory):
    """
    百度轨迹纠偏
    """

    url = "https://api.map.baidu.com/rectify/v1/track" # 请求路径
    headers = {"Content-Type":"application/x-www-form-urlencoded"} #构造请求头
    trajectory= trajectory[['longitude', 'latitude', 'coord_type_input', 'speed', 'direction', 'loc_time']] #留取保留字段
    points = trajectory.to_json(orient = "records", force_ascii = False) #JsonArray
    params = {
            "ak": "你的ak",
            "point_list": points,
            "rectify_option": "need_mapmatch:1|transport_mode:driving|denoise_grade:1|vacuate_grade:1",
            "supplement_mode": "driving",
            "coord_type_output": "gcj02"
        }
   
    response = requests.post(url=url, data=params, headers=headers)
    if response.json()["status"]==0:
        rect_point = response.json()['points']
        print(rect_point) 

将params 中的ak替换成你自己的ak即可。

配额

  • 高德webapi服务

1,个人认证开发者目前每天仅能访问该接口10000次,每条轨迹量不超过500个轨迹点,对于大批量的访问场景推荐使用猎鹰轨迹服务;
2,轨迹长度理论上不能超过300KM,5~10秒定位点间隔最佳。

  • 百度webapi服务

1,个人认证开发者目前每天仅能访问该接口100次,并发1(次/秒),企业认证一致;
2,最多不能超过2000个轨迹点,且轨迹里程不超过500公里;

参考文献

1,解决Python轨迹纠偏算法的具体操作步骤
https://blog.51cto.com/u_16175462/6685911
2,高德轨迹纠偏api文档参考
https://developer.amap.com/api/webservice/guide/api/grasproad
3,高德轨迹纠偏示例体验中心
https://developer.amap.com/demo/jsapi-v2/example/grasp/grasp-driving
5,高德地图纠偏不准,祭出我自己的纠偏算法
https://blog.csdn.net/u011486491/article/details/78065483
6,猎鹰轨迹纠偏
https://lbs.amap.com/api/track/lieying-kaifa/api/grasproad
7, 百度的轨迹纠偏
https://lbsyun.baidu.com/faq/api?title=webapi/guide/trackrectify-base

你可能感兴趣的:(数据挖掘,轨迹纠偏,百度轨迹,纠偏示例,高德轨迹纠偏示例)