Vue+Openlayers+Draw实现画笔切换功能,切换画笔为点、线、面
场景
Vue+Openlayer使用Draw实现交互式绘制线段:
Vue+Openlayer使用Draw实现交互式绘制线段_霸道流氓气质的博客-CSDN博客
Vue+Openlayer使用Draw实现交互式绘制多边形并获取面积:
Vue+Openlayer使用Draw实现交互式绘制多边形并获取面积_霸道流氓气质的博客-CSDN博客
如果需要将绘制点、线、面集成在一个页面中并且可以实现切换画笔样式。
注:
博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
1、页面上添加el-radio-group用来选择切换画笔
<el-radio-group v-model="radio" @change="toolChange"><el-radio label="1">普通鼠标</el-radio><el-radio label="2">绘制线</el-radio><el-radio label="3">绘制区域</el-radio> <el-radio label="4">绘制点</el-radio> </el-radio-group>
2、绑定的model值声明
data() {return { radio: '1',selectedStyle:null,//画笔stylecurrentTool:null,};
3、页面mounted中初始化地图时设置坐标的选中样式等。
methods: { //初始化地图init() {let self = this;// 获取点击地图的坐标(选中样式)self.selectedStyle = new Style({fill: new Fill({color: 'rgba(1, 210, 241, 0.2)'}),stroke: new Stroke({color: 'yellow',width: 4})});// 选择线的工具类this.selectTool = new Select({multi: true,hitTolerance: 10, // 误差style: this.selectedStyle // 选中要素的样式})
4、改变画笔的change事件
//改变画笔toolChange(val){let self = this;//移除交互self.map.removeInteraction(self.selectTool);self.coordinate = []//清空交互的图层self.drawLineLayer.getSource().clear()self.removeDraw();//添加交互self.map.addInteraction(self.selectTool)switch(val){ case '2'://调用绘图工具并传递类型为线,其他类型有Point,LineString,Polygon,Circleself.onAddInteraction('LineString')self.currentTool = "LineString";break;case '3'://调用绘图工具并传递类型为线,其他类型有Point,LineString,Polygon,Circleself.onAddInteraction('Polygon')self.currentTool = "Polygon";break;case '4'://调用绘图工具并传递类型为线,其他类型有Point,LineString,Polygon,Circleself.onAddInteraction('Point')self.currentTool = "Point";break;}},
重新移除交互并清空图层与点位数据存储点,然后调用添加绘图工具的方法并传递不同的参数类型,并将选中的画笔类型记录下来。
添加绘图工具的方法实现
// 绘图工具onAddInteraction(type) {let self = this//勾绘矢量图形的类this.draw = new Draw({//source代表勾绘的要素属于的数据集source: self.drawLineSource,//type 表示勾绘的要素包含的 geometry 类型type: type})//绘制结束时触发的事件this.draw.on('drawend', function(e) { const geometry = e.feature.getGeometry()let pointArr = geometry.getCoordinates()debugger//限制只绘制一个多边形self.removeDraw()switch(self.currentTool){ case 'LineString':self.pointArr = pointArr;//调用接口保存线let param = {pointList:self.pointArr}insertLineRequest(param).then((response) => {self.msgSuccess("新增成功");//刷新监测点数据self.getPointList();//成功之后删除线self.drawLineLayer.getSource().clear()});break;case 'Polygon'://只获取第一个多边形的坐标 self.pointArr = pointArr[0];self.dialogVisible = true;break;case 'Point'://调用新增点的接口self.pointArr = pointArr;break;} })self.map.addInteraction(this.draw)},
这样就可以根据不同的画笔类型在绘制结束时进行不同的业务处理
其中删除draw的方法
//删除交互removeDraw() {this.map.removeInteraction(this.draw)},
5、页面上添加重新绘制按钮,其点击事件中
//重新绘制clear() {this.coordinate = []this.drawLineLayer.getSource().clear()//添加交互this.map.addInteraction(this.selectTool)switch(this.currentTool){ case 'LineString':this.onAddInteraction('LineString')break;case 'Polygon':this.onAddInteraction('Polygon')break;case 'Point':this.onAddInteraction('Point')break;} },
根据当前选中的画笔类型,初始化画笔为对应的类型。
Vue+Openlayers+Draw实现画笔切换功能,切换画笔为点、线、面相关推荐
- Spring Boot 2中的功能切换
无论您是否喜欢,软件开发都是一项协作活动. 整合工作一直被妖魔化,并被视为必不可少的邪恶. 有几种方法可以解决有效集成的挑战. 功能切换开关属于该组. 在本文中,您将在实践中看到如何在Spring B ...
- macf键与功能键切换_功能切换(功能开关或功能标志)与功能分支
macf键与功能键切换 功能分支 如果使用分支,则表示不进行持续集成/部署/交付 ! 您可能具有很好的单元测试 代码覆盖率 ,可能正在执行TDD ,可能已经以BDD格式编写了功能和集成测试,并且可能在 ...
- Vue+Openlayers+el-radio实现切换地图显示
场景 Vue+Openlayers+el-checkbox实现多选配置图层的显示和隐藏: Vue+Openlayers+el-checkbox实现多选配置图层的显示和隐藏_BADAO_LIUMANG_ ...
- 2020用vue实现仿美团导航切换功能和淘宝购物车功能,实现默认第一个导航显示效果?
总结:之前一直未写过同时实现跳转当前页面和跳转新页面的项目,要么是当前,要么是新页面,今天更新一个两个同时实现的项目. :相信很多人都遇到过router-link通过to跳转页面有时候会不显示内容的b ...
- vue实现Tab切换功能
在项目开发中,我们经常会碰到Tab切换的功能,而在Vue中想实现这样的功能也应该有很多种,常用的三种应该是 Tab路由切换.Tab动态组件切换.通过v-show设置Tab显示隐藏.每种方法实现起来其实 ...
- vue中tab切换前端实现_vue实现Tab切换功能
在项目开发中,我们经常会碰到Tab切换的功能,而在Vue中想实现这样的功能也应该有很多种,常用的三种应该是 Tab路由切换.Tab动态组件切换.通过v-show设置Tab显示隐藏.每种方法实现起来其实 ...
- WebGIS实战:Vue+Openlayers实现网络地图的加载与切换
目录 前言 1.效果图 2.实现步骤 3.下一步计划 相关Web GIS实战信息: 上一篇博客:WebGIS实战:Web GIS开发环境配置 下一篇博客:WebGIS实战:Vue+Openlayers ...
- vue 轮播组件 vue-seamless-scroll简单用法/上下左右无缝滚动,单步滚动,以及支持水平方向的手动切换功能
一.vue-seamless-scroll是什么? vue-seamless-scroll是一个基于Vue.js的简单无缝滚动组件, 基于requestAnimationFrame实现,配置多满足多样 ...
- 个人建议:设置Alt+S快捷键来控制VSCode自动保存切换功能
经常要修改配置文件或者组件Vue,但是自动保存如果设置了就会导致还没输入完成一个完整代码行,就自动格式化(当时这种情况真的想骂人),但平时编辑Vue页面文件又不想每次都去Ctrl+S保存(毕竟键盘死的 ...
最新文章
- PHPCMS中GET标签概述
- PHP几个防SQL注入攻击自带函数区别
- a challengefor the 2 hour course
- idea单行注释对齐修改Settings - Editor - Code Style-Code Generation,取消comment code的勾选
- POJ 3696 欧拉函数+快速幂
- 卫星系统——酒店后端全链路日志收集工具介绍
- linux usb键盘驱动详解
- linux 驱动基础知识(2)---设备树
- HDU 4553:约会安排(区间合并)
- 分布式监控:Zabbix_sender介绍及配置
- 腾讯之困,QQ与微信各有各的烦恼
- C#串口介绍以及简单串口通信程序设计实现
- mseed读取[2]
- GoogleNet论文解读
- 古琴初学者购琴指南(值得收藏)
- 获取当前的url并移除不想要的字段
- mvc2 mvc_迅捷的MVC
- JavaSE基础(21) 打印数组
- Diffusion models代码解读:入门与实战
- #牛客网 吐泡泡 (栈)
热门文章
- NYOJ_1013除法表达式
- html5 loader,7种基于GSAP的SVG Loader加载动画特效
- pc构件生产线及设备_PC构件成组立模生产线
- python怎么显示分数_在Python中使用分数
- ffmpeg 添加水印LOGO
- 使用远程工具连接提示**Host *** is not allowed to connect to this mysql server**拒绝连接错误
- 虚拟机的分类_「面试必备」Java虚拟机知识点复习手册(下)
- mysql 透明代理_透明代理MySQL_基于zbus的MySQL透明代理(100行)-云栖社区
- 0x80070659系统策略禁止这个安装 vc_教你一招,解决所有系统丢失DLL文件的问题!...
- 记事本保存的内容被覆盖_记事本的妙用——双击记事本即可关机