码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【leaflet】学习笔记5 自定义控制层、多图层及其控制 && 重构


    ▒ 目录 ▒

      • 🛫 导读
        • 开发环境
      • 1️⃣ 重构
        • data.js 数据抽取
        • MyMap 面向对象编程
        • 继承MyMap类
      • 2️⃣ d5. 自定义控制层、多图层及其控制
        • 示例效果
        • 自定义控制层
        • 多图层及其控制
      • 🛬 文章小结
      • 📖 参考资料

    🛫 导读

    开发环境

    版本号描述
    文章日期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);
          }
        };
      }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    🛬 文章小结

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

    📖 参考资料

    • greengis分享的代码仓库地址: https://stackblitz.com/@shengzheng1981
    • greengis分享的代码地址: https://stackblitz.com/edit/leaflet-d5?file=index.js
    • greengis B站主页: https://space.bilibili.com/520898392
    • 文章作品主页: https://inscode.csdn.net/@kinghzking/MyOpen
    • 文章源码git地址:https://gitcode.net/kinghzking/MyOpen.git
    • 【leaflet】1. 初见 https://blog.csdn.net/kinghzking/article/details/134310461
    • 【leaflet】学习笔记1-4 https://blog.csdn.net/kinghzking/article/details/134445084
  • 相关阅读:
    力扣(LeetCode)97. 交错字符串(C++)
    java计算机毕业设计原创网络文学管理系统源码+mysql数据库+系统+lw文档+部署
    【vscode】vscode在离线环境下配置远程服务器客户端
    Spring DI(依赖注入)的实现方式:属性注入和构造注入
    ansible
    221. 最大正方形
    使用CSS实现多种Noise噪点效果
    ARM Day7
    SCRUM敏捷产品负责人(CSPO)认证培训课程
    机器视觉学习(三)—— 保存视频流
  • 原文地址:https://blog.csdn.net/kinghzking/article/details/134469436
  • 最新文章
  • 【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
    SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
    不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
    Halo插件:支持GitHub的图床附件策略
    电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
    华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
    软件更好写之后口碑会更重要
    大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
    Java标签跳转:一个鲜为人知但却很实用的小技巧
    多智能体系统论文速读
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号