百度地图规划驾车线路DrivingRoute,自定义标注线路样式,禁止起始点途经点拖拽

使用百度地图驾车路线规划DrivingRoute方法,实现线路规划

产品需求:根据百度规划的线路信息返回后台存储,但百度推荐的线路除了起点、途经点、终点不可拖拽外,其他地方可以拖拽

实现思路:先将默认的起点终点途径点标注去掉,自己添加自定义的标注

上代码:
1.onSearchComplete:检索完成后的回调函数,收集百度返回信息
2.onPolylinesSet:折线添加完成后的回调函数,在这里修改线路样式
3. onMarkersSet:标注添加完成后的回调函数,这里修改默认标注,添加自定义标注

/*
**start:起点是point 对象如:var start = new BMap.Point(纬度,经度);
*/
function map_search(start,end,route,wayPoints){
    //map.clearOverlays(); //清除地图上所有覆盖物
    var transit = new BMap.DrivingRoute(map, {
        renderOptions: {
            map: map,
            panel: "r-result",
            enableDragging : true, //起终点可进行拖拽
            autoViewport: true //线路绘制后自动调整地图视野层级
        },
        policy: route,//驾驶策略
        onSearchComplete: function(results){
            var plan = results.getPlan(0);
            // 获取方案的驾车线路
            if(plan){
                var ss = [];
                // 获取线路上所有关键坐标点
                for(var i=0;i<plan.getNumRoutes();i++){
                    var route = plan.getRoute(i);
                    ss = ss.concat(route.getPath());
                }
                var dis = plan.getDistance(false);//获取总公里数
                var t = plan.getDuration(false);///获取总耗时
                $("#sugMileage").val((dis/1000).toFixed(2));//需要传给后台,保存到表单元素
                $("#sugTime").val((t/3600).toFixed(2));
                $("#sugLngAndLat").val(JSON.stringify(ss));//线路上所有点集合转成json存储
            }
        },
        onPolylinesSet:function(routes){
            //设置线条样式,线路分为几段
             for(var i=0;i<routes.length;i++){
                 routes[i].getPolyline().setStrokeWeight(8);
                 routes[i].getPolyline().setStrokeOpacity(1);
                 routes[i].getPolyline().setStrokeColor("#5298ff");
             }
        },
        onMarkersSet:function(routes){
            //清除原有标注
            //routes[0] 是起点
            //routes[routes.length-1] 是终点
            //routes[i].Um 是途经点,这个地方不同的百度地图api版本表示方式略有不同,以自己实际为准,自己debugger去看吧!
            for(var i=0;i<routes.length;i++){
                if(i==0||i==routes.length-1){
                    map.removeOverlay(routes[i].marker);
                }else{
                    map.removeOverlay(routes[i].Um);
                }
            }
            //调用添加自定义标注方法,实现禁止标注拖拽
            addMarker(start,'起点','<%=basePath%>/images/icon-mapStart.png');
            addMarker(end,'终点','<%=basePath%>/images/icon-mapEnd.png');
            for(var i=0;i<wayPoints.length;i++){
               addMarker(wayPoints[i],'途','<%=basePath%>/images/icon-mapOn.png');
            }
        }
    });

    transit.search(start, end,{waypoints:wayPoints});//发起检索
}

自定义添加标注的方法:

/*
**point:添加标注的点
**name:标注名称(这里没用到)
** imgUrl:自定义标注图标地址
*/
function addMarker(point,name,imgUrl){
    var myIcon = new BMap.Icon(imgUrl, new BMap.Size(30,42));//添加自定义图标
    myIcon.setImageSize(new BMap.Size(30,42));//设置图标大小
    var marker = new BMap.Marker(point,{icon:myIcon});
    marker.disableDragging();//禁止拖拽
    map.addOverlay(marker);
}

百度地图api链接
最后附上效果图
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值