使用百度地图驾车路线规划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链接
最后附上效果图