【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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

004 OpenCV akaze特征点检测匹配

目录 一、环境 二、akaze特征点算法 2.1、基本原理 2.2、实现过程 2.3、实际应用 2.4、优点与不足 三、代码 3.1、数据准备 3.2、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、akaze特征点算法 特征点检测算法…

三菱FX3U小项目—传输带定分级控制

目录 一、项目描述 二、IO口分配 三、项目程序 四、总结 一、项目描述 两条运输带顺序相连,为了避免运送的物料在1号运输线上堆积,所以启动时,1号运输带开始运行,5S后2号运输带自动启动。停机时顺序与启动刚好相反&#xff0c…

激光跟踪仪在超大型工件空间测量中的应用,你了解多少?

超大型工件的空间测量是现代制造业中的一个难题。传统的测量方法无法同时满足高精度和高效率的要求,从而制约了工件制造的质量和效益。 激光跟踪仪作为一种创新的测量设备,具有无接触、高精度和高速度的特点。它采用了先进的激光干涉测距和角度测量技术…

新加坡金融科技节,IMF呼吁加快CBDCs数币的框架

CBDCS,那CBDC是什么呢? 中央银行数字货币 CBDC(英文:Central Bank Digital Currency),指的是数字版本的国家货币. 我们现在经常听到的数字人民币,也就是中国的CBDC. 在传统与创新的交汇处,一种…

使用 Redis BitMap 实现签到与查询历史签到以及签到统计功能(SpringBoot环境)

目录 一、前言二、Redis BitMap 位图原理2.1、BitMap 能解决什么2.2、BitMap 存储空间计算2.3、BitMap 存在问题 三、Redis BitMap 操作基本语法和原生实现签到3.1、基本语法3.2、Redis BitMap 实现签到操作指令 四、SpringBoot 使用 Redis BitMap 实现签到与统计功能4.1、代码…

YOLOv5 配置C2模块构造新模型

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

算法通关村第八关-黄金挑战

大家好我是苏麟 ...... 路径总和2 描述 : 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 题目 : LeetCode 113.路径总和2 113. 路径总和 II 分析 : 这…

Oracle OCM考试(史上最详细的介绍,需要19c OCP的证书)

Oracle 19c OCM考试和之前版本的OCM考试差不多,对于考生来说最大的难点是题量大,每场3小时,一共4场,敲键盘敲得手抽筋。姚远老师(v:dataace)的很多Oracle OCP学员都对19c OCM考试很有兴趣,这里给…

Linux输入设备应用编程(键盘,按键,触摸屏,鼠标)

目录 一 输入设备编程介绍 1.1 什么是输入设备呢? 1.2 什么是输入设备的应用编程? 1.3 input子系统 1.4 数据读取流程 1.5 应用程序如何解析数据 1.5.1 按键类事件: 1.5.2 相对位移事件 1.5.3 绝对位移事件 二 读取 struct input_e…

云课五分钟-07安装Opera失败-版本不匹配

前篇: 云课五分钟-06一段代码调试debug-AI与人工 其中已经遇到了一些问题,在和文心一言交互过程中,由于提问不合适,得不到所期望的结果。 那么这一节本可以避免,但是为了展示失败,需要将过程录制。 视频…

网络营销|如何利用line拓展东南亚市场

Line在亚洲地区非常流行,特别是在日本、台湾、泰国等地,是当地最受欢迎的即时通讯应用之一。 除了基本的聊天功能外,Line还提供了各种各样的贴图、表情包和游戏等娱乐功能,吸引了大量的用户。 一、选择利用line进行海外营销的原…

求组合数(笔记)

//组合数2&#xff0c;取值在1e5 //Cab a! / (a - b)! * b! #include<iostream> using namespace std; using ll long long; const ll N 1e4 9, mod 1e9 7; ll fact[N], infact[N];//阶乘&#xff0c;逆元阶乘ll qmi(ll a, ll k, ll p)//逆元模板 {ll res 1;while…