【vue+leaflet】vue项目中使用leaflet绘制室内平面图、leaflet.pm在平面图中绘制点、线、面图层(一)

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

一,插件安装

npm i leaflet --save   // 我的版本^1.9.4
npm i leaflet.pm --save // 我的版本^2.2.0

附官网链接:
leaflet官网: https://leafletjs.com/index.html
leaflet.pm官网: https://www.npmjs.com/package/leaflet.pm?activeTab=readme

二,模块引入

因为我是单个页面需要所有就局部引入了,也可以放全局里面引入

<script>
import 'leaflet/dist/leaflet.css'
import 'leaflet/dist/leaflet'
import 'leaflet/dist/leaflet-src'
import 'leaflet/dist/leaflet-src.esm'
import * as L from 'leaflet'
import icon from 'leaflet/dist/images/marker-icon.png'
import iconShadow from 'leaflet/dist/images/marker-shadow.png'
import 'leaflet.pm'
import 'leaflet.pm/dist/leaflet.pm.css'
const DefaultIcon = L.icon({
  iconUrl: icon,
  shadowUrl: iconShadow,
})
L.Marker.prototype.options.icon = DefaultIcon
export default {
  data() {
    return {
     	map: null,
     	fillColor: '#2d75ff80',
	    bounds: [
	       [0, 0],
	       [0, 0],
	     ], // 平面图大小
    }
  }
}
</script>

三,逻辑代码

 <div id="imageMap"></div>
 ......
   methods: {
    // 平面图初始化
    initMap() {
      this.map = L.map('imageMap', {
        minZoom: -3,
        zoom: 5,
        maxZoom: 4,
        zoomSnap: 0.1, // 缩放步长
        attributionControl: false, // 右下角图例控件
        zoomControl: true, // 缩放控件
        crs: L.CRS.Simple, // 坐标系
        center: [0, 0], // 中心点
      })
      this.map.pm.setLang('zh') // 控件提示设置中文
      this.map.pm.addControls({
        position: 'topleft', // 控件菜单位置
        drawPolygon: true, //绘制多边形
        drawMarker: true, //绘制标记点
        drawCircleMarker: true, //绘制圆形标记
        drawPolyline: true, //绘制线条
        drawRectangle: true, //绘制矩形
        drawCircle: true, //绘制圆圈
        editMode: true, //编辑多边形
        dragMode: true, //拖动多边形
        cutPolygon: true, //添加⼀个按钮以删除多边形⾥⾯的部分内容
        removalMode: true, //清除多边形
      })
      // 全局图层样式
      this.map.pm.setPathOptions({
        fillOpacity: 0.5,
        fillColor: this.fillColor,
      })
    },
    // 地图初始化
    initDate() {
      // 获取图片宽高,防止不同尺寸的图片回显在页面上有多余的留白问题
      let img = new Image()
      let url = require('../../public/home/bgc4.jpg')
      img.src = url
      img.onload = () => {
        let w = img.width
        let h = img.height
        this.bounds = [
          [0, 0],
          [h, w],
        ]
        // 创建地图
        L.imageOverlay(url, this.bounds).addTo(this.map)
        // 设置地图图层区域
        this.map.fitBounds(this.bounds)
      }
      // 给地图绑定绘制、删除的事件
      this.map.on('pm:create', this.createClick)
      this.map.on('pm:remove', this.removeClick)
      // 禁止背景图拖拽,默认是可拖拽的
      this.map.dragging.disable()
      // 禁止双击缩放,默认是可双击缩放的
      this.map.doubleClickZoom.disable()
      // 禁止滚动缩放,默认是可滚动缩放的
      this.map.scrollWheelZoom.disable()
    },
    // 图层绘制完成
    createClick(e) {
      // console.log('图层绘制完成', e)
      // 设置图层样式
      e.layer.setStyle({
        fillOpacity: 0.5,
        fillColor: this.fillColor,
        // color:线段颜色
        // weight:线段宽度
        // opacity:线段透明度
        // dashArray:虚线间隔
        // fill:是否填充内部(true/false)
        // fillColor:内部填充颜色,如不设置,默认为color颜色
        // fillOpacity:内部填充透明度
      })
      // 给图层绑定点击、拖拽、编辑事件
      e.layer.on('pm:edit', this.editLayClick).on('click', this.layClick).on('pm:dragend', this.dragendLayClick)
    },
    // 图层删除
    removeClick(e) {
      // console.log('图层删除', e)
    },
    // 区域图层点击
    layClick(e) {
      // console.log('区域图层点击', e)
    },
    // 区域图层拖拽
    dragendLayClick(e) {
      // console.log('区域图层拖拽', e)
    },
    // 区域图层编辑
    editLayClick(e) {
      // console.log('图层编辑', e)
    },
  },
  mounted() {
    this.initMap()
    this.initDate()
    // 窗口缩放,地图自适应缩放
    window.onresize = () => {
      this.map.invalidateSize(true)
      this.map.fitBounds(this.bounds)
    }
  },

到这里就可以实现效果图所展示的功能了,下节详细说明各个模块及事件函数的功能.
所有示例代码已上传,点击前往获取
Done

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

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

相关文章

OLMo论文里的模型结构的小白解析

模型参数量 以7B为例&#xff0c;隐藏层为4086&#xff0c;attention heads为32 训练的token量为2.46T 训练策略 超参数 在我们的硬件上优化训练吞吐量&#xff0c;同时最小化损失峰值和缓慢发散的风险来选择超参数 损失峰值&#xff1a;在机器学习中&#xff0c;"损失峰…

lazada、速卖通卖家如何掌握自养号测评技巧打造高评价产品?

做跨境电商卖家都知道&#xff0c;国外的买家购物比较理性&#xff0c;也喜欢货比三家&#xff0c;所以店铺想要留住客户&#xff0c;就需要一些优质的产品来吸引他们。产品评价是卖家获取买家信任的重要途径&#xff0c;评价越高的产品&#xff0c;销量也就越好。 尤其是 Shop…

猫多喝水好吗?可以促进猫咪多喝水的主食分享

猫咪多喝水确实是有益的。适量的饮水对于猫咪的健康至关重要&#xff0c;有助于维持体液平衡、促进消化、减少便秘的风险&#xff0c;并对泌尿系统的健康起到保护作用。正常情况下&#xff0c;建议每公斤体重的猫每天摄入60-80毫升的水&#xff0c;除了与体重相关外&#xff0c…

RabbitMQ消息可靠性投递与ACK确认机制

1.RabbitMQ的消息可靠性投递 什么是消息的可靠性投递 保证消息百分百发送到消息队列中去保证MQ节点成功接收消息消息发送端需要接收到MQ服务端接收到消息的确认应答完善的消息补偿机制&#xff0c;发送失败的消息可以再感知并二次处理 RabbitMQ消息投递路径 生产者–>交换机…

碳化硅模块使用烧结银双面散热DSC封装的优势与实现方法

碳化硅模块使用烧结银双面散热DSC封装的优势与实现方法 新能源车的大多数最先进 (SOTA) 电动汽车的牵引逆变器体积功率密度范围从基于 SSC-IGBT 的逆变器的 <10 kW/L 到基于 SSC-SiC 的逆变器的约 25 kW/L。100 kW/L 代表了这一关键指标的巨大飞跃。 当然&#xff0c;随着新…

GaiaDB-X 获选北京国家金融科技认证中心「数据领域首批专项示范与先行单位」

2023 年 12 月 21 日至 22 日&#xff0c;「2023北京国际金融安全论坛暨金融科技标准认证生态大会」在北京金融安全产业园举办。百度智能云分布式数据库 GaiaDB-X 产品荣登「数据领域首批专项示范与先行单位」名单&#xff0c;并获得了由北京国家金融科技认证中心颁发的「数据产…

Sora背后的论文(1):使用 lstms 对视频展现进行无监督学习

之前那篇《Sora背后的32篇论文》发出后&#xff0c;大家都觉得不错&#xff0c;有很多小伙伴都开始啃论文了。 那么我就趁热打铁&#xff0c;把这32篇论文的通俗解读版贴一下。 从去年开始&#xff0c;我基本上形成了一个思维方式&#xff0c;任何事情做之前先看看 有没有好的…

Vue3+vite搭建基础架构(9)--- 使用vite-plugin-svg-icons

Vue3vite搭建基础架构&#xff08;9&#xff09;--- 使用vite-plugin-svg-icons 说明安装vite-plugin-svg-icons使用vite-plugin-svg-icons添加svg-icon组件和全局组件js文件 测试svg雪碧图 说明 这里记录下自己在Vue3vite的项目使用vite-plugin-svg-icons来全局使用svg雪碧图…

算法沉淀——多源 BFS(leetcode真题剖析)

算法沉淀——多源 BFS&#xff08;leetcode真题剖析&#xff09; 01.矩阵02.飞地的数量03.地图中的最高点04.地图分析 多源 BFS 是指从多个源点同时进行广度优先搜索的算法。在传统的 BFS 中&#xff0c;我们通常从一个起始点开始&#xff0c;逐层遍历所有的相邻节点。而在多…

移动端App自动化之触屏操作自动化

工作中我们经常需要对应用的页面进行手势操作&#xff0c;比如滑动、长按、拖动等&#xff0c;AppiumDriver 为我们提供一个模拟手势操作的辅助类 TouchAction&#xff0c;可以通过它对手机屏幕进行手势操作。 具体用法参见链接&#xff1a;chromedriver下载地址与webview自动…

SQL语法-where关键字的条件解析

在sql语言中有很多命令需要或者可以通过where关键字来筛选符合条件的数据 例如修改数据用到的命令—— 【update 表名 set 字段名1值1, 字段名2值2,...where 条件;】 例如删除数据用到的命令—— 【delete from 表名 where 条件;】 例如查询数据用到的命令—— 【select 字段名…

【IEEE出版、EI稳定检索】2024年机器学习与神经网络国际学术会议(MLNN 2024)

2024年机器学习与神经网络国际学术会议(MLNN 2024) 2024 International Conference on Machine learning and Neural Networks 2024年4月19-21日 中国-珠海 重要信息 大会官网&#xff1a;www.icmlnn.org(点击投稿/参会/了解会议详情&#xff09; 大会时间&#xff1a;…

一文带你了解红墨水实验!

什么是红墨水实验&#xff1f; 将焊点置于红色墨水或染料中&#xff0c; 让红墨水或染料渗入焊点的裂纹之中&#xff0c;干燥后将焊点强行分离&#xff0c; 焊点一般会从薄弱的环节&#xff08;裂纹处&#xff09;开裂。 因此&#xff0c;红墨水实验可以通过检查开裂处界面的染…

Unity求物体关于平面镜像对称后坐标以及旋转

前言&#xff1a;如题&#xff0c;我在已知一个平面L和物体A&#xff0c;我希望得到镜像后的物体B的位置和旋转。 效果&#xff1a; 推导&#xff1a; 首先我们需要知道物体的对称坐标A&#xff0c;我们现在能已知A坐标以及平面L的法线&#xff0c;如果我们能得到B的坐标&…

vue3中基于路由层面和组件层面进行用户角色及权限控制的方法解析

文章目录 一、权限控制二、路由层面控制三、组件层面控制1、使用自定义指令2、使用方法控制3、封装一个权限控制组件来实现组件层面控制权限3.1、组件页面 Authority.vue3.2、使用页面 app.vue3.3、效果预览 一、权限控制 随着前端技术的不断发展&#xff0c;越来越多的前端框…

曲线生成 | 图解B样条曲线生成原理(基本概念与节点生成算法)

目录 0 专栏介绍1 什么是B样条曲线&#xff1f;2 基函数的de Boor递推式3 B样条曲线基本概念图解4 节点生成公式 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划(图搜索、采样法、智能算法等)…

AIGC ChatGPT4完成业务需求SQL学习

源表如下&#xff1a; 例如现在需要显示每个岗位中工资排名前10位的员工信息&#xff0c;并显示排名应该要怎么做呢&#xff1f; Prompt: 有一个某公司职员表&#xff0c;表名为Bank_emp&#xff0c;empno为员工编号&#xff0c;ename为员工姓名&#xff0c;JOB为员工岗位&…

Codeforces Round 924 (Div. 2)题解(A-D)

A - Rectangle Cutting 链接&#xff1a;A - Rectangle Cutting 思路 考虑横边和纵边&#xff0c;若为偶数&#xff0c;则从中间分开&#xff0c;重新组合为一个长方形&#xff0c;检测是否与原来的长方形一致。 代码 #include <bits/stdc.h> using namespace std;i…

H62410Y 100V高压DCDC降压恒压芯片 可用于仪表仪器供电方案

H62410Y是一种内置100V耐压MOS&#xff0c;支持输入高达90V的高压降压开关控制器&#xff0c;可以向负载提供0.5A的连续电流。H62410Y支持输出恒定电压&#xff0c;可以通过调节VFB采样电阻来设置输出电压&#xff0c;同时支持最大电流限制&#xff0c;可以通过修改CS采样电阻来…

KMS密钥管理有哪些安全功能

KMS(Key Management Service)密钥管理服务是一种专门用于管理和保护加密密钥的系统。在现代的信息安全领域中&#xff0c;密钥的重要性不言而喻&#xff0c;它是确保数据加密、解密以及身份验证等安全操作的核心要素。KMS的出现&#xff0c;极大地提高了密钥管理的效率和安全性…