前言:網上關於百度地圖的API和技術博客很多,但是關於【自定義途經點】的技術博客少之又少,很多人為了修改途經點只好放棄掉driving這個接口(這個接口可以拿到路程距離和時間等很好用的數據,可惜啊)
先上一個官方demo,點我
我們可以看到,途經點以waypoint數組的方式,在檢索的時候放入
功能是很強大,但是圖標很chou有沒有,完全和我們炫酷的UI不搭調啊,怎么辦,果斷改!
1.起點和終點的修改
兩種方法,直接修改起點終點的marker屬性,詳細請點這里
第二種方法是刪除起點和終點,再自定義一個覆蓋物marker到相同的坐標出,詳情請點我
2.途經點圖標修改
下面進入正題!先看效果
終於和這十個兄弟說拜拜了對不對?下面說下我的思路
看下onMarkersSet這個回調函數返回的原型
所以,我們只需要修改途經點對象下 Lm.Zc.innerHTML 的value就好啦,這里我是將他改為display:none,再實例化我自定義的點放到對應坐標系,你也可以修改img的路徑,根據自己口味來,下面是我的代碼
//自定義圖標 var startIcon=new BMap.Icon("../../../images/h5/patrol/location.png", new BMap.Size(23,38)); var endIcon=new BMap.Icon("../../../images/h5/patrol/location.png", new BMap.Size(23,38)); var wayPointIconHtml='<div style="position: absolute; margin: 0px; padding: 0px; width: 36px; height: 40px; overflow: hidden;"><img src="http://api0.map.bdimg.com/images/way-points.png" style="display: none; border:none;margin-left:-11px; margin-top:-35px; "></div>'
var driving = new BMap.DrivingRoute(map, {renderOptions:{map: map, autoViewport: true},policy: route, onMarkersSet:function(res) { //標注點完成回調 console.info(res); var myStart = new BMap.Marker(start,{icon:startIcon}); map.removeOverlay(res[0].marker); //刪除起點 map.addOverlay(myStart); var myP1 = new BMap.Marker(p1,{icon:startIcon}); console.log(res[1].Lm.Zc.innerHTML); //刪除途經點 console.log(wayPointIconHtml); res[1].Lm.Zc.innerHTML=wayPointIconHtml; map.addOverlay(myP1); var myEnd = new BMap.Marker(end,{icon:endIcon}); map.removeOverlay(res[res.length-1].marker);//刪除終點 map.addOverlay(myEnd); } }); driving.search(start,end,{waypoints:[p1]});