场景

Vue+Openlayer使用Draw实现交互式绘制线段:

Vue+Openlayer使用Draw实现交互式绘制线段_BADAO_LIUMANG_QIZHI的博客-CSDN博客

在上面的基础上实现的交互式绘制线段,还可以实现绘制多边形并直接计算出面积。

注:

博客:
BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_CSDN博客
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

1、导入基本模块

//导入基本模块
import "ol/ol.css";
import Map from "ol/Map";
import View from "ol/View";
import { Fill,Style,Stroke} from "ol/style";
//导入相关模块
import { Tile as TileLayer , Vector as VectorLayer } from 'ol/layer'
import { TileWMS ,Vector as VectorSource } from 'ol/source'
import { Select, Draw } from 'ol/interaction'
import { getArea } from "ol/sphere";

2、与前面博客相比,绘图工具传递的类型为Polygon

this.onAddInteraction('Polygon')

3、绘制结束时触发的事件中获取所绘制面积

        //绘制结束时触发的事件this.draw.on('drawend', function(e) {const geometry = e.feature.getGeometry()var area = getArea(geometry);console.log("area="+area)var output;if (area > 10000) {output = (Math.round(area / 1000000 * 100) / 100) +' ' + 'km<sup>2</sup>';} else {output = (Math.round(area * 100) / 100) +' ' + 'm<sup>2</sup>';}console.log("output="+output)let pointArr = geometry.getCoordinates()self.coordinate.push(pointArr)console.log("self.coordinate="+self.coordinate);self.removeDraw()})

这里在绘制结束事的回调方法中直接获取geometry,然后调用ol自带的getArea方法,计算出面积

计算面积在线演示地址

ol-measure - CodeSandbox

4、完整示例代码

​
<template><div id="app"><div id="map" class="map"></div></div>
</template><script>
//导入基本模块
import "ol/ol.css";
import Map from "ol/Map";
import View from "ol/View";
import { Fill,Style,Stroke} from "ol/style";
//导入相关模块
import { Tile as TileLayer , Vector as VectorLayer } from 'ol/layer'
import { TileWMS ,Vector as VectorSource } from 'ol/source'
import { Select, Draw } from 'ol/interaction'
import { getArea } from "ol/sphere";
export default {name: "olMapTileWMSDrawPolygon",data() {return {map: null, // map地图layer:null, //地图图层lineLayer:null, //线图层draw: null,lineSource:null,coordinate: [],};},mounted() {this.initMap();},methods: {// 绘图工具onAddInteraction(type) {let self = this//勾绘矢量图形的类this.draw = new Draw({//source代表勾绘的要素属于的数据集source: self.lineSource,//type 表示勾绘的要素包含的 geometry 类型type: type})//绘制结束时触发的事件this.draw.on('drawend', function(e) {const geometry = e.feature.getGeometry()var area = getArea(geometry);console.log("area="+area)var output;if (area > 10000) {output = (Math.round(area / 1000000 * 100) / 100) +' ' + 'km<sup>2</sup>';} else {output = (Math.round(area * 100) / 100) +' ' + 'm<sup>2</sup>';}console.log("output="+output)let pointArr = geometry.getCoordinates()self.coordinate.push(pointArr)console.log("self.coordinate="+self.coordinate);self.removeDraw()})self.map.addInteraction(this.draw)},//删除交互removeDraw() {this.map.removeInteraction(this.draw)},initMap() {//地图图层this.layer = new TileLayer({source: new TileWMS({//不能设置为0,否则地图不展示。ratio: 1,url: "http://localhost:8000/geoserver/nyc/wms",params: {LAYERS: "nyc:nyc_roads",STYLES: "",VERSION: "1.1.1",tiled: true},serverType: "geoserver",}),});//线的图层this.lineSource = new VectorSource({ wrapX: false });this.lineLayer = new VectorLayer({source: this.lineSource,});this.map = new Map({//地图容器IDtarget: "map",//引入地图layers: [this.layer,this.lineLayer],view: new View({//地图中心点center: [987777.93778, 213834.81024],zoom: 14,minZoom:6, // 地图缩放最小级别maxZoom:19,}),});// 获取点击地图的坐标(选中样式)let 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: selectedStyle // 选中要素的样式})//添加交互this.map.addInteraction(this.selectTool)//调用绘图工具并传递类型为线,其他类型有Point,LineString,Polygon,Circlethis.onAddInteraction('Polygon')},},
};
</script><style scoped>
.map {width: 100%;height: 800px;
}
</style>​

Vue+Openlayer使用Draw实现交互式绘制多边形并获取面积相关推荐

  1. Vue+Openlayer使用Draw实现交互式绘制线段

    场景 Vue中使用Openlayers加载Geoserver发布的TileWMS: Vue中使用Openlayers加载Geoserver发布的TileWMS_BADAO_LIUMANG_QIZHI的 ...

  2. 实验三 交互式绘制多边形

    visual studio2019实现交互式绘制多边形 这个实验······在网上找不到.孔令德的实验代码下载下来有密码,暴力破解没希望,只能自己写了. 这个和实验二是紧密相连的. 实验实现的目标 在 ...

  3. 可视化场景内任意绘制多边形并测量面积

    一般测量功能主要表现在两方面,一是测量距离,二是测量面积.面积的测量是根据鼠标绘制的范围,通过地理坐标系的转换而计算出实际面积大小,距离的测量是根据鼠标在地图上绘制的点,实时计算出两点之间的实际距离. ...

  4. 计算机图形学实验二交互式绘制多边形

    一.实验目的 掌握双缓冲绘图技术. (2)掌握人机交互技术. (3)掌握填充动态多边形的有效边表算法. 二.实验步骤 (1)在VS2017环境下创建MFC应用程序工程(单文档) (2)添加命令消息处理 ...

  5. 百度地图实现鼠标绘制多边形并获取所有点坐标

    百度地图开放平台http://lbsyun.baidu.com/ 这里使用的是Javascript API http://lbsyun.baidu.com/index.php?title=jspopu ...

  6. vue 项目使用 openlayers根据半径绘制圆形、绘制多边形

    vue 项目使用 openlayers根据半径绘制圆形.绘制多边形 这个地方我就简单点写吧,因为一些东西比较乱,有的包啥的就按照官网API开发文档根据报错提示自己添加就可以了,我这个地方就不重复写了. ...

  7. vue使用高德地图并且绘制多边形

    使用鼠标工具在高德地图上绘制多边形时需要使用到一个插件,如果直接new出该工具会提示该工具不是一个函数之类的错误,在使用之前需要先告诉vue,你所是使用的是一个插件 AMap.plugin([&quo ...

  8. Vue+Openlayer中测距测面和绘制点线面组件-LjMeasureDraw4326和LjMeasureDraw3857

    地理坐标系4326 效果图: 首先下载turf.js: cnpm i -S @turf/turf 全局引入turf.js //引入turf.js import * as turf from '@tur ...

  9. python绘制多边形样例_Python PIL ImageDraw.Draw.polygon()用法及代码示例

    PIL是Python Imaging Library,它为python解释器提供了图像编辑功能.的ImageDraw模块为Image对象提供简单的2D图形.您可以使用该模块来创建新图像,注释或修饰现有 ...

最新文章

  1. 被微软称为 “世界的电脑” ,Azure 到底有多牛?
  2. 行业B2B网站策划6个基本要求
  3. 一网打尽,最全面的跨域解决方案来了!
  4. LiveVideoStack线上分享第三季(十一):Xilinx视频解决方案
  5. 打包bat等文件成exe,双击运行不显示dos窗口,exe不报毒
  6. [SDOI2006]保安站岗 树dp
  7. SpringBoot高并发!java开发安卓app电子书
  8. .NET反编译工具Reflector及插件Reflector.FileDisassembler.dll
  9. 【回归预测】基于matlab鲸鱼算法优化BP神经网络回归预测(多输入单输出)【含Matlab源码 1554期】
  10. HTMLTestRunner文件
  11. 新版白话空间统计(11):ArcGIS中的PZ值标尺
  12. 001_KNN与线性分类器
  13. 【VR】详解 Facebook Oculus团队的手势追踪系统——MegaTrack
  14. iOS 导入自定义字体不生效
  15. CRC-CCITT16(0xFFFF、XModem、0x1D0F、Kermit)
  16. CentOS8 安装mysql8- 解压安装版
  17. 推特 我们目前不能注册此邮箱地址_英雄联盟手游来了!最简单的下载/安装/注册教程!...
  18. ar虚拟现实电子沙盘软件制作
  19. 【存货系列】JS文字转语音方案设计及实现
  20. zblogphp 广告联盟_天兴工作室:广告位大全插件(网站各种广告位集合效果)

热门文章

  1. Python 中的基础语句
  2. 什么是代理模式?代理模式有什么用?通过一个小程序分析静态代理和动态代理。自己简单实现动态代理。JDK动态代理和CGLIB动态代理的区别。
  3. 2020新版IDEA创建Web工程(包括添加Tomcat服务器、第三方jar包)
  4. 其它项目中引用AirSIm模块报错NullReferenceException: Object reference not set to an instance of an object
  5. java event 异步_[转]java异步编程
  6. EXCEL导入导出使用的框架
  7. JVM 垃圾回收算法 -可达性分析算法!!!高频面试!!!
  8. open-capacity-platform 项目启动
  9. hive向mysql导数据_导入Hive数据导MySQL
  10. html网页注册信息不完全时有警示_??使用Github做一个完全免费的个人网站(步骤很细)...