更改高德地图自定义数据范围

在项目中,为解决高德地图上一次性加载大量图标导致的页面加载缓慢问题,采用了动态渲染的解决方案。通过绘制透明圆圈限制显示数据的范围,仅在圆内显示部分图标。当用户点击地图时,以点击位置为中心更新圆圈,从而改变显示的图标,这样既能加速页面加载,又能避免图标过多造成的混乱。
摘要由CSDN通过智能技术生成

在项目中遇到用高德地图中绘制海量图标,但是如果数据量太多的话,一次性绘制大量的图标marker,导致页面加载速度很慢。

这个问题,我想到在高德地图绘制一个透明的圆来作为用户查看数据的范围,在圆内显示部分数据,当用户点击圆范围之外的地图的话,以点击的位置的坐标作为圆范围的中心,以达到修改显示范围的目的,如此,每次高度地图只渲染部分数据,加快了页面的加载速度,还解决了图标过多,显得页面过于凌乱

            请求方法.then(res=>{
                AMapLoader.load({
                  key: "", // 申请好的Web端开发者Key,首次调用 load                 时必填
                  version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
                  plugins: [
                     "AMap.ToolBar", //工具条
                     "AMap.Geocoder",
                  ], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
                }).then((AMap) =>{
                    this.map = new AMap.Map("mapid", {
                        zoom: 14,
                        center: 地图中心,
                    });
                    res.data.map(item=>{
                        var marker = new AMap.Marker({
                            opacity: 1,
                            zIndex: 0,
                            cursor: "pointer",
                            position: [item.longitude, item.latitude], //经纬度位置
                            icon: new AMap.Icon({
                            size: new AMap.Size(36, 36), // 图标尺寸
                            image: require("@/assets/images/"), // Icon的图像
                            imageSize: new AMap.Size(36, 36), // 根据所设置的大小拉伸或压缩图片
                            imageOffset: new AMap.Pixel(0, 0), // 图像相对展示区域的偏移量,适于雪碧图等
                            extData: {
                                id: item.firstaidMemberId,   //设置marker点击时获取的数据,以便后续操作
                            },
                          }),

                        marker.setLabel({
                          direction: "top",
                          offset: new AMap.Pixel(10, 0), //设置文本标注偏移量
                          content: `<div style='background-color: #ffffff;padding:                2px;border-radius: 2px;color:#000'>${item.name}</div>`, //设置文本标注内容
                        });
                        that.map.add(marker);   //将marker添加到地图中
                           
                        //marker点击事件
                        marker.on('click',(e)=>{
                            console.log(e.target.getExtData())
                        })

                        //将渲染好的marker填充到数组中,以便后续删除
                        that.markerList.push(marker)
                        })
                    })
                // 渲染透明圆
            var circle = new AMap.Circle({
              center: new AMap.LngLat(lng, lat),
              radius: 2000, //半径单位m
              strokeColor: "#76D5C2", //线颜色
              strokeOpacity: 1, //线透明度
              strokeWeight: 1, //线粗细度
              fillColor: "#4BB2FD", //填充颜色
              fillOpacity: 0.35, //填充透明度
            }); // 圆心位置

            this.map.add(circle);

          //地图点击
           this.map.on("click", function (e) {
              // console.log(
              //   e.lnglat.getLng(),
              //   e.lnglat.getLat(),
                );
               
              //清除之前的marker,渲染新的marker
              that.map.remove(that.markerList);
               //更改圆的位置
              circle.setCenter([e.lnglat.getLng(), e.lnglat.getLat()]);
            }
         })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值