vue使用天地图聚合点,点击标记点弹出信息窗口

1.先要在天地图中申请秘钥,具体过程就不展示了,个人开发者申请到秘钥之后,每个tk有上限。可以多申请几个,利用随机来使用。(每人最多申请五个秘钥)

下面这个是利用随机数组元素写的一个index.html中的引用:

<script>
    var tk =''
    var tkArr = ['你的秘钥1','你的秘钥2','你的秘钥3','你的秘钥4','你的秘钥5']
    tk = tkArr[Math.floor(Math.random() * tkArr.length)];
    var url = 'http://api.tianditu.gov.cn/api?v=4.0&tk=' + tk
    // console.log(url);
     function addScript(){
        var script = document.createElement('script')
        script.setAttribute('type','text/javascript')
        script.setAttribute('src', url)
        document.getElementsByTagName('head')[0].appendChild(script)
     }
     addScript()
  </script>

2.在地图页面中,首先需要有一个div放地图,其次在再地图上面做聚合,弹出信息窗口功能:

下面是html的内容,由于项目中点过多加了一个正在加载:

 <div style="width:100%;height:90vh;" id="map" v-loading="loading"  element-loading-text="拼命加载中"></div>

下面是初始化地图的代码: 

 // 初始化天地图
     initTdtMap(){
       var T = window.T;
      this.map = new T.Map('map',{
        minZoom: 3,   //设置最小缩放级别
      });
        //设置显示地图的中心点和初始缩放级别
        this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), 4);   
        this.initMarker()      
      },

下面是获取数据,渲染聚合点,并点击标记点弹出信息窗口的代码:

  //初始化聚合点
      initMarker(){
        var T = window.T;
        this.markers = []
        //这里要用自己的接口请求数据
        a(this.queryParams).then((res)=>{
            if(res.code == 200){
              var icon = new T.Icon({
                  iconUrl: '你的icon图片地址', 
                  iconSize: new T.Point(30, 30),
                  iconAnchor: new T.Point(0, 0)
              })
              //把每条数据都变成一个marker点
              res.data.forEach((item)=>{
                var marker = new T.Marker(new T.LngLat(item.longitude, item.latitude) , {icon:icon});
                //把每个marker点push到markers数组中
                this.markers.push(marker)
                //信息窗口
                let markerInfoWin = new T.InfoWindow('你自己的html',{
                  autoPan: true,
                  minWidth: 100,
                })
               //给每个marker点添加监听点击事件打开信息窗口
                marker.addEventListener('click', function() {
                    marker.openInfoWindow(markerInfoWin);
                })
              }) 
            //利用聚合点组件,完成点聚合功能
            this.clusterObject = new T.MarkerClusterer(this.map, { markers: this.markers,
             girdSize:60,
            //聚合点自定义样式
             styles:[
                {
                  url:'你自己的图片',
                  size:[30, 26], //图片大小
                  offset:new T.Point(-15, -13), //显示图片的偏移量
                  textColor:'black', //显示数字的颜色
                  // textSize:6,//显示文字的大小
                  range:[0, 50],
                }, {
                  url:'你自己的图片',
                  size:[42, 36],
                  offset:new T.Point(-20, -17),
                  textColor:'black',
                  // textSize:10,
                  range:[50, 500],
                }, {
                  url:'你自己的图片',
                  size:[62, 56],
                  soffset:new T.Point(-10, -22),
                  textColor:'black',
                  // textSize:12,
                  range:[500, 1000],
                }, {
                  url:'https://webapi.amap.com/theme/v1.3/m4.png',
                  size:[72, 66],
                  soffset:new T.Point(-10, -22),
                  textColor:'black',
                  // textSize:12,
                  range:[1000, 5000],
                }, {
                  url:'你自己的图片',
                  size:[82, 76],
                  // soffset:new T.Point(-10, -22),
                  textColor:'black',
                  // textSize: 6,
                  range:[5000, 10000],
                }, {
                  url:'你自己的图片',
                  size:[82, 76],
                  // soffset:new T.Point(-10, -22),
                  textColor:'black',
                  // textSize: 6,
                  range:[10000, 100000],
                }
              ]
             
             })
              // 设置聚合图标的最大层级,也就是说当到达16级时,所有聚合的点会全部
              this.clusterObject.setMaxZoom(16)
              this.loading = false
            } 
        })
      }

注意:这里我用天地图原生的聚合点的样式,图片怎么都请求不出来,有报错301的有报错跨域的,最后没找到解决方法,所有直接使用了自定义的聚合样式。

下面是最终效果:

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue使用高德地图聚合功能,首先需要安装并引入高德地图JavaScript API。 1. 在`index.html`文件中,添加如下代码引入高德地图的API: ```html <script src="https://webapi.amap.com/maps?v=1.4.15&key=your_api_key"></script> ``` 其中,`your_api_key`是你在高德地图开放平台申请的API Key。 2. 在Vue组件中,首先在`mounted`生命周期钩子中初始化地图,并创建一个地图实例: ```javascript mounted() { // 初始化地图 AMap.initAMapApiLoader({ key: 'your_api_key', plugin: ['AMap.MarkerClusterer'] }); // 创建地图实例 this.map = new AMap.Map('mapContainer', { center: [lng, lat], // 地图中心经纬度 zoom: 13 // 地图缩放级别 }); } ``` 3. 在数据加载完成后,将需要聚合数据添加到地图上: ```javascript addMarkers() { this.points.forEach(point => { let marker = new AMap.Marker({ position: [point.lng, point.lat] // 标记位置经纬度 }); this.map.add(marker); }); } ``` 其中,`this.points`是包含标记经纬度的数组。 4. 最后,启用聚合功能,将添加的标记进行聚合: ```javascript clusterMarkers() { let cluster = new AMap.MarkerClusterer(this.map, this.map.getAllOverlays(), { gridSize: 80, // 聚合的像素大小 renderCluserMarker(cluster) { let count = cluster.getMarkers().length; let div = document.createElement('div'); div.className = 'cluster-marker'; div.innerHTML = count; return new AMap.Icon({ size: new AMap.Size(40, 40), image: 'cluster.png', imageSize: new AMap.Size(40, 40), // 自定义聚合的样式和内容 div: div }); } }); } ``` 通过`AMap.MarkerClusterer`类创建一个聚合器对象,将地图实例、添加的标记聚合选项传入。 以上就是在Vue使用高德地图聚合功能的基本步骤。根据实际需求,可以进一步添加交互、自定义样式等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值