vue 腾讯地图 javaScriptAPI GL 多个markers自适应 (3)

前面两个笔记 是写的是 基本使用和 选点   当然 这些都是 一些很基础的使用  主要是为了 做一个笔记 以后好 copy
为某个东西选完点后  用户需要 看到每一个点的位置  那就需要 在地图上显示多个marker,为了用户体验 用户一眼就能 找到 每一个东西的大概位置   开撸

1、第一步 :创建地图    为了用户体验 在用户没有选择看哪个东西时 默认定位到 ip 位置

mounted(){
  this.getMyLocation()
}

// 获取当前经纬度    之前 有记录过 
    getMyLocation() {
      const KEY = "腾讯地图的KEY";
      let url = "https://apis.map.qq.com/ws/location/v1/ip";
      this.$jsonp(url, {
        key: KEY,
        output: "jsonp"
      })
        .then(res => {
         // 记录下 当前位置的经纬度
          this.currentLocation = res.result.location;
          this.initMap();
        })
        .catch(error => {
          console.log(error);
        });
   }



// 地图的初始化
initMap() {
      // 地图初始化时的 center 就是 刚刚记录的经纬度
      var center = this.currentLocation;
      var container = document.getElementById("container");
      var map = new TMap.Map(container, {
        center: center, //设置地图中心坐标
        zoom: 17, //设置地图缩放级别
        pitch: 43.5, //设置俯仰角
        rotation: 45 //设置地图旋转角度
      });
      // 把map 对象 存起来,用于更新经纬度
      this.map = map;
  }

2、第二步: 创建marker、label方法   清楚所有marker、label方法      设置自适应显示marker

// 创建marker
    createMarker() {
      let markerArr = [
        {
          id: "marker1",
          styleId: "marker",
          position: new TMap.LatLng(39.954104, 116.457503),
          properties: {
            title: "marker1"
          }
        },
        {
          id: "marker2",
          styleId: "marker",
          position: new TMap.LatLng(39.794104, 116.287503),
          properties: {
            title: "marker2"
          }
        },
        {
          id: "marker3",
          styleId: "marker",
          position: new TMap.LatLng(39.984104, 116.307503),
          properties: {
            title: "marker3"
          }
        }
      ];
     // 注意这里是 this.marker  主要是为了 后面的清除
      this.marker = new TMap.MultiMarker({
        map: this.map,
        geometries: markerArr
      });
      this.selfAdaptionMarker(markerArr)
    },

 
   // 创建label
    createLabel() {
      let labelArr = [
        {
          id: "label1", //点图形数据的标志信息
          styleId: "label", //样式id
          position: new TMap.LatLng(39.954104, 116.457503), //标注点位置
          content: "xxx", //标注文本
          properties: {
            //标注点的属性数据
            title: "label"
          }
        },
        {
          id: "label2", //点图形数据的标志信息
          styleId: "label", //样式id
          position: new TMap.LatLng(39.794104, 116.287503), //标注点位置
          content: "sss", //标注文本
          properties: {
            //标注点的属性数据
            title: "label"
          }
        },
        {
          id: "label2", //点图形数据的标志信息
          styleId: "label", //样式id
          position: new TMap.LatLng(39.984104, 116.307503), //标注点位置
          content: "sss", //标注文本
          properties: {
            //标注点的属性数据
            title: "label"
          }
        }
      ];
// 注意这里是 this.label 主要是为了 后面的清除
      this.label = new TMap.MultiLabel({
        map: this.map,
        geometries: labelArr
      });
    },

   // 清除所有 marker 和 label
    clearMarkerAndLabel() {
      // 清除 marker
      if (this.marker) {
        this.marker.setMap(null);
        this.marker = null;
      }
      // 清除 label
      if (this.label) {
        this.label.setMap(null);
        this.label = null;
      }
    },

// 设置自适应显示marker
    selfAdaptionMarker(markersArr) {
      let bounds = new TMap.LatLngBounds();
      markersArr.forEach(item => {
        if (bounds.isEmpty() || !bounds.contains(item.position)) {
          bounds.extend(item.position);
        }
      });
      //   设置地图可是范围
      this.map.fitBounds(bounds, {
        padding: 100 //自适应边距
      });
    }

3、第三步: 需要谁  就调用第二步中的 方法

 

   

展示多个marker并自适应点击事件 和   清除所有marker 点击事件
//   展示多个marker并自适应
    showMarkers() {
      this.createMarker();
      this.createLabel();
    },

// 清除所有marker
    clearMarker() {
      this.clearMarkerAndLabel();
    },

 

 

posted @ 2020-07-13 16:15  敲代码的树先生  阅读(2191)  评论(0编辑  收藏  举报