【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);
      }
    };
  }

🛬 文章小结

通过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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/158319.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电子病历编辑器源码(Springboot+原生HTML)

一、系统简介 本系统主要面向医院医生、护士,提供对住院病人的电子病历书写、保存、修改、打印等功能。本系统基于云端SaaS服务方式,通过浏览器方式访问和使用系统功能,提供电子病历在线制作、管理和使用的一体化电子病历解决方案&#xff0c…

CTFhub-RCE-过滤cat

查看当前目录:输入:127.0.0.1|ls 127.0.0.1|cat flag_42211411527984.php 无输出内容 使用单引号绕过 127.0.0.1|cat flag_42211411527984.php|base 64 使用双引号绕过 127.0.0.1|c""at flag_42211411527984.php|base64 使用特殊变量绕过 127.0.0.…

计算机毕业设计基于java+springboot+vue的实验室管理系统

项目介绍 系统中的功能模块主要是实现管理员;首页、个人中心、实验室管理、用户管理、实验室申请管理、设备管理、设备报备管理、设备申请管理、消耗品管理、消耗品领取管理、论坛管理、系统管理,用户前台;首页、实验室、设备、消耗品、论坛…

无需公众号实现微信JSSDK分享卡片!Safari浏览器分享到微信自动成卡片!

摘要 要在微信分享卡片&#xff0c;需要接入微信自家的JSSDK&#xff0c;比较麻烦&#xff0c;还需要认证公众号&#xff0c;但是如果你没有这样的条件&#xff0c;那么你也可以试试使用iOS的Safari浏览器轻松实现&#xff0c;只需要在html中加入3个meta即可。 代码 <!DO…

Linux(2):初探

Linux 是什么 Linux 就是一套操作系统。Linux 就是核心与系统呼叫接口那两层。 应用程序不算 Linux。 Linux 提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构&#xff0c; 这个架构是沿袭Unix 良好的传统来的&#xff0c;相当的稳定而功能强大。 在 Lin…

jQuery UI简单的讲解

我们先进入一下问答时间&#xff0c;你都知道多少呢&#xff1f; &#xff08;1&#xff09;什么是jQuery UI 呢&#xff1f; 解答&#xff1a;jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库。包含底层用户交互、动画、特效和可更换主题的可视控件。我们…

混合云运维解决方案,支持公有云、私有云、信创云等环境

数字时代&#xff0c;政企业务上云已成为大势所趋。虽然上云可为政企用户带来业务应用部署调度更加灵活、资源利用率更高的优点&#xff0c;但因云平台建设处于不同的阶段&#xff0c;且运转过程中包含大量的、不同类型的业务系统和应用场景&#xff0c;在整体云平台的建设中往…

EtherCAT 伺服控制功能块实现

EtherCAT 是运动控制领域主要的通信协议&#xff0c;开源EtherCAT 主站协议栈 IgH 和SOEM 两个项目&#xff0c;IgH 相对更普及一些&#xff0c;但是它是基于Linux 内核的方式&#xff0c;比SOEM更复杂一些。使用IgH 协议栈编写一个应用程序&#xff0c;控制EtherCAT 伺服电机驱…

ZYNQ_project:uart(odd,even)

概念&#xff1a; UART&#xff08;Universal Asynchronous Receiver-Transmitter&#xff09;&#xff1a;即通用异步收发器&#xff0c;是一种通用串行数据总线&#xff0c;用于异步通信。一般UART接口常指串口。 UART在发送数据时将并行数据转换成串行数据来传输&#xff…

注册表单mvc 含源代码

总结 jsp给我们的ControllerServlet.java,ControllerServlet.java获取参数,信息封装给RegisterFormBean.java的对象看是否符合格式,符合格式再信息封装给UserBean对象,调用Dbutil插入方法查重.]]要创建一个user集合成功跳哪个界面,打印信息注意什么时候要加getsession失败跳哪…

react-router-dom 版本6.18.0中NavLink的api和属性介绍

React Router 是一个基于 React 的路由库&#xff0c;它可以帮助我们在 React 应用中实现页面的切换和路由的管理。而 NavLink 则是 React Router 中的一个组件&#xff0c;它可以帮助我们实现导航栏的样式设置和路由跳转。 在 React Router 版本6.18.0 中&#xff0c;NavLink…

【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏3(附项目源码)

文章目录 先看本次实现的最终效果前言绘制炮塔UI炮塔转向敌人生成炮弹旋转我们的子弹对敌人造成伤害&#xff0c;回收子弹自动发射子弹添加攻击间隔显示伤害字体设计通用泛型单例创建更多炮塔升级增加伤害升级缩短攻击间隔添加货币杀死敌人获取金币源码完结 先看本次实现的最终…

epoll协程简述

协程的由来 【协程第二话】协程和IO多路复用更配哦~_哔哩哔哩_bilibili 协程类别:有栈(静态)协程, 无栈(动态协程) 协程epoll 当有需要等待的时候,就切换出去,要用汇编保存这个栈rsp 运行时,要根据协程上下文恢复出这个栈

Beego之Bee工具使用

1、bee工具使用 bee 工具是一个为了协助快速开发 Beego 项目而创建的项目&#xff0c;通过 bee 你可以很容易的进行 Beego 项目的创 建、热编译、开发、测试、和部署。Bee工具可以使用的命令&#xff1a; [rootzsx ~]# bee 2023/02/18 18:17:26.196 [D] init global config…

Java基础笔记

1.数据类型在java语言中包括两种: 第一种:基本数据类型 基本数据类型又可以划分为4大类8小种: 第一类:整数型 byte , short,int, long(没有小数的&#xff09; 第二类:浮点型 float,aouble(带有小数的&#xff09; 第三类:布尔型 boole…

【Rust】快速教程——模块mod与跨文件

前言 道尊&#xff1a;没有办法&#xff0c;你的法力已经消失&#xff0c;我的法力所剩无几&#xff0c;除非咱们重新修行&#xff0c;在这个世界里取得更多法力之后&#xff0c;或许有办法下降。——《拔魔》 \;\\\;\\\; 目录 前言跨文件mod多文件mod 跨文件mod //my_mod.rs…

高能分享:软件测试十大必问面试题(附带答案)

1 介绍之前负责的项目 参考答案&#xff1a;先大概描述一下这个项目是做什么的&#xff08;主要功能&#xff09;&#xff0c;包括哪些模块&#xff0c;是什么架构的&#xff08;B/S、C/S、移动端&#xff1f;&#xff09;&#xff0c;你在其中负责哪些模块的测试。期间经历了几…

Java后端工程师有福啦,CSDN里找到宝藏

目录 一、说明 二、操作步骤 一、说明 CDSN也有系统的java学习资料&#xff0c;有事无事翻翻挺好。 二、操作步骤 1、在CSDN首页顶端左边&#xff0c;点【学习】 2、在【学习】的页面&#xff0c;往下滑&#xff0c;找到【职业路线】 3、java后端工程师【入门版】【进阶版】…

Python基础:输入输出详解-输出字符串格式化

Python中的输入和输出是编程中非常重要的方面。 1. 输入输出简单介绍 1.1 输入方式 Python中的输入可以通过input()函数从键盘键入&#xff0c;也可以通过命令行参数或读取文件的方式获得数据来源。 1&#xff09;input()示例 基本的input()函数&#xff0c;会将用户在终端&…

Unity中Shader纹理的环绕方式

文章目录 前言一、修改环绕方式前的设置准备二、在纹理的设置面板可以修改环绕方式三、在Shader中&#xff0c;实现纹理的环绕方式切换1、在属性面板定义一个和纹理面板一样的纹理环绕方式下拉框2、在Pass中&#xff0c;定义枚举对应的变体3、在片元着色器中&#xff0c;纹理采…