在用百度地图API路线规划的时候,太多的途经点会出现报错,翻了翻百度地图API官方给出的路线规划途经点最多18个,官方链接如下:
https://lbsyun.baidu.com/faq/api?title=webapi/webservice-direction/dirve
分别找到两篇博主的文章:
https://blog.csdn.net/u010367582/article/details/50484428 【有瑕疵,但先看这篇好理解】
https://blog.csdn.net/qq_39309642/article/details/89447301 【在上一篇博主的改进】
上面两个博主用的都是BMap版本,我这里加个BMapGL版本的,主要是BMap版本的BMap.DrivingRoute和BMapGL.DrivingRoute规划的路线不一样,这里不贴图了,大家有兴趣可以自行去试试,这里主要用的new BMapGL.DrivingRouteLine来对应BMap.DrivingRoute,实现的代码思路和上面两位博主的也不太一样
function showPoly(pointList) {
var maxPointsPerRoute = 18;
// 计算需要绘制的路线段数
var totalSegments = Math.ceil(pointList.length / maxPointsPerRoute);
// 分批次绘制路线
for (var i = 0; i < totalSegments; i++) {
var startIndex = i * maxPointsPerRoute;
var endIndex = Math.min((i + 1) * maxPointsPerRoute, pointList.length);
var segmentPoints = pointList.slice(startIndex, endIndex);
// 绘制路线段
var driving = new BMapGL.DrivingRouteLine(map, {
renderOptions: {
map: map,
autoViewport: true,
enableDragging: false,
lineLayerStyle: {
sequence: false,
marginLength: 8,
borderMask: true,
borderWeight: 0,
strokeWeight: 8,
strokeLineJoin: 'round',
strokeLineCap: 'square',
strokeTextureUrl: down_arrow,
strokeTextureWidth: 8,
strokeTextureHeight: 64
}
}
});
// 第一个路线段需要考虑起点,最后一个路线段需要考虑终点
if (i === 0) {
driving.search(pointList[0], segmentPoints[segmentPoints.length - 1], { waypoints: segmentPoints });
} else if (i === totalSegments - 1) {
driving.search(segmentPoints[0], pointList[pointList.length - 1], { waypoints: segmentPoints });
} else {
driving.search(segmentPoints[0], segmentPoints[segmentPoints.length - 1], { waypoints: segmentPoints });
}
}
}
}
使用DrivingRouteLine会自带途径的标签,可以自行设置
onMarkersSet:function(res) {
for(let k=0;k<res.length;k++) {
if(k==0 && i==0) {
res[k].setIcon(new BMapGL.Icon('webpage/base/line/xlbusline/public/img/start.png', new BMapGL.Size(48,40)))
}
else if(k==res.length -1 && i==totalSegments.length-1) {
res[k].setIcon(new BMapGL.Icon('webpage/base/line/xlbusline/public/img/end.png', new BMapGL.Size(48,40)))
}
else {
res[k].setIcon(new BMapGL.Icon('webpage/base/line/xlbusline/public/img/dot.png', new BMapGL.Size(0,0)))
}
}
},