vue 项目使用 openlayers根据半径绘制圆形、绘制多边形
vue 项目使用 openlayers根据半径绘制圆形、绘制多边形
这个地方我就简单点写吧,因为一些东西比较乱,有的包啥的就按照官网API开发文档根据报错提示自己添加就可以了,我这个地方就不重复写了。
绘制圆形
这里的绘制圆是指当后台返回数据,告诉你以某个经纬度坐标为圆心,或者是顶点,以 r 为半径绘制,不是鼠标手动绘制。
首先绘制圆,首先有一个数据源和一个图层来存放绘制的圆形,这个很简单。然后创建变量自己该就可以,我估计都搞openlayer了,这些基础应该不至于不知道,我这边就写关键代码,我想应该没问题,我用的是默认3857坐标,不是4326。
sourcePoint = new VectorSource() // 创建数据源
layerPoint = new VectorLayer({ // 创建图层zIndex: 1, // 图层的层级
})
layerPoint.setSource(sourcePoint) // 把数据源绑定到图层上面
map.addLayer(layerPoint) // 把图层添加到地图上面去
好的,通过上面的代码实现了创建一个图层在地图上来放置绘制的圆形。
接下来就是向这个数据源去添加圆形,这个呢,还是嘛,和我之前写的博客差不多,那几部分相互嵌套,我还是把图在贴一下吧,这个图是大佬整理的,我直接拿来用了。
通过上面图看,刚刚我们做的,往地图上添加 layer 图层完成了,向 layer 添加 source 数据源也完成了。下一步就是往 source 中添加 feature 了。
// 绘制圆形addCircle() {let feature = new Feature({title: 'beijing',geometry: new Circle(fromLonLat([116.400819, 39.916263]), this.getRadius(500)), // 创建 以[116.400819, 39.916263]为圆心,500米为半径的圆,但是这个半径不是很准,没解决了})feature.setStyle(new Style({fill: new Fill({color: 'rgba(32, 157, 230, 0.5)'})}))feature.setId('1233') // 设置 feature 的ID值feature.set('data', { // 设置其他的数据name: 'wjw',})sourcePoint .addFeatures([feature])},
// 半径计算getRadius(radius) {let metersPerUnit = map.getView().getProjection().getMetersPerUnit();let circleRadius = radius / metersPerUnit;return circleRadius;},
上边代码就是实现了在地图上以某点,某半径绘制一个圆形,但是半径不是很准确,如果有大佬解决了半径不准确的问题希望帮忙指点一下。
鼠标移入修改样式
哎哟,写了一遍,忘记保存了,麻蛋,从新着这个地方。
上边我们在 openlayer 上面绘制了一个圆形,但是我想在鼠标移入的时候,圆变色,移出之后,颜色变回来,怎么整呢?
其实很简单,就是设置一下鼠标移动事件,监听鼠标有没有移动到圆上面,如果移动到了就获取这个圆的 feature,然后设置他的颜色,当移出之后再设置回来。
map.on('pointermove', ev => {let pixel = ev.pixel // 获取鼠标移动的位置let feature = map.forEachFeatureAtPixel(pixel, (feature) => {return feature // 根据位置查找有没有圆})if (feature) { // 如果有, feature 就是那个圆的feature,直接修改样式就行map.getTargetElement().style.cursor = 'pointer' // 设置鼠标变成小手指let pointData = feature.get('data') // 获取圆设置的数据// ... 然后是其他逻辑} else { // 如果没有,表示鼠标移出了圆map.getTargetElement().style.cursor = '' // 取消鼠标小手指的样式// ... 其他逻辑代码}})
绘制多边形
这个地方说的绘制多边形是指鼠标手动绘制,绘制完成可以获得鼠标绘制多边形的顶点坐标。
绘制
首先绘制和上面一样,只要是图层,就哪几层才能显示在地图上,所以呢,先创建图层、数据源添加到地图,然后呢,因为是鼠标绘制,所以说需要设置一下绘制完成的多边形在地图上什么样式,然后在一个就是添加鼠标交互的工具,所以说就是下面的代码。
source = new VectorSource();vector = new VectorLayer({source: source,style: new Style({fill: new Fill({color: 'rgba(255, 255, 255, 0.2)',}),stroke: new Stroke({color: '#ffcc33',width: 3,}),image: new CircleStyle({radius: 3,fill: new Fill({color: '#ffcc33',}),}),}),});map.addLayer(vector)modify = new Modify({ source: source });snap = new Snap({ source: source });draw = new Draw({source: source,type: 'Polygon',});
上边代码呢,实现了图层初始化和交互工具的初始化,接下来就是鼠标绑定事件绘制。
map.addInteraction(modify);map.addInteraction(draw);map.addInteraction(snap);draw.on('drawend', e => {//绘画完成触发时间const geometry = e.feature.getGeometry()const corrdinates = geometry.getCoordinates()let points = []corrdinates[0].forEach(item => {let xy = transform(item, 'EPSG:3857', 'EPSG:4326') // 转换成经纬度坐标points.push(xy)})this.$message.success('顶点坐标是:' + JSON.stringify(points))map.removeInteraction(draw); //移除交互map.removeInteraction(snap); //移除交互map.removeInteraction(modify); //移除交互});
编辑多边形
再次编辑的话,这个就很简单了,上一步不是移除了三个吗?第一个是鼠标绘制,编辑的时候除了鼠标绘制,其他两个移除的交互再加上就可以了。
map.addInteraction(modify);
map.addInteraction(snap);
完成绘制
绘制完成的话,在移除交互工具,然后重新获取一下顶点坐标列表就可以了。
map.removeInteraction(draw);//移除绘画互动map.removeInteraction(snap);//移除绘画互动map.removeInteraction(modify);//移除绘画互动let feature = source.getFeatures()[0]const geometry = feature.getGeometry()const corrdinates = geometry.getCoordinates()let points = []corrdinates[0].forEach(item => {let xy = transform(item, 'EPSG:3857', 'EPSG:4326')points.push(xy)})this.$message.success('顶点坐标是:' + JSON.stringify(points))
这里不贴图了
vue 项目使用 openlayers根据半径绘制圆形、绘制多边形相关推荐
- 如何在vue项目中使用echarts和高德地图绘制折线和热力图
1.先下载相关的依赖,这里echarts和高德地图放到一起.(高德地图需要先去申请一个key) // The Vue build version to load with the `import` c ...
- 关于VUE项目地图开发中大量点标记绘制一些总结
问题说明 在地图开发中,当地图中绘制大量的标记点后,无论是拖动或者缩放,都会感觉到明显的卡顿现象.(一般超过800个点后就比较明显了).在平时的工作业务中,由于公司的实时监控页面需要展现5000-20 ...
- vue全局引入openlayers_vue项目中openlayers绘制行政区划
vue项目中openlayers画行政区划(区域范围),供大家参考,具体内容如下 原理 在地图上画需要的范围,实际上就是在地图上打上一圈点,然后依次将这些点用线连接,就形成了范围 引用相应的ol模块 ...
- openlayers根据半径绘制圆形,多圆连线并标记距离
openlayers根据半径绘制圆形,多圆连线并标记距离 实现一个什么效果呢,就是在openlayers上面,绘制三个圆形,绘制完成之后,三个圆心连接起来,然后标记出每两个圆心之间的距离. 期望效果: ...
- vue项目引入百度地图BMapGL鼠标绘制和BMap辅助工具
目录 引言 1.引用百度地图 2.在项目中使用百度地图 2-1.页面结构部分 2-2.js逻辑部分 3-1.页面结构部分 Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架.它旨 ...
- 064:vue+openlayers根据坐标来显示点、线段、圆形、多边形(代码示例)
第064个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers项目中根据坐标信息来显示点.线段.圆形以及多边形. 直接复制下面的 vue+openlayers源代码,操作2分钟 ...
- 【VUE项目实战】9、创建登录组件并绘制布局
接上篇<8.登录与退出功能开发准备(二)> 上一篇讲解了登录模块的开发的前置准备工作,本篇来正式开发登录模块. 一.创建登录组件并渲染 下面我们创建一个根组件,并将根组件渲染到App根组件 ...
- 【vue项目使用echarts实现区域地图绘制,且可点击单独区域】
vue项目使用echarts实现区域地图绘制,且可点击单独区域 - 菜鸟程序员的总结 - 博客园
- android+动态地图+效果图,Android百度地图绘制圆形,圆形半径可动态变化
问题:百度地图绘制圆形,圆形半径可随进度拖动条发生改变 思路:圆形本身是一个覆盖物,可参考百度地图Demo中的OverlayDemo.java这个类进行实现.完成画圆之后,圆形半径如何随着进度条的拖动 ...
最新文章
- SAP EWM - 包装主数据 - 包装明细 -2
- 打印给定字符串中字符的所有排列
- jmeter5.1.1启动提示not able to find java executable or version的解决办法
- 聚合 aggregate
- OpenShift 4 - DevSecOps Workshop (4) - 为 Task 增加参数和Workspace
- ionic中定义路由的问题
- html中logo不变形,CSS3如何实现LOGO中的文本变形动画
- 一个Ext2+SWFUpload做的图片上传对话框收藏
- SpringBoot 发送邮件和附件(实用版)
- 打算做知识付费,所有了解一下视频加密
- 什么是论文陈述?论文陈述怎么写?
- android 怎么选择audio hal
- 1.1 迷茫的大学——《逆袭大学》连载
- 目标检测经典论文——YOLOv3论文翻译:YOLOv3: An Incremental Improvement(YOLOv3:增量式的改进)
- JS逆向基础知识个人总结
- Asus Prime B360M-A+i5-8400+RX 570 黑苹果efi引导文件
- 收下这份秘籍:如何提高投稿命中率
- keil仿真逻辑分析仪观察引脚变化
- unix程序员手册_推荐几本实惠电子书,程序员读的经典书都有,比如deep learning...
- 采用两阶段Faster RCNN算法,引入light head的思想
热门文章
- Arduino读取GPS模块
- 什么是“国家中小企业公共服务示范平台”?
- 为什么很多企业都在使用短信群发?原来是有3大好处!
- 【xitongshoucang.com】全方位对Shift键大揭秘
- STM32 IAP升级(bootLoader)
- 酷派5860s 游戏合集贴
- 写给前端初学者的Vue入门教程
- 如果win10 硬盘依然经常100%使用率 务必请安装achi驱动。
- 计算机硬盘对计算机速度的影响,实测加密软件BitLocker对硬盘性能有何影响
- 无法启动此程序,因为计算机中丢失rtl70.bpl怎么修复教程