目录

  • 安装
  • 引入,在项目main.js中
  • 初始化地图
    • 初始化
    • 引入图层,可以引入多个图层
    • 地图事件
  • 添加绘制工具
    • 引入leafle.pm原生组件
    • 设置绘图样式
    • 设置语言
  • 自定义绘图按钮
    • Drawing Mode绘图模式
    • 绑定按钮
    • 获取绘制的坐标
  • 自定义编辑按钮
    • 绘制多边形
    • Edit Mode 编辑功能
    • 全局编辑
  • Drag Mode 拖拽模式
  • Removal Mode 移除模式
  • Cutting Mode 剪切模式

安装

leaflet
leaflet.pm绘图工具

npm install leaflet
npm install leaflet.pm

引入,在项目main.js中

import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";// 引入Leaflet对象 挂载到Vue上,便于全局使用,也可以单独页面中单独引用
import * as L from "leaflet";
import "leaflet/dist/leaflet.css";
import "leaflet.pm";
import "leaflet.pm/dist/leaflet.pm.css";Vue.config.productionTip = false;
Vue.L = Vue.prototype.$L = L;/* leaflet icon */
delete L.Icon.Default.prototype._getIconUrl;
L.Icon.Default.mergeOptions({iconRetinaUrl: require("leaflet/dist/images/marker-icon-2x.png"),iconUrl: require("leaflet/dist/images/marker-icon.png"),shadowUrl: require("leaflet/dist/images/marker-shadow.png"),
});new Vue({router,store,render: (h) => h(App),
}).$mount("#app");

初始化地图

初始化

this.map = L.map("map", {center: [40.02404009136253, 116.50641060224784], // 地图中心zoom: 14, //缩放比列zoomControl: false, //禁用 + - 按钮doubleClickZoom: false, // 禁用双击放大attributionControl: false, // 移除右下角leaflet标识
});

引入图层,可以引入多个图层

let gaoDeLayer = L.tileLayer("http://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}"
)
gaoDeLayer.addTo(this.map);

地图事件

// 添加地图点击弹窗
this.map.on('click', (e) => {L.popup().setLatLng(e.latlng).setContent("You clicked the map at " + e.latlng.toString()).openOn(this.map);});

添加绘制工具

引入leafle.pm原生组件

this.map.pm.addControls({position: "topleft",drawPolygon: true, // 绘制多边形drawMarker: false, //绘制标记点drawCircleMarker: false, //绘制圆形标记drawPolyline: false, //绘制线条drawRectangle: true, //绘制矩形drawCircle: false, //绘制圆圈editMode: true, //编辑多边形dragMode: true, //拖动多边形cutPolygon: true, // 添加一个按钮以删除多边形里面的部分内容removalMode: true  // 清除多边形
});

设置绘图样式

接收参数

1、单独设置某个模式的样式

// 控制绘制样式  如下给Polygon多边形设置样式
var options = {// 连接线  标记之间的线templineStyle: {color: 'red',},// 提示线  从最后一个标记到鼠标光标的线hintlineStyle: {color: 'red',dashArray: [5, 5],},// 绘制完成的样式pathOptions: {color: 'orange',fillColor: 'green',},
};
// 会激活绘制多边形功能
this.map.pm.enableDraw('Polygon', options);

2、设置全局的pathOptions样式

this.map.pm.setPathOptions({color: 'orange',fillColor: 'green',fillOpacity: 0.4,
});

设置语言

//设置语言  en, de, it, ru, ro, es, fr, pt_br, zh , nl
this.map.pm.setLang('zh');

自定义绘图按钮

Drawing Mode绘图模式

// 启用绘制多边形功能
map.pm.enableDraw('Polygon', {snappable: true,//启用捕捉到其他绘制图形的顶点snapDistance: 20,//顶点捕捉距离
});// 关闭绘制  注意也可以关闭其他模式的绘制功能
map.pm.disableDraw('Polygon');

绑定按钮

<template><div class="home"><button @click="drawRectangle">绘制矩形</button><button @click="drawCircle">绘制圆</button><button @click="disableDraw">关闭绘制</button><div id="map"></div></div>
</template>
drawRectangle () {this.map.pm.enableDraw('Rectangle', {snappable: true,snapDistance: 20,});
},
drawCircle () {this.map.pm.enableDraw('Circle', {snappable: true,snapDistance: 20,});
},
disableDraw () {this.map.pm.disableDraw('Rectangle');
},

获取绘制的坐标

//pm:drawstart 开始第一个点的时候调用
//pm:drawend  禁止绘制时调用
//pm:create  图形创建完成时调用
this.map.on("pm:drawstart", e => {console.log(e, "first");
});
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], "绘制坐标")}
});

自定义编辑按钮

绘制多边形

官方详解

      // 绘制多边形let latlngs = [[50.0214690112063, 116.50239229202272],[50.019694293123855, 116.50224208831787],[50.01979288978388, 116.50580406188966],[50.021436146476105, 116.50601863861085],[50.02253710631967, 116.50316476821901]];// color:线段颜色// weight:线段宽度// opacity:线段透明度// dashArray:虚线间隔// fill:是否填充内部(true/false)// fillColor:内部填充颜色,如不设置,默认为color颜色// fillOpacity:内部填充透明度this.myPolygon = L.polygon(latlngs, { color: "red" }).addTo(this.map);// 调整地图视图中心点为多边形中心点this.map.setView(this.myPolygon.getCenter(), 16)

Edit Mode 编辑功能

layer为需要改变的图层,即矢量元素(如多边形等)

<button @click="enableEdit">编辑</button>
<button @click="disableEdit">关闭编辑</button>// 编辑
enableEdit () {let layer = this.myPolygon// 添加可编辑功能layer.pm.enable({allowSelfIntersection: false,});// 监听编辑事件layer.on('pm:vertexadded', e => {console.log(e, "添加顶点")});layer.on('pm:edit', e => {console.log(e, "拖动");console.log(e.target._latlngs[0], "拖动后的坐标")});
},// 关闭编辑
disableEdit () {let layer = this.myPolygonlayer.pm.disable()
}

全局编辑

// 开启全体编辑
this.map.pm.enableGlobalEditMode();
// 禁用全局编辑
this.map.pm.disableGlobalEditMode()
// 全局编辑切换
this.map.pm.toggleGlobalEditMode();
// 判断是否全局编辑,有返回值
let isEdit = this.map.pm.globalEditEnabled();

Drag Mode 拖拽模式

// 全局拖拽模式切换
this.map.pm.toggleGlobalDragMode();
// 是否启用全局拖动模式,有返回值
console.log(this.map.pm.globalDragModeEnabled())// 全局的拖拽模式切换监听器
this.map.on('pm:globaldragmodetoggled', e => {console.log(e);
});
// 单个元素添加拖拽监听
let layer = this.myPolygon
layer.on('pm:dragend', e => {console.log(e, "拖拽")
});

Removal Mode 移除模式

map.pm.toggleGlobalRemovalMode();
map.pm.globalRemovalEnabled()

Cutting Mode 剪切模式

<button @click="enableCut">启用剪辑</button>
<button @click="disableCut">关闭剪辑</button>enableCut () {// 开启剪切功能this.map.pm.Draw.Cut.enable({allowSelfIntersection: false,});// 单个元素添加剪切监听let layer = this.myPolygonlayer.on('pm:cut', e => {console.log(e, "剪切")});
},
disableCut () {// 关闭剪切功能this.map.pm.Draw.Cut.disable();
}

vue使用leafLet(绘图工具详解)相关推荐

  1. pyecharts的绘图原理详解

    其实学习任何一门编程语言,最重要的就是学习它的原理.在前面我们已经介绍了matplotlib.seaborn.plotly的绘图原理,今天给大家介绍的是,我认为交互效果最好的一个python绘图库,学 ...

  2. rpm包安装和卸载,rpm查询,yum工具详解,yum仓库搭建

    rpm包安装和卸载 [root@binbinlinux Packages]# rpm -ivh zip-3.0-1.el6.x86_64.rpm    安装rpm包命令   ivh I=安装的意思in ...

  3. keep alive PHP,vue中keep-alive使用方法详解

    这次给大家带来vue中keep-alive使用方法详解,vue中keep-alive使用的注意事项有哪些,下面就是实战案例,一起来看一下. 1.keep-alive的作用以及好处 在做电商有关的项目中 ...

  4. php动态写入vue,Vue自定义动态组件使用详解

    这次给大家带来Vue自定义动态组件使用详解,Vue自定义动态组件的注意事项有哪些,下面就是实战案例,一起来看一下. 现在基于vue的UI组件库有很多,比如iview,element-ui等.但有时候这 ...

  5. python turtle库setpos_Python内置海龟(turtle)库绘图命令详解(二)

    继续谈利用海龟库(turtle库)做图.在这篇文章(Python内置海龟(turtle)库绘图命令详解(一))中已经介绍了turtle的一些基本画图命令,包括画布的设计.画笔属性与状态的设置以及画笔的 ...

  6. centos rpm 安装 perl_XtraBackup工具详解 Part 2 xtrabackup安装

    实验环境 此次实验的环境如下 MySQL 5.7.25 Redhat 6.10 1. xtrabackup版本 我们在官方网站可以看到xtrabackup有多个版本 https://www.perco ...

  7. Chrome开发者工具详解(4)-Profiles面板

    Chrome开发者工具详解(4)-Profiles面板 如果上篇中的Timeline面板所提供的信息不能满足你的要求,你可以使用Profiles面板,利用这个面板你可以追踪网页程序的内存泄漏问题,进一 ...

  8. parted工具详解

    通常我们用的比较多的一般都是fdisk工具来进行分区,但是现在由于磁盘越来越廉价,而且磁盘空间越来越大:而fdisk工具他对分区是有大小限制的,它只能划分小于2T的磁盘.但是现在的磁盘空间很多都已经是 ...

  9. Java定时任务调度工具详解之Timer篇

    Java定时任务调度工具详解之Timer篇 https://segmentfault.com/a/1190000009542398

最新文章

  1. zipfile java 解压速率,使用java.util.ZipFile在同一层次中解压缩zipfile
  2. 人工智能筑起网络安全“铜墙铁壁”
  3. Multiple classes found for path in the registry of this declarative base. Please use a fully
  4. 获取当前脚本所在的绝对路径
  5. python变量运算符_Python基础 — 变量和运算符
  6. java反向注入_java 控制反转和依赖注入的理解
  7. 微信小程序中base64转换成图片;uni-app小程序base64转图片;微信小程序base64文件转图片;微信小程序base64图片转图片
  8. STL源码剖析 list概述
  9. 计算机主要是以划分发展阶段的,计算机以什么划分发展阶段
  10. 从Android界面开发谈起
  11. mysql5建函数报1064错误_Mysql创建表过程中报1064错误
  12. 台湾通泰TTP223-BA6和TTP223N-BA6有什么区别?
  13. 计算机主机声音怎么办,电脑机箱声音大怎么办?电脑机箱声音大解决方法
  14. java 限流器实现
  15. C# 串口CRC CCITT-FALSE 校验
  16. 个人购买云服务器的必要性和最常见几个用途?细节考虑
  17. 《Effective Java》读书笔记五(枚举和注解)
  18. 吃货程序猿怎么区分低热量食品
  19. C#获取动态key的json对象的值
  20. linux 上传文件rz -bye

热门文章

  1. 体系建设的核心任务--明确目标
  2. MySQL如何查看数据库、表占用磁盘大小
  3. win7连接sftp_虚拟机安装linux,与本机win7可以ping通,win7能ftp连上linux,linux能sftp本地环回地址,但flashfxp报错...
  4. PriorityBlockingQueue无界阻塞优先级队列
  5. centos系统 关机、重启
  6. [转载]与大学生谈软件外包
  7. prefetch 和preload_使用 Preload/Prefetch 优化你的应用
  8. RationalDMIS 7.1 模型坐标系转换
  9. 中国式富爸爸穷爸爸—富爸爸如何教育大学毕业生
  10. HUAWEI P10/P10 Plus 亮相MWC2017