【百度地图API】自定义途经点路线拼接

在用百度地图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)))
								}
							}
					},
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值