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

news2025/1/11 14:55:36

▒ 目录 ▒

    • 🛫 导读
      • 开发环境
    • 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】特征工程:特征预处理,归一化、标准化、处理缺失值

特征预处理采用的是特定的统计方法(数学方法)将数据转化为算法要求的数字 1. 数值型数据 归一化,将原始数据变换到[0,1]之间 标准化,数据转化到均值为0,方差为1的范围内 缺失值,缺失值处理成均值、中…

【机器学习11】强化学习

1 基本概念 一个机器人在环境中会做各种动作, 环境会接收动作, 并引起自身状态的变迁, 同时给机器人以奖励。 机器人的目标就是使用一些策略, 做合适的动作, 最大化自身的收益。 整个场景一般可以描述为一个马尔可夫…

C++初阶:STL之string类

一.为什么学习string类? 在C语言中没有字符串这一数据类型,都是用字符数组来处理字符串,C也支持这种C风格的字符串。除此之外,C还提供了一种自定义数据类型--string,string是C标准模板库(STL)中的一个字符串类&#x…

爱上C语言:操作符详解(下)

🚀 作者:阿辉不一般 🚀 你说呢:生活本来沉闷,但跑起来就有风 🚀 专栏:爱上C语言 🚀作图工具:draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话,还请…

腾讯云服务器收费标准是多少?腾讯云服务器收费标准表

你是否曾被繁琐复杂的服务器租赁费用搞得头昏脑胀?看着一堆参数和计费方式却毫无头绪?别担心,这篇文章就来帮你解决这个问题!我们今天就来揭秘一下腾讯云服务器的收费标准,让大家轻松明白地知道如何租用腾讯云服务器。…

Linux(2):初探

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

Kafka学习笔记(二)

目录 第3章 Kafka架构深入3.3 Kafka消费者3.3.1 消费方式3.3.2 分区分配策略3.3.3 offset的维护 3.4 Kafka高效读写数据3.5 Zookeeper在Kafka中的作用3.6 Kafka事务3.6.1 Producer事务3.6.2 Consumer事务(精准一次性消费) 第4章 Kafka API4.1 Producer A…

typeof null的结果为什么是Object?

在 JavaScript 第一个版本中,所有值都存储在 32 位的单元中,每个单元包含一个小的 类型标签(1-3 bits) 以及当前要存储值的真实数据。类型标签存储在每个单元的低位中,共有五种数据类型: 如果最低位是 1,则类型标签标志…

2024年山东省职业院校技能大赛中职组“网络安全”赛项竞赛试题-C

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C 一、竞赛时间 总计:360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A、B模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略设置 A-3 流量完整性保护 A-4 …

YOLOv5 配置C2模块构造新模型

🍨 本文为[🔗365天深度学习训练营学习记录博客 🍦 参考文章:365天深度学习训练营 🍖 原作者:[K同学啊] 🚀 文章来源:[K同学的学习圈子](https://www.yuque.com/mingtian-fkmxf/zxwb4…

【Kingbase FlySync】界面化管控平台:1.安装部署与用户创建

同步软件安装部署与用户创建 概述准备环境目标资源1.测试虚拟机下载地址包含node1,node22.KFS管控平台工具下载地址3.临时授权下载地址 实操:同步软件安装部署1.node1准备安装环境(1)增加flysync 用户并设置密码(2)调整flysync的最大文件句柄数(open fil…

蓝牙耳机仓设计的单芯片解决方案

对于一款优秀的TWS耳机来说,除了耳机本身的音频配置,充电仓也是极为重要的一环。因为与传统有线耳机由设备电池供电不同,缺少了耳机仓,TWS耳机就完全的失去了充电的途径,设备在耗尽电量基本就告别使用了,因…

使用Sqoop命令从Oracle同步数据到Hive,修复数据乱码 %0A的问题

一、创建一张Hive测试表 create table test_oracle_hive(id_code string,phone_code string,status string,create_time string ) partitioned by(partition_date string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ,; 创建分区字段partition_date&#xff0c…

【Qt之QStandardItemModel】使用,tableview、listview、treeview设置模型

1. 引入 QStandardItemModel类提供了一个通用的模型,用于存储自定义数据。 以下是其用法:该类属于gui模块,因此在.pro中,需添加QT gui,如果已存在,则无需重复添加。 首先,引入头文件&#xff…

Python---练习:编写一段Python代码,生成一个随机的4位验证码

案例:编写一段Python代码,生成一个随机的4位验证码 提前:定义一个字符串 str1 "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ" 编写Python代码: ① 思考:如果只生成4个字符的验证码&…

go语言 | 图解字节青训营抖音(一)

前言 本文大致介绍了本人及本人所在小组为第五届字节跳动青训营后端专场大项目需求 —— 「实现一个极简版抖音」的部分实现细节。 需求 本届后端青训营大项目要求实现一个极简版抖音的后端服务,该后端服务通过 HTTP 协议向已被设计好的前端 App 传递数据&#xf…

在listener.ora配置文件中配置listener 1527的监听并且使用tnsnames连接测试

文章目录 前言:一、命令语句实现1、监听介绍2、编辑 listener.ora 文件:寻找配置文件对配置文件进行配置 3、重启监听4、配置TNS 二、图形化界面实现1、listener.ora文件配置2、tnsnames.ora文件配置 三、测试连接 前言: 命令实现和图形化实…

网站页头被挂马状态及新增了index.html文件解决思路

今天网站刚新增了篇了文章《从nginx层阻断可执行的php 防止宝塔站点挂马》,整体测试下来还是不靠谱,设置后导致所有PHP文件都打不开了。 经过不断的查看日志和搜索办法总算告一段落,后续待观察。原因如下,多个网站目录新增了index.html文件,看时间是近两天上传的。 网站代…

超级微同城源码系统 轻松制作本地生活服务平台 源码完全开源可二次开发 带完整的搭建教程

现如今,越来越多的人开始依赖网络进行日常生活。各种生活服务平台如雨后春笋般涌现,为人们提供了方便快捷的服务。然而,对于很多传统企业来说,如何将线下业务转移到线上,如何提高服务质量等问题成为了他们面临的重要挑…

YOLO目标检测——机油泄露检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用:机械设备维护、工业生产监控、环保监管等数据集说明:机油泄露检测数据集,真实场景的高质量图片数据,数据场景丰富标签说明:使用lableimg标注软件标注,标注框质量高,含voc(xml)、co…