leaflet知识点:leaflet.draw的使用指南

news2024/11/25 18:33:43

一,安装插件

npm i leaflet-draw --save 

二,引入插件

import "leaflet-draw";
import "leaflet-draw/dist/leaflet.draw.css";

三,使用插件

leaflet-draw的插件使用有两种方法。

1. 作为工具栏控件加入到地图种使用
//添加绘制图层
const drawnItems = new L.FeatureGroup();
map.addLayer(drawnItems);
//添加绘制控件
const drawControl = new L.Control.Draw({
    draw:{
        //绘制线
        polyline:true,
        //绘制多边形
        polygon:true,
        //绘制矩形
        rectangle:true,
        //绘制圆
        circle:true,
        //绘制标注
        marker:true,
        //绘制圆形标注
        circlemarker:true
    },
    edit:{
        //绘制图层
        featureGroup:drawnItems,
        //图形编辑控件
        edit:true,
        //图形删除控件
        remove:true,
    }
});
//添加绘制控件
map.addControl(drawControl);
2. 不使用工具栏直接绘制图层。
// 图层绘制
new L.Draw.Polyline(map, drawControl.options.polyline).enable()
new L.Draw.Polygon(map, drawControl.options.polygon).enable()
new L.Draw.Rectangle(map, drawControl.options.rectangle).enable()
new L.Draw.Circle(map, drawControl.options.circle).enable()
new L.Draw.Marker(map, drawControl.options.marker).enable()
new L.Draw.CircleMarker(map, drawControl.options.circlemarker).enable()
// 图层编辑
L.polyline(latlngs).editing.enable() // new L.Edit.Poly(layer).enable()
L.polygon(latlngs).editing.enable() // new L.Edit.Poly(layer).enable()
L.rectangle(latlngs).editing.enable() // new L.Edit.Rectangle(layer).enable()
L.circle(latlng).editing.enable() // new L.Edit.Circle(layer).enable()
L.marker(latlng).editing.enable() // new L.Edit.Marker(layer).enable()
L.circleMarker(latlng).editing.enable() // new L.Edit.CircleMarker(layer).enable()
// 图层组批量编辑
const drawnItems = new L.FeatureGroup();
new L.EditToolbar.Edit(map, {
	featureGroup:drawnItems,
	selectedPathOptions: drawControl.options.edit.selectedPathOptions
}).enable();
// 图层组批量删除
const drawnItems = new L.FeatureGroup();
new L.EditToolbar.Delete(map, {
	featureGroup: drawnItems
}).enable();

在这里插入图片描述

3. 图层事件

插件推荐使用L.Draw.Event.EVENTNAME常数,也可以直接使用draw:eventname

L.Draw.Event.CREATED = 'draw:created'; // 当一个新的图层被创建时触发
L.Draw.Event.EDITED = 'draw:edited'; // 当图层编辑完成时触发
L.Draw.Event.DELETED = 'draw:deleted'; // 当图层删除完成时触发
L.Draw.Event.DRAWSTART = 'draw:drawstart'; // 当图层开始绘制时触发
L.Draw.Event.DRAWSTOP = 'draw:drawstop';// 当图层绘制完成时触发
L.Draw.Event.DRAWVERTEX = 'draw:drawvertex'; // 当图层绘制拐点时触发
L.Draw.Event.EDITSTART = 'draw:editstart';  // 使用L.EditToolbar.Edit或者用户单击编辑工具按钮启动编辑模式时触发。
L.Draw.Event.EDITMOVE = 'draw:editmove';  // 当用户移动矩形、圆形或标记图层时触发
L.Draw.Event.EDITRESIZE = 'draw:editresize'; // 当用户编辑矩形或圆形图层的大小时触发
L.Draw.Event.EDITVERTEX = 'draw:editvertex';// 当图用户编辑图层拐点时触发
L.Draw.Event.EDITSTOP = 'draw:editstop'; // 当图层编辑完成时触发
L.Draw.Event.DELETESTART = 'draw:deletestart'; // 使用L.EditToolbar.Delete或者用户单击删除工具按钮启动编辑模式时触发。
L.Draw.Event.DELETESTOP = 'draw:deletestop';// 当图层删除完成时触发
L.Draw.Event.TOOLBAROPENED = 'draw:toolbaropened';// 打开工具栏时触发
L.Draw.Event.TOOLBARCLOSED = 'draw:toolbarclosed';// 关闭工具栏时触发
L.Draw.Event.MARKERCONTEXT = 'draw:markercontext';// 当右击标记时触发

ps: 如果发现draw:drawstart一直不触发,查看一下L.Draw.Event.DRAWSTART是不是在enable()方法执行之前监听的。

四,插件多语言

1. 部分修改
L.drawLocal.extend({
     draw: {
         toolbar: {
             buttons: {
                 polygon: '绘制一个多边形'
             }
         }
     }
 });
2.完全修改
L.drawLocal = {
	draw: {
	    toolbar: {
	      actions: {
	        title: '取消绘图', 
	        text: '取消', 
	      },
	      finish: {
	        title: '完成绘图', 
	        text: '完成',
	      },
	      undo: {
	        title: '删除最后绘制的点',
	        text: '删除最后的点', 
	      },
	      buttons: {
	        polyline: '绘制一个多段线', 
	        polygon: '绘制一个多边形',
	        rectangle: '绘制一个矩形', 
	        circle: '绘制一个圆',
	        marker: '绘制一个标记',
	        circlemarker: '绘制一个圆形标记',
	      },
	    },
	    handlers: {
	      circle: {
	        tooltip: {
	          start: '单击并拖动以绘制圆',
	        },
	        radius: 'Radius',
	      },
	      circlemarker: {
	        tooltip: {
	          start: '单击“地图”以放置圆标记',
	        },
	      },
	      marker: {
	        tooltip: {
	          start: '单击“地图”以放置标记',
	        },
	      },
	      polygon: {
	        tooltip: {
	          start: '单击开始绘制形状', 
	          cont: '单击继续绘制形状', 
	          end: '单击第一个点关闭此形状', 
	        },
	      },
	      polyline: {
	        error: '<strong>错误:</strong>形状边缘不能交叉!',
	        tooltip: {
	          start: '单击开始绘制线', 
	          cont: '单击以继续绘制线', 
	          end: '单击“最后一点”以结束线', 
	        },
	      },
	      rectangle: {
	        tooltip: {
	          start: '单击并拖动以绘制矩形', 
	        },
	      },
	      simpleshape: {
	        tooltip: {
	          end: '释放鼠标完成绘图',
	        },
	      },
		},
	},
	edit: {
	    toolbar: {
	      actions: {
	        save: {
	          title: '保存更改',
	          text: '保存', 
	        },
	        cancel: {
	          title: '取消编辑,放弃所有更改', 
	          text: '取消', 
	        },
	        clearAll: {
	          title: '清除所有图层', 
	          text: '清除所有', 
	        },
	      },
	      buttons: {
	        edit: '编辑图层', 
	        editDisabled: '无可编辑的图层', 
	        remove: '删除图层', 
	        removeDisabled: '无可删除的图层',
	      },
	    },
	    handlers: {
	      edit: {
	        tooltip: {
	          text: '拖动控制柄或标记以编辑要素', 
	          subtext: '单击“取消”撤消更改', 
	        },
	      },
	      remove: {
	        tooltip: {
	          text: '单击要删除的要素',
	        },
	      },
	    },
	  },
	};

五,插件说明

1.L.Draw继承关系

Draw.Polyline继承Draw.Feature

Draw.Polygon继承Draw.Polyline

Draw.SimpleShape继承Draw.Feature

Draw.Rectangle继承Draw.SimpleShape

Draw.Circle继承Draw.SimpleShape

Draw.Marker继承Draw.Feature

Draw.CircleMarker继承Draw.Marker

2. L.DrawToolbar和L.EditToolbar上对应的就是第一种方法种工具栏的处理逻辑

在这里插入图片描述

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

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

相关文章

linux离线安装NodeJs

一、官方下载 地址&#xff1a;Node.js — Download Node.js 选择linux系统版本 为了防止安装过程出现一些适配问题&#xff0c;我没有选择下载最新版&#xff0c;实际应该下载你的前端所用的nodejs版本 未完待续。。

深度解析Android APP加固中的必备手段——代码混淆技术

Android APP 加固是优化 APK 安全性的一种方法&#xff0c;常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码 使用 ipaguard工具可以对代码进行混淆&#xff0c;使得反编译出来的代码很难阅读和理解&#xff…

3.5网安学习第三阶段第五周回顾(个人学习记录使用)

本周重点 ①SSRF服务器端请求伪造 ②序列化和反序列化 ③Vaudit代码审计 本周主要内容 ①SSRF服务器端请求伪造 一、概述 SSRF: server site request forgery (服务器端请求伪造)。 SSR: 服务端请求&#xff0c;A服务器通过函数向B服务器发送请求。 SSRF发生的前提条件…

idea 报错 Could not list the contents of folder “ftps

idea 报错 Could not list the contents of folder "ftps 解决方案 这里看到了网上的解决方案&#xff0c;顺便再记录一下。打开 【高级】菜单 - 取消勾选 被动模式。然后点击测试连接&#xff0c;显示连接成功&#xff01; ftp中的主动模式和被动模式 主动模式&…

1.JavaEE进阶篇 - 为什么要学习SpringBoot呢?

文章目录 1.为什么要学框架&#xff1f;2.框架的优点展示(SpringBoot VS Servlet)2.1 Servlet 项⽬开发2.1.1 创建项⽬2.1.2 添加引⽤2.1.3 添加业务代码2.1.4 运⾏项⽬(配置tomcat)2.1.5 Maven配置2.1.5.1修改本地Maven仓库地址2.1.5.2 配置settings.xml文件2.1.5.3项目 本地仓…

Nginx开发实战三:替换请求资源中的固定数据

文章目录 1.效果预览2.下载Nginx解压并初始化3.字符串替换模块安装4.修改nginx配置文件并重启 1.效果预览 页面初始效果 页面替换后效果 说明:页面是内网的一个地址&#xff0c;我们通过nginx可以很便捷的将其改为外网访问&#xff0c;但是在外网访问这个地址后&#xff0c…

剑指offer--数组中重复的数字

一.题目描述 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 算法1.排序,然后遍历,时间复杂度O(nlogn),空…

CVE-2023-4427:Out-of-bounds access in ReduceJSLoadPropertyWithEnumeratedKey

文章目录 前言环境搭建for-in && enum cache漏洞分析漏洞利用总结参考 前言 之前分析调试漏洞时&#xff0c;几乎都是对着别人的 poc/exp 调试&#xff0c;感觉对自己的提升不是很大&#xff0c;所以后面分析漏洞时尽可能全面分析&#xff0c;从漏洞产生原理、如何稳定…

前端学习<三>CSS进阶——0102-CSS布局样式

前言 css 进阶的主要内容如下。 1、css 非布局样式 html 元素的分类和特性 css 选择器 css 常见属性&#xff08;非布局样式&#xff09; 2、css 布局相关 css 布局属性和组合解析 常见布局方案 三栏布局案例 3、动画和效果 属于 css 中最出彩的内容。 多背景多投影特…

(C)1007 素数对猜想

1007 素数对猜想 问题描述 输入样例&#xff1a; 20 输出样例&#xff1a; 4 解决方案&#xff1a; #include<stdio.h> #include<string.h> #include<math.h> int main(){int n,d;int a[100000];int flag,jishu0;scanf("%d",&n);memset(a,-1,…

HubSpot出海CRM的优势有哪些?

强大的客户关系管理能力&#xff1a;HubSpot出海CRM提供了一套完整的客户关系管理功能&#xff0c;企业可以轻松地记录、整理和分析客户的各种信息&#xff0c;包括基本资料、购买历史、沟通记录等。这使得企业能够更深入地了解客户的需求和偏好&#xff0c;为后续的营销和销售…

持续交付/持续部署流水线介绍(CD)

目录 一、概述 二、典型操作流程 2.1 CI/CD典型操作流 2.2 CI/CD操作流程说明 2.3 总结 三、基于GitHubDocker的持续交付/持续部署流水线&#xff08;公有云&#xff09; 3.1 基于GitHubDocker的持续交付/持续部署操作流程示意图 3.2 GitHubDocker持续交付/持续部署流水…

2023.4.7 机器学习周报

目录 引言 Abstract 文献阅读 1、题目 2、引言 3、过去方案和Motivation 4、Segment Anything模型 5、创新点 6、实验过程 7、实验结果 1、评价绩效 2、检测评价 3、跟踪评价 8、 结论 总结 引言 本周阅读了一篇关于高效的任意分割模型的文献&#xff0c;用于自…

1区、TOP、CCF推荐,最快16天录用!4月刊源表已更新!

毕业推荐 SSCI • 社科类&#xff0c;分区稳步上升&#xff08;最快13天录用&#xff09; IEEE&#xff1a; • 计算机类&#xff0c;1区(TOP)&#xff0c;CCF推荐 SCIE • 计算机工程类&#xff0c;CCF推荐&#xff08;最快16天录用&#xff09; 2024年4月 SCI/SSCI/EI…

环境搭建 | Windows 11系统从0开始搭建SonarQube环境分析C sharp项目代码

1 安装&使用流程 JDK 17环境搭建Sonarqube 10.0安装PostgreSQL 12数据库安装配置MSBuild下载安装SonarScanner for MSBuild使用SonarQube分析C#代码并上传到服务器 注意&#xff1a;SonarQube环境搭建时对各个软件的版本都有要求&#xff0c;如果你不确定使用何版本&…

窥探未来:Web3如何颠覆传统互联网

随着科技的迅速发展&#xff0c;Web3正逐渐成为人们关注的焦点。与传统的Web2相比&#xff0c;Web3代表了一种全新的互联网模式&#xff0c;其潜力和影响力引发了人们对未来的期待和探索。本文将深入探讨Web3如何颠覆传统互联网的各个方面&#xff0c;并展望其可能带来的未来变…

缺省参数

缺省参数 缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实 参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void Func(int a 0) {cout<<a<<endl; } int main() {Func(); // 没有传…

websocket 局域网 webrtc 一对一 多对多 视频通话 的示例

基本介绍 WebRTC&#xff08;Web Real-Time Communications&#xff09;是一项实时通讯技术&#xff0c;它允许网络应用或者站点&#xff0c;在不借助中间媒介的情况下&#xff0c;建立浏览器之间点对点&#xff08;Peer-to-Peer&#xff09;的连接&#xff0c;实现视频流和&am…

DC-9靶场

一.环境搭建 1.下载地址 靶机下载地址&#xff1a;https://download.vulnhub.com/dc/DC-9.zip 2.虚拟机配置 设置虚拟机为nat&#xff0c;遇到错误点重试和是 开启虚拟机如下图所示 二.开始渗透 1. 信息收集 查找靶机的ip地址 arp-scan -l 发现靶机的ip地址为192.168.11…

计算机网络面试问题(一)

1.在浏览器中输⼊URL并按下回⻋之后会发⽣什么 2.TCP三次握⼿的过程,为什么三次握手 TCP&#xff08;传输控制协议&#xff09;的三次握⼿是建⽴⽹络连接的过程&#xff0c;确保通信双⽅能够正确地进⾏数据传输。 第⼀次握⼿&#xff08;SYN&#xff09;&#xff1a; 客户端&am…