1. 程式人生 > 實用技巧 >VUE-百度地圖新增覆蓋物及資訊視窗新增導航功能

VUE-百度地圖新增覆蓋物及資訊視窗新增導航功能

一、新增覆蓋物

根據官方的文件直接開寫:

//api返回最近5公里內的所有單位資訊。      
that.api.GetNearLocation(point.lat, point.lng).then(es => { var list = es.data.list; list.forEach(element => { var newpoint = new BMap.Point(element.Lng, element.Lat);
var mk = new BMap.Marker(newpoint); var content = element.Content; var id = element.ID; content = "<h2>" + content + "</h2><br/><a id='ele_" + id
+ "' class='btn'>導航至此處</a>"; var title = element.Content; map.addOverlay(mk); that.addClickHandler(content, title, mk, BMap, map, id,element.Lat, element.Lng); });
// console.log(list); });
//註冊覆蓋物的點選事件  
addClickHandler(content, title, marker, BMap, map, id,lat,lng) {
      var _this = this;
      marker.addEventListener("click", function(e) {
        // alert("z註冊"+id);
        _this.openInfo(content, title, e, BMap, map, id,lat,lng);
      });
    },

此處需要說明,在資訊視窗正在開啟的時候如果就去註冊按鈕的事件,是註冊不上的,因為此時dom還沒渲染成功。於是我在此處加了個0.2S的延遲,解決註冊問題。

//開啟資訊視窗,並建立導航按鈕的點選事件
openInfo(content, title, e, BMap, map, id,lat,lng) {
      // debugger
      var _this = this;
      var p = e.target;
      var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
      map.panTo(point);
      var infoWindow = new BMap.InfoWindow(content, this.opts); // 建立資訊視窗物件
      map.openInfoWindow(infoWindow, point); //開啟資訊視窗
      setTimeout(() => {
        document.getElementById("ele_" + id).onclick = function() {
          _this.openidLocation(lat, lng,title);
        };
      }, 200);
    }

在此處翻車了,調好了半天一直報沒有許可權。。兩個小時之後,突然想起來可能沒有在微信wx.config的jsApiList新增內建導航……狂暈。。。

最後新增上後,成功開啟內建地圖。

//開啟微信內建地圖,可呼叫手機導航APP, 
openidLocation(lat, lng,title) {
      // alert(lat);
      // alert(lng);
     var req= this.bMapToQQMap(lng,lat);
      wx.openLocation({
        latitude: req[1], // 緯度,浮點數,範圍為90 ~ -90
        longitude: req[0], // 經度,浮點數,範圍為180 ~ -180。
        name: title, // 位置名
        address: "世窗資訊:點選右側按鈕進入導航至"+title, // 地址詳情說明
        scale: 13, // 地圖縮放級別,整形值,範圍從1~28。預設為最大
        infoUrl: "" // 在檢視位置介面底部顯示的超連結,可點選跳轉
      });
    },