当前位置: 首页 > news >正文

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显示地图&#xff1a;https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122317394在上面加载显示OSM的基础上&#xff0c;使用Leaflet.pm插件实现在页面上绘制、编辑、剪切、移动几何元素。Leaflet.pm插件 用于创建和编辑几何图层的插件可…...

Rust语言在系统编程中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Rust语言在系统编程中的应用 Rust语言在系统编程中的应用 Rust语言在系统编程中的应用 引言 Rust 概述 定义与原理 发展历程 Ru…...

test 是 JavaScript 中正则表达式对象 (RegExp) 的一种方法,用于测试一个字符串是否匹配某个正则表达式

在你的代码中&#xff0c;test 方法用于验证扫描结果是否符合特定的格式要求。具体来说&#xff0c;/^[A-Za-z\d]{16}$/.test(res.result) 这一行代码用于检查扫描结果 res.result 是否是一个由16个字母或数字组成的字符串。 test 方法的作用 正则表达式匹配&#xff1a; ^ 表…...

大厂社招3年-力扣热点高频刷题记录(已更新100+道热点题)

前言&#xff1a; 最近从大厂出来看机会&#xff0c;大厂面试基本都考察算法&#xff0c;于是维护此文档&#xff0c;一是查缺补漏&#xff0c;确保整体热点算法题目的应知应会&#xff0c;与思路的灵活理解&#xff1b;二是分享出来给其他同学朋友做一个参考借鉴&#xff0c;共…...

6.2 对角化矩阵(2)

五、不能对角化的矩阵 假设 λ \lambda λ 是 A A A 的一个特征值&#xff0c;我们从两个方面发现这个事实&#xff1a; 特征向量&#xff08;几何的&#xff09;&#xff1a; A x λ x A\boldsymbol x\lambda\boldsymbol x Axλx 有非零解。特征值&#xff08;代数的&…...

ubuntu24.04播放语音视频

直接打开ubuntu自带的video播放.mp4文件&#xff0c;弹窗报错如下&#xff1a; 播放此影片需要插件 MPEG-4 AAC 编码器安装方式&#xff1a; sudo apt install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly sudo apt install ffmpeg验证AA…...

GPT4的下一代Orion已经降速了?

嘿&#xff0c;大家好&#xff0c;我是小索奇&#xff01;说起AI&#xff0c;相信不少人都和我一样&#xff0c;总感觉这玩意儿发展得就像装了火箭&#xff0c;快得让人眼花缭乱。咱们从GPT-3到GPT-4&#xff0c;一路哇哦着过来&#xff0c;天天惊叹它越来越聪明&#xff0c;越…...

SpringCloud框架学习(第二部分:Consul、LoadBalancer和openFeign)

目录 六、Consul服务注册和发现 1.基本介绍 2.下载运行 3.服务注册与发现 &#xff08;1&#xff09;支付服务provider8001注册进consul &#xff08;2&#xff09;修改订单服务cloud-consumer-order80 4.CAP &#xff08;1&#xff09;CAP理论 &#xff08;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下如何直接向堆申请页为单位的大块内存&#xff1a; 感谢各位大佬对我的支持,如果我…...

【动手学电机驱动】 STM32-FOC(7)基于 MCSDK6.0 控制与调试速度环

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…...

无人机飞手考证,地面站培训技术详解

无人机飞手考证及地面站培训技术涉及多个关键方面&#xff0c;以下是对这些方面的详细解析&#xff1a; 一、无人机飞手考证流程与要求 1. 证书类型 民用无人机驾驶员证书&#xff1a;这是国家民航局颁发的无人机操作人员资质证书&#xff0c;分为视距内驾驶员、超视距驾驶员…...

音视频入门基础:MPEG2-TS专题(3)——TS Header简介

注&#xff1a;本文有部分内容引用了维基百科&#xff1a;https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 本文对MPEG2-TS格式的TS Header进行简介。 进行简介之前&#xff0c;请各位先下载MPEG2-TS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-TS的官方文档。但是ITU提供的…...

Sam Altman:年底将有重磅更新,但不是GPT-5!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…...

基于物联网的智能超市快速结算系统

摘 要 当今社会的商品层出不穷&#xff0c;人们因为越来越多大型仓储超市的出现使得生活更加便利&#xff0c;但许多随之而来的新问题也给人们带来了许多的不便&#xff0c;例如商家一直被更换标签不及时、货物丢失、超市内物品更换处理不及时、超市内人流高峰期人流控制不得…...

241111.学习日志——[CSDIY] Cpp零基础速成 [00]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…...

湘潭大学软件工程算法设计与分析实验-模拟退火算法

文章目录 写在前面代码分析 写在前面 总共是要四份代码&#xff0c;好像都是实现背包问题&#xff0c;前面三个都比较简单直观&#xff0c;朋友上周在机房给我讲解了一下之后&#xff0c;我大概弄清楚了&#xff0c;这周好像是最后一次算法课了&#xff0c;所以明天我得把剩下…...

Three.js 零基础+概念理解

文章目录 一、Three.js基础概念&#xff08;一&#xff09;什么是Three.js&#xff08;二&#xff09;核心对象&#xff08;三&#xff09;几何体&#xff08;Geometries&#xff09;和材质&#xff08;Materials&#xff09; 二、基础实例应用&#xff08;一&#xff09;创建一…...

c#使用COM接口设置excel单元格宽高匹配图片,如何计算?

c#使用COM接口设置excel单元格宽高如何换算 在实际工作中&#xff0c;经常需要在excel中插入图片。并设置单元格与图片对齐。但是excel单元格的宽度和高度使用不同的单位。单元格的宽度以字符宽度为单位&#xff0c;而高度以点为单位。如果按照实际值来设置&#xff0c;例如设…...

Excel模板下载\数据导出

pom <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version> </dependency><build><resources><resource><!--将xlsx打包到jar--><director…...

CANN-ops-nn-昇腾NPU神经网络算子的积木盒子

你去超市买过那种混合装坚果吗&#xff1f;一袋里面核桃、腰果、巴旦木都有&#xff0c;打开直接吃&#xff0c;不用自己搭配。ops-nn 在昇腾CANN生态里就是这个角色——把神经网络最常用的算子打包好了&#xff0c;打开就能用。昇腾NPU跑大模型、跑视觉模型&#xff0c;底层都…...

pycryptodome导入失败的四大底层原因与诊断方案

1. 这不是pycryptodome的问题&#xff0c;而是你没看清它真正依赖的底层逻辑“ImportError: No module named Crypto”、“AttributeError: module Crypto.Cipher has no attribute AES”、“ModuleNotFoundError: No module named Cryptography_cffi...”——这些报错我过去三…...

瑞数6代JSVMP逆向实战:Node.js复现可信字节码运行时

1. 这不是“绕过验证码”&#xff0c;而是和瑞数6代打一场精密的JavaScript攻防战你肯定见过那个页面&#xff1a;刚点开目标网站&#xff0c;还没输入账号&#xff0c;浏览器就卡住半秒&#xff0c;接着弹出一个412 Precondition Failed——不是403&#xff0c;不是500&#x…...

【AI Agent数据分析实战指南】:20年专家亲授5大落地场景、3类避坑红线与实时决策增效方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI Agent数据分析应用的演进逻辑与核心价值 AI Agent在数据分析领域的应用并非技术堆叠的结果&#xff0c;而是由数据复杂度跃升、业务响应时效压缩、以及人机协同范式重构三重力量共同驱动的系统性演进…...

使用taotoken的openai兼容协议为ubuntu上的python脚本赋能

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用 Taotoken 的 OpenAI 兼容协议为 Ubuntu 上的 Python 脚本赋能 基础教程类&#xff0c;详细讲解在 Ubuntu 20.04 中&#xff0…...

增程式电动汽车预测型能量管理策略【附算法】

✨ 长期致力于增程式电动汽车、能量管理策略、车速预测、广义回归神经网络、动态规划研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;基于AIC准则的自…...

18分钟攻破GitHub:TeamPCP供应链攻击全技术解析与防御新范式

摘要 2026年5月18日&#xff0c;威胁组织TeamPCP通过一条精心设计的多级供应链攻击链&#xff0c;仅用18分钟就成功入侵全球最大代码托管平台GitHub的内部系统&#xff0c;窃取了约3800个核心私有仓库&#xff0c;涵盖Copilot、CodeQL、GitHub Actions等所有关键产品的源代码。…...

如何在Windows 10/11上完美使用PS3手柄:DsHidMini虚拟HID驱动终极指南

如何在Windows 10/11上完美使用PS3手柄&#xff1a;DsHidMini虚拟HID驱动终极指南 【免费下载链接】DsHidMini Virtual HID Mini-user-mode-driver for Sony DualShock 3 Controllers 项目地址: https://gitcode.com/gh_mirrors/ds/DsHidMini 你是否还在为Windows系统无…...

抖音视频批量下载完整解决方案:从单视频到全自动归档管理

抖音视频批量下载完整解决方案&#xff1a;从单视频到全自动归档管理 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...

如何在3分钟内完成Zotero插件市场终极安装指南

如何在3分钟内完成Zotero插件市场终极安装指南 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing and installing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons 你是否曾为寻找合适的Zotero插件而…...