vue+Leaflet.PM插件实现创建和编辑几何图形(点、线、面、圆等)

场景
Vue+Leaflet实现加载OSM显示地图:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122317394在上面加载显示OSM的基础上,使用Leaflet.pm插件实现在页面上绘制、编辑、剪切、移动几何元素。Leaflet.pm插件
用于创建和编辑几何图层的插件可绘制、编辑、拖动、剪切和捕捉图层支持标记、CircleMarkers、折线、多边形、圆形、矩形、LayerGroups、GeoJSON 和 MultiPolygonsnpm以及文档地址:https://www.npmjs.com/package/leaflet.pm在线演示地址:https://geoman.io/leaflet-geoman/实现
1、首先已经安装并引入了leaflet,其次安装leaflet.pmnpm i leaflet.pm页面中引入import 'leaflet.pm';
import 'leaflet.pm/dist/leaflet.pm.css';
3、地图上添加组件,并设置哪些按钮显示
// 添加绘制工具this.map.pm.setLang("zh");this.map.pm.addControls({position: "topleft",drawPolygon: true, //绘制多边形drawMarker: false, //绘制标记点drawCircleMarker: false, //绘制圆形标记drawPolyline: true, //绘制线条drawRectangle: false, //绘制矩形drawCircle: false, //绘制圆圈editMode: true, //编辑多边形dragMode: true, //拖动多边形cutPolygon: true, //添加⼀个按钮以删除多边形⾥⾯的部分内容removalMode: true, //清除多边形});
4、设置样式、设置事件
// 全局设置绘制样式this.map.pm.setPathOptions({color: "orange",fillColor: "green",fillOpacity: 0.4,});// 或者单独设置绘制样式var options = {// 连接线标记之间的线 templineStyle: {color: "red",},// 提⽰线从最后⼀个标记到⿏标光标的线 hintlineStyle: {color: "red",dashArray: [5, 5],},// 绘制完成的样式 pathOptions: {color: "orange",fillColor: "green",},};// 激活绘制多边形功能-1、单独设置某个模式的样式this.map.pm.enableDraw("Polygon", options);// 启用绘制--多边形功能this.map.pm.enableDraw("Polygon", {snappable: true, //启⽤捕捉到其他绘制图形的顶点snapDistance: 20, //顶点捕捉距离 });// 关闭绘制--注意也可以关闭其他模式的绘制功能this.map.pm.disableDraw("Polygon");// 绘制事件监听this.map.on("pm:drawstart", (e) => {console.log(e, "绘制开始第一个点");});this.map.on("pm:drawend", (e) => {console.log(e, "禁⽌绘制、绘制结束");});this.map.on("pm:create", (e) => {console.log(e, "绘制完成时调⽤");if (e.shape == "Circle") {console.log(e.layer._latlng, e.layer._radius, "绘制坐标");} else {console.log(e.layer._latlngs[0], "绘制坐标");}});this.map.on("pm:globalremovalmodetoggled", (e) => {console.log(e, "清除图层时调用");});
5、其他属性、事件说明等参考官方说明
完整代码
<template><div id="map"class="map"></div>
</template><script>
import "leaflet/dist/leaflet.css";
import L from"leaflet";
import "leaflet.pm";
import "leaflet.pm/dist/leaflet.pm.css";
export default {name: "leafletPm",data() {return {map: null,OSMUrl: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",};},mounted() {this.initMap();},methods: {initMap() {this.map = L.map("map");this.map.setView([34.03, -118.15], 13);let tileLayer = L.tileLayer(this.OSMUrl);tileLayer.addTo(this.map);// 添加绘制工具this.map.pm.setLang("zh");this.map.pm.addControls({position: "topleft",drawPolygon: true, //绘制多边形drawMarker: false, //绘制标记点drawCircleMarker: false, //绘制圆形标记drawPolyline: true, //绘制线条drawRectangle: false, //绘制矩形drawCircle: false, //绘制圆圈editMode: true, //编辑多边形dragMode: true, //拖动多边形cutPolygon: true, //添加⼀个按钮以删除多边形⾥⾯的部分内容removalMode: true, //清除多边形 });// 全局设置绘制样式this.map.pm.setPathOptions({color: "orange",fillColor: "green",fillOpacity: 0.4,});// 或者单独设置绘制样式var options = {// 连接线标记之间的线 templineStyle: {color: "red",},// 提⽰线从最后⼀个标记到⿏标光标的线 hintlineStyle: {color: "red",dashArray: [5, 5],},// 绘制完成的样式 pathOptions: {color: "orange",fillColor: "green",},};// 激活绘制多边形功能-1、单独设置某个模式的样式this.map.pm.enableDraw("Polygon", options);// 启用绘制--多边形功能this.map.pm.enableDraw("Polygon", {snappable: true, //启⽤捕捉到其他绘制图形的顶点snapDistance: 20, //顶点捕捉距离 });// 关闭绘制--注意也可以关闭其他模式的绘制功能this.map.pm.disableDraw("Polygon");// 绘制事件监听this.map.on("pm:drawstart", (e) => {console.log(e, "绘制开始第一个点");});this.map.on("pm:drawend", (e) => {console.log(e, "禁⽌绘制、绘制结束");});this.map.on("pm:create", (e) => {console.log(e, "绘制完成时调⽤");if (e.shape == "Circle") {console.log(e.layer._latlng, e.layer._radius, "绘制坐标");} else {console.log(e.layer._latlngs[0], "绘制坐标");}});this.map.on("pm:globalremovalmodetoggled", (e) => {console.log(e, "清除图层时调用");});},},
};
</script><style scoped>
.map {width: 100%;height: 400px;
}
</style>
相关文章:
vue+Leaflet.PM插件实现创建和编辑几何图形(点、线、面、圆等)
场景 VueLeaflet实现加载OSM显示地图:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122317394在上面加载显示OSM的基础上,使用Leaflet.pm插件实现在页面上绘制、编辑、剪切、移动几何元素。Leaflet.pm插件 用于创建和编辑几何图层的插件可…...
Rust语言在系统编程中的应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 Rust语言在系统编程中的应用 Rust语言在系统编程中的应用 Rust语言在系统编程中的应用 引言 Rust 概述 定义与原理 发展历程 Ru…...
test 是 JavaScript 中正则表达式对象 (RegExp) 的一种方法,用于测试一个字符串是否匹配某个正则表达式
在你的代码中,test 方法用于验证扫描结果是否符合特定的格式要求。具体来说,/^[A-Za-z\d]{16}$/.test(res.result) 这一行代码用于检查扫描结果 res.result 是否是一个由16个字母或数字组成的字符串。 test 方法的作用 正则表达式匹配: ^ 表…...
大厂社招3年-力扣热点高频刷题记录(已更新100+道热点题)
前言: 最近从大厂出来看机会,大厂面试基本都考察算法,于是维护此文档,一是查缺补漏,确保整体热点算法题目的应知应会,与思路的灵活理解;二是分享出来给其他同学朋友做一个参考借鉴,共…...
6.2 对角化矩阵(2)
五、不能对角化的矩阵 假设 λ \lambda λ 是 A A A 的一个特征值,我们从两个方面发现这个事实: 特征向量(几何的): A x λ x A\boldsymbol x\lambda\boldsymbol x Axλx 有非零解。特征值(代数的&…...
ubuntu24.04播放语音视频
直接打开ubuntu自带的video播放.mp4文件,弹窗报错如下: 播放此影片需要插件 MPEG-4 AAC 编码器安装方式: sudo apt install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly sudo apt install ffmpeg验证AA…...
GPT4的下一代Orion已经降速了?
嘿,大家好,我是小索奇!说起AI,相信不少人都和我一样,总感觉这玩意儿发展得就像装了火箭,快得让人眼花缭乱。咱们从GPT-3到GPT-4,一路哇哦着过来,天天惊叹它越来越聪明,越…...
SpringCloud框架学习(第二部分:Consul、LoadBalancer和openFeign)
目录 六、Consul服务注册和发现 1.基本介绍 2.下载运行 3.服务注册与发现 (1)支付服务provider8001注册进consul (2)修改订单服务cloud-consumer-order80 4.CAP (1)CAP理论 (2&#x…...
Linux 批量配置互信
批量配置SSH互信脚本 #!/bin/bash# 定义目标机器列表 machines( "192.168.122.87" "192.168.122.89" "192.168.122.90" ) set -o errexit # 设置默认的用户名和密码 default_username"root" default_password"111111"# 读取…...
设计定长的内存池
目录 定长内存池设计设计思路具体实现定长内存池初始化T*New()申请内存代码 void Delete(T* obj)回收内存代码 设计的总代码测试代码 Objectpool.h文件代码test.cpp文件代码拓展windows和Linux下如何直接向堆申请页为单位的大块内存: 感谢各位大佬对我的支持,如果我…...
【动手学电机驱动】 STM32-FOC(7)基于 MCSDK6.0 控制与调试速度环
STM32-FOC(1)STM32 电机控制的软件开发环境 STM32-FOC(2)STM32 导入和创建项目 STM32-FOC(3)STM32 三路互补 PWM 输出 STM32-FOC(4)IHM03 电机控制套件介绍 STM32-FOC(5&…...
无人机飞手考证,地面站培训技术详解
无人机飞手考证及地面站培训技术涉及多个关键方面,以下是对这些方面的详细解析: 一、无人机飞手考证流程与要求 1. 证书类型 民用无人机驾驶员证书:这是国家民航局颁发的无人机操作人员资质证书,分为视距内驾驶员、超视距驾驶员…...
音视频入门基础:MPEG2-TS专题(3)——TS Header简介
注:本文有部分内容引用了维基百科:https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 本文对MPEG2-TS格式的TS Header进行简介。 进行简介之前,请各位先下载MPEG2-TS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-TS的官方文档。但是ITU提供的…...
Sam Altman:年底将有重磅更新,但不是GPT-5!
大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…...
基于物联网的智能超市快速结算系统
摘 要 当今社会的商品层出不穷,人们因为越来越多大型仓储超市的出现使得生活更加便利,但许多随之而来的新问题也给人们带来了许多的不便,例如商家一直被更换标签不及时、货物丢失、超市内物品更换处理不及时、超市内人流高峰期人流控制不得…...
241111.学习日志——[CSDIY] Cpp零基础速成 [00]
CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!&…...
湘潭大学软件工程算法设计与分析实验-模拟退火算法
文章目录 写在前面代码分析 写在前面 总共是要四份代码,好像都是实现背包问题,前面三个都比较简单直观,朋友上周在机房给我讲解了一下之后,我大概弄清楚了,这周好像是最后一次算法课了,所以明天我得把剩下…...
Three.js 零基础+概念理解
文章目录 一、Three.js基础概念(一)什么是Three.js(二)核心对象(三)几何体(Geometries)和材质(Materials) 二、基础实例应用(一)创建一…...
c#使用COM接口设置excel单元格宽高匹配图片,如何计算?
c#使用COM接口设置excel单元格宽高如何换算 在实际工作中,经常需要在excel中插入图片。并设置单元格与图片对齐。但是excel单元格的宽度和高度使用不同的单位。单元格的宽度以字符宽度为单位,而高度以点为单位。如果按照实际值来设置,例如设…...
Excel模板下载\数据导出
pom <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version> </dependency><build><resources><resource><!--将xlsx打包到jar--><director…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
