• 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();
        },
  • 相关阅读:
    [程序员必备工具]分享一款不错的个人代码个人知识管理软件wiz
    移动开发,如何选择手机软件开发​平台?
    Best Wishes,my Married Friend!
    三年来最开心的一天!
    “世事无绝对”也是相对的……
    又到世界CUP……
    利物浦,总是在我情绪低落时给我鼓舞!
    一种感觉
    How to break to loop? It frustrates me!
    取舍有度,学会放弃……
  • 原文地址:https://www.cnblogs.com/TreeCTJ/p/13293811.html
Copyright © 2020-2023  润新知