【leaflet】学习笔记5 自定义控制层、多图层及其控制 && 重构

🛫 导读

开发环境

版本号描述
文章日期2023-11-17
操作系统Win10 - 22H219045.3570
leaflet1.9.4
git地址https://gitcode.net/kinghzking/MyOpen.git

1️⃣ 重构

自上节《【leaflet】学习笔记1-4 https://blog.csdn.net/kinghzking/article/details/134445084》之后,小编发现代码严重重复,于是乎,重构一版,让代码清爽易读。

data.js 数据抽取

目前代码中含有大量常量或者geo数据,影响代码阅读。抽离后的结果如下:
在这里插入图片描述

MyMap 面向对象编程

代码方面,也有大量的重复代码,将这些代码都放到MyMap对象,封装包含下面内容:

  • initBase(): 封装《d2. 多地图切换》中的内容
  • initIcons(): 初始化后期用到的icon对象
    在这里插入图片描述

继承MyMap类

d5及之后的例子,将继承MyMap类,调用如下:
在这里插入图片描述

2️⃣ d5. 自定义控制层、多图层及其控制

示例效果

在这里插入图片描述

自定义控制层

自定义控制层,其实就是通过html元素来操控map对象,需要注意下面两个方面:

  1. html元素panel,使用绝对位置,top为70px,防止挡住leaflet的控制层
  2. 【z顺序】高于map元素:z-index: 1000;

多图层及其控制

本例中,将通过GeoJson构造两个图层:5环、4环。通过控制层控制其显示隐藏:

  • 创建图层:glayer5、glayer4
  • 绑定控制层checkbox的change事件
    • 当元素check5被勾选的时候,将glayer5显示出来:glayer5.addTo(this.map);
    • 当元素check5取消勾选的时候,将glayer5隐藏起来:glayer5.removeFrom(this.map);
    • 元素check4与check5逻辑相同。

  run() {

    // 5.1 创建图层-5环
    const glayer5 = new GeoJSON(dataCommon.geoRing5, {
      pointToLayer: (geoJsonPoint, latlng) => {
        return new Marker(latlng, {
          icon: this.iconRed
        });
      }
    });
    glayer5.addTo(this.map);

    // 5.2 创建图层-4环
    const glayer4 = new GeoJSON(dataCommon.geoRing4, {
      pointToLayer: (geoJsonPoint, latlng) => {
        return new Marker(latlng, {
          icon: this.iconBlue
        });
      }
    });
    glayer4.addTo(this.map);
    
    // 5.3 绑定控制层checkbox的change事件,控制图层显示和隐藏
    const check5 = document.getElementById('check5');
    check5.onchange = evt => {
      if (evt.target.checked) {
        glayer5.addTo(this.map);
      } else {
        glayer5.removeFrom(this.map);
      }
    };
    const check4 = document.getElementById('check4');
    check4.onchange = evt => {
      if (evt.target.checked) {
        glayer4.addTo(this.map);
      } else {
        glayer4.removeFrom(this.map);
      }
    };
  }

🛬 文章小结

通过devtool查看元素属性,可以了解leaflet实现原理,很多东西其实归根接地还是对元素的控制。
因此,对html等基础知识的认知程度,决定学习leaflet的效率。

📖 参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜猫逐梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值