driving 用于规划两点之间的驾车路线,返回多套备选方案,每套方案包含总距离、预计耗时、折线坐标与分步指引。
对应 Web 服务接口 direction/v2/driving。返回的 routes 是 SDK 规范化后的方案数组,wxPolylineData 是主方案(routes[0])的折线坐标。
tactics 常用取值:
其余参数与驾车路线规划请求参数一致,会原样透传。
success 回调入参:
routes 数组元素字段:
失败时走 fail 回调,入参统一为 { errMsg, message, statusCode, rawMessage },字段含义见"服务介绍 → 统一的回调约定"。
规划两点之间的路线,把主方案折线绘制到地图上并展示距离与耗时:
// pages/index/index.js// 引用百度地图微信小程序 JSAPI 模块const { BMapWX } = require('../../libs/bmap-wx.min.js');const bmap = new BMapWX({ ak: '您的ak' });Page({data: {latitude: 39.912,longitude: 116.400,polyline: [],summary: '',error: '',},onLoad() {bmap.driving({origin: '39.908823,116.397470', // "纬度,经度",也可传地点名称destination: '39.915119,116.403963',success: (res) => {if (!res.routes.length) {this.setData({ error: '未规划出路线方案,请检查起终点' });return;}const best = res.routes[0];this.setData({// <map polyline> 需要 [{ points, ... }] 结构,不能直接赋 wxPolylineDatapolyline: [{ points: res.wxPolylineData, color: '#4db900', width: 6, arrowLine: true }],summary: (best.distance / 1000).toFixed(1) + ' 公里 · 约 '+ Math.max(1, Math.round(best.duration / 60)) + ' 分钟',latitude: res.wxPolylineData[0].latitude,longitude: res.wxPolylineData[0].longitude,error: '',});},// 缺少起终点时 SDK 本地拦截,此时只有 errMsgfail: err => this.setData({ error: '路线规划失败:' + (err.message || err.errMsg) }),});},});
<!-- pages/index/index.wxml --><mapstyle="width: 100%; height: 300px;"longitude="{{longitude}}"latitude="{{latitude}}"scale="13"polyline="{{polyline}}"/><view wx:if="{{summary}}">{{summary}}</view><view wx:if="{{error}}">{{error}}</view>
下图为官方 Demo"路线规划"的运行界面,扫描下方小程序码即可直接体验。Demo 是产品化示例,界面比上面的示例代码精致,但调用方式与返回数据完全一致。


百度通常会返回多套方案,wxPolylineData 只是其中第一套。要让用户在方案间切换,把 routes 全部存下来按索引取用:
// pages/index/index.jsPage({data: {routes: [], // 方案摘要,用于列表渲染activeIndex: 0,polyline: [],},onLoad() {bmap.driving({ // 换成 walking / transit / riding 即切换交通方式origin: '39.908823,116.397470',destination: '39.915119,116.403963',success: (res) => {this._routes = res.routes; // 全部方案存到实例上,不进 datathis.setData({routes: res.routes.map(r => ({distanceText: (r.distance / 1000).toFixed(1) + ' 公里',durationText: '约 ' + Math.max(1, Math.round(r.duration / 60)) + ' 分钟',prefer: r.prefer || '',})),});this.showRoute(0);},});},showRoute(index) {const points = this._routes[index].polyline;this.setData({activeIndex: index,polyline: [{ points, color: '#4db900', width: 6, arrowLine: true }],latitude: points[0].latitude,longitude: points[0].longitude,});},onRouteTap(e) {this.showRoute(e.currentTarget.dataset.index);},});
途经点通过 waypoints 传入,最多 16 个,顺序即为经过顺序。
需要限行判断时传 plate,否则规划结果不考虑尾号限行。
起终点均为必填,且建议用坐标形式("纬度,经度")。缺少任一项时 SDK 本地拦截,fail 入参只有 errMsg;地点名称的解析依赖城市信息,可先用 suggestion 或 geocoding 把用户输入转成坐标再规划。
绑定折线时 <map> 的 polyline 需要 [{ points, color, width }] 结构,直接赋 wxPolylineData 不会显示;steps 的字段由官方接口决定,SDK 原样透传,取值前需判空。
上一篇
下一篇