【vue+leaflet】vue使用leaflet.pm保存绘制后的图层的点位信息、图层回显、平面图切换、地图事件函数、图层事件函数说明(二)

在这里插入图片描述
看效果展示:

【vue+leaflet】第二节效果展示视频

1.平面图切换,多个平面图切换展示

    <div class="select"><span>平面图:</span><el-select v-model="pic" placeholder="全部" clearable filterable @change="initDate"><el-option :label="item.name" v-for="(item, index) in picArr" :key="index" :value="item.id"> </el-option></el-select></div>...pic: 0,picArr: [{ id: 0, name: '1楼平面图', points: [] },{ id: 1, name: '2楼平面图', points: [] },{ id: 2, name: '3楼平面图', points: [] },],imageOverlay: '',

来一个select展示多个平面图的下拉列表,点击切换更换平面图

initDate(){// 这段是为了切换的时候把上一个平面图中所有图层全删掉,防止携带到下一个平面图中// 循环遍历图层删除this.map.eachLayer((layer) => {if (layer._latlngs != null || layer._latlng != null) {layer.remove()}})...// select切换时,获取v-model绑定的id,动态更新平面图let url = require(`../../public/home/bgc${this.pic}.jpg`)...// imageOverlay有值代表已经绘制过地图和平面图,切换平面图就换换url和尺寸就可以了// else 没值,就初始化加载一遍平面图到地图中.// 添加图片,更换图片if (this.imageOverlay) {this.imageOverlay.setUrl(url)this.imageOverlay.setBounds(this.bounds)} else {this.imageOverlay = L.imageOverlay(url, this.bounds).addTo(this.map)}
}

在这里插入图片描述

2.存储绘制图层的点位信息 (地图事件)

项目中是掉接口进行保存的,这里用本地缓存替换一下.都是一样的步骤

this.map.on('pm:create', this.createClick)//通过这个绑定的,这个写在initDate方法中// 图层绘制完成事件createClick(e) {// console.log('图层绘制完成', e)// 获取缓存的图层数据,看看之前有没有绘制过,本次绘制完push到改集合中let res = JSON.parse(localStorage.getItem('layers')) || []// 没有值没有绘制,赋个值初始值if (!res[this.pic]) res[this.pic] = []// 只要两个参数即可保存该图层信息,id和经纬度let obj = {_leaflet_id: e.layer._leaflet_id,latlngs: e.layer._latlngs,}res[this.pic].push(obj)localStorage.setItem('layers', JSON.stringify(res))// 给图层绑定点击、拖拽、编辑事件e.layer.on('pm:edit', this.editLayClick).on('click', this.layClick).on('pm:dragend', this.dragendLayClick)},

3.回显存储过的图层点位信息

回显就在平面图初始化的时候回显就可以了

initDate(){...// 获取本地存储的图层数据let res = JSON.parse(localStorage.getItem('layers')) || []// 当前平面图下如果有绘制的图层,就进行回显if (res[this.pic]) {// 循环绘制图层res[this.pic].forEach((e) => {let lay = L.polygon(e.latlngs).addTo(this.map).on('pm:edit', this.editLayClick).on('click', this.layClick).on('pm:dragend', this.dragendLayClick)// 这个id每次刷新,来回切换平面图,都会改变,所以要更新一下,如果不更新,下面删除,拖拽,编辑,的时候就找不到图层了e._leaflet_id = lay._leaflet_id})localStorage.setItem('layers', JSON.stringify(res))}...
}

4.图层删除事件 (地图事件)

 this.map.on('pm:remove', this.removeClick) // 在initDate方法中注册removeClick(){// console.log('图层删除', e)let res = JSON.parse(localStorage.getItem('layers')) || []res[this.pic].forEach((d, i) => {if (d._leaflet_id == e.layer._leaflet_id) {res[this.pic].splice(i, 1)}})localStorage.setItem('layers', JSON.stringify(res))}

5.图层拖拽、编辑事件(图层事件)

拖拽和编辑其实差不多,拖拽后会走拖拽事件和编辑事件,因为项目没什么特殊要求,所以把拖拽和编辑后的逻辑处理统一写在编辑事件里面了
拖拽走过dragendLayClick方法后还会走editLayClick方法,编辑只会走editLayClick方法
// 在createClick图层绘制的方法中注册绑定的// 区域图层拖拽dragendLayClick(e) {console.log('图层拖拽', e)},// 区域图层编辑editLayClick(e) {console.log('图层编辑', e)let res = JSON.parse(localStorage.getItem('layers'))// 循环遍历更新一下id和经纬度就可以了res[this.pic].forEach((d) => {if (d._leaflet_id == e.target._leaflet_id) {d.latlngs = e.target._latlngsd._leaflet_id = e.target._leaflet_id}})localStorage.setItem('layers', JSON.stringify(res))},

所有示例代码已上传,点击前往获取
Done!

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

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

相关文章

机器学习.线性回归

斯塔1和2是权重项&#xff0c;斯塔0是偏置项&#xff0c;在训练过程中为了使得训练结果更加精确而做的微调&#xff0c;不是一个大范围的因素&#xff0c;核心影响因素是权重项 为了完成矩阵的运算&#xff0c;在斯塔0后面乘x0&#xff0c;使得满足矩阵的转换&#xff0c;所以在…

信息安全管理与评估赛题解析-通信数据(含环境)

通信数据分析 文章目录 通信数据分析1.pcapng:被入侵主机的IP是?被入侵主机的口令是?用户目录下第二个文件夹的名称是?/etc/passwd中倒数第二个用户的用户名是?2.pcapng:服务器自带的后门文件名是什么?服务器的内网IP是多少?攻击者往服务器中写入的key是什么?相关资源…

编码后的字符串lua

-- 长字符串 local long_string "你好你好你好你好你好你好你好你好" local encoded_string "" for i 1, #long_string do local char_code string.byte (long_string, i) encoded_string encoded_string .. char_code .. "," end encoded_…

redis数据结构源码分析——压缩列表ziplist(I)

前面讲了跳表的源码分析&#xff0c;本篇我们来聊一聊另外一个重点结构——压缩列表 文章目录 存储结构字节数组结构节点结构 压缩编码zipEntryzlEntry ZIP_DECODE_PREVLENZIP_DECODE_LENGTH API解析ziplistNew(创建压缩列表)ziplistInsert(插入)ziplistDelete(删除)ziplistFi…

复旦大学EMBA联合澎湃科技:共议科技迭代 创新破局

1月18日&#xff0c;由复旦大学管理学院、澎湃新闻、厦门市科学技术局联合主办&#xff0c;复旦大学EMBA项目、澎湃科技承办的“君子知道”复旦大学EMBA前沿论坛在厦门成功举办。此次论坛主题为“科技迭代 创新破局”&#xff0c;上海、厦门两地的政策研究专家、科学家、科创企…

CCAA审核员职业健康安全管理体系基础考试大纲

职业健康安全管理体系基础考试大纲&#xff08;第1版&#xff09; 1.总则 本大纲依据CCAA《管理体系审核员注册准则》制定&#xff0c;适用于拟向CCAA申请注册职业健康安全管理体系审核员实习级别的人员。 2.考试要求 2.1考试科目 申请注册职业健康安全管理体系审核员实习…

2024年漳州本地有正规等保测评机构吗?在哪里?

我们大家都知道&#xff0c;企业办理等保一定要找有资质的等保测评机构。因此不少漳州企业在问&#xff0c;2024年漳州本地有正规等保测评机构吗&#xff1f;在哪里&#xff1f;这里我们小编通过查找来为大家解答一下&#xff0c;仅供参考&#xff01; 目前福建漳州本地没有正规…

10 Redis之SB整合Redis+ 高并发问题 + 分布式锁

7. SB整合Redis Spring Boot 中可以直接使用 Jedis 实现对 Redis 的操作&#xff0c;但一般不这样用&#xff0c;而是使用 Redis操作模板 RedisTemplate 类的实例来操作 Redis。 RedisTemplate 类是一个对 Redis 进行操作的模板类。该模板类中具有很多方法&#xff0c;这些方…

HTTP---------状态码

当服务端返回 HTTP 响应时&#xff0c;会带有一个状态码&#xff0c;用于表示特定的请求结果。比如 HTTP/1.1 200 OK&#xff0c;里面的 HTTP/1.1 表示协议版本&#xff0c;200 则是状态码&#xff0c;OK 则是对状态码的描述。 由协议版本、状态码、描述信息组成的行被称为起始…

SpringBoot中Websocket的简单使用

目录 1 Websocket的定义及一些使用场景 2 使用方法 2.1 导入依赖坐标 2.2 创建WebSocket服务 2.3 编写配置类注册WebSocket 2.4 在需要处使用WebSocket服务 1 Websocket的定义及一些使用场景 定义&#xff1a;Websocket实现了浏览器与服务器全双工通信一浏览器和服务器只…

WebSocket服务多节点部署问题及解决方案

多节点部署问题 伪广播问题&#xff1a;在多节点部署时&#xff0c;每个节点只能向与其直接连接的客户端广播消息&#xff0c;导致其他节点的客户端无法接收到消息。 解决方案 使用消息中间件&#xff1a;引入如Redis PUBSUB或Kafka等消息中间件&#xff0c;作为所有节点共享…

C语言:苹果和虫子

题目描述 你买了一箱n个苹果&#xff0c;很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果&#xff0c;假设虫子在吃完一个苹果之前不会吃另一个&#xff0c;那么经过y小时你还有多少个完整的苹果&#xff1f; 输入输出格式 输入格式 输入仅一行&#xff0c…

北京硒鼓耗材回收价位,硒鼓回收价格,回收

联系我的时候请说是在百猫网看到的&#xff01; 硒鼓回收价格&#xff1a;最专业的硒鼓回收 顺达耗材回收 俗话说&#xff0c;顾客是最好的&#xff0c;良好的品牌效应是推动发展的关键之一。 北京顺达耗材回收有限公司为中小企业创造良好的二手消费市场&#xff0c;不断贯彻…

皓学IT:MySQL02

一、了解表 1.1.概述 表是处理数据和建立关系型数据库及应用程序的基本单元&#xff0c;是构成数据库的基本元素之一&#xff0c;是数据库中数据组织并储存的单元&#xff0c;所有的数据都能以表格的形式组织&#xff0c;目的是可读性强。 1.2.表结构简述 一个表中包括行和列…

Go语言开发小技巧易错点100例(十三)

往期回顾&#xff1a; Go语言开发小技巧&易错点100例&#xff08;一&#xff09;Go语言开发小技巧&易错点100例&#xff08;二&#xff09;Go语言开发小技巧&易错点100例&#xff08;三&#xff09;Go语言开发小技巧&易错点100例&#xff08;四&#xff09;Go…

微服务流量控制组件Sentinel

启动Sentinel控制台 从github下载jar包执行java -Dserver.port9005 -jar sentinel-dashboard-1.8.7.jar 启动控制台登录控制台,账号密码默认 sentinel sentinel.dashboard.auth.username -----指定用户名启动sentinel.dashboard.auth.password -----指定密码启动 微服务引入依赖…

Uncertainty-Aware Mean Teacher(UA-MT)

Uncertainty-Aware Mean Teacher 0 FQA:1 UA-MT1.1 Introduction:1.2 semi-supervised segmentation1.3 Uncertainty-Aware Mean Teacher Framework 参考&#xff1a; 0 FQA: Q1: 不确定感知是什么意思&#xff1f;不确定信息是啥&#xff1f;Q2&#xff1a;这篇文章的精妙的点…

Java面试——锁

​ 公平锁&#xff1a; 是指多个线程按照申请锁的顺序来获取锁&#xff0c;有点先来后到的意思。在并发环境中&#xff0c;每个线程在获取锁时会先查看此锁维护的队列&#xff0c;如果为空&#xff0c;或者当前线程是等待队列的第一个&#xff0c;就占有锁&#xff0c;否则就会…

停止一个正在运行的线程的正确姿势

1、使用退出标志&#xff0c;使线程正常退出&#xff0c;也就是当run方法完成后线程终止。 2、使用stop方法强行终止&#xff0c;但是不推荐这个方法&#xff0c;因为stop和suspend及resume一样都是过期作 废的方法。 3、使用interrupt方法中断线程。 class MyThread extend…

线性代数的几何意义简单总结

矩阵的意义 矩阵既可以理解为一组&#xff08;列&#xff09;基向量&#xff0c;也可以理解为线性变换。 某个向量左乘矩阵表示向量在用新的基向量表示对应在原始坐标系下的坐标&#xff0c;也可以视为经过线性变换后的坐标。 原始基向量都是单位矩阵&#xff0c;其他矩阵都…