【开源WebGIS】07-Openlayers+Vue 测量功能-01

这篇具有很好参考价值的文章主要介绍了【开源WebGIS】07-Openlayers+Vue 测量功能-01。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenLayers是一个开源的地图显示引擎,支持距离测量和面积测量。距离测量功能用于测量地图上两点间的直线距离;面积测量功能用于测量地图上一个图形的面积,可以方便的实现在地图上的测量。

1 不多bb,先实现基本的功能

基础功能展示

【开源WebGIS】07-Openlayers+Vue 测量功能-01

1.1 测量功能按钮和显示结果框的添加

<el-button-group>
   <el-button type="primary" @click="drawVector('LineString')">距离测量</el-button>
   <el-button type="primary" @click="drawVector('Polygon')">面积测量 </el-button>
   <el-button type="primary" @click="drawVector('None')">清除</el-button>
 </el-button-group>
 <el-input v-model="mensureResult"/>

1.2 需要定位一个基础的map

这里我定义了一个map,并且添加了天地图的服务作为基础底图,天地图服务的key需要自己去天地图官网申请.

initMap() {
  const view = new View({
     projection: 'EPSG:3857',
     center: fromLonLat([104.06244609071975, 30.673525713789157]), //地图中心坐标
     zoom: 12,
   });
   const layer = new TileLayer({
     source: new XYZ({
       url:'http://t4.tianditu.com/DataServer?T=vec_w&tk=你自己在天地图申请的keyx={x}&y={y}&l={z}'
     }),
   });
   this.map = new Map({
     layers: [],
     target: 'map-container',
     view: view,
   });
   this.map.addLayer(layer);
   
 },

1.3 定义一个用来存放测量过程绘制要素的图层

需要注意的是我给这个layer添加了一个name字段,将其命名为measureLayer,以方便在后面的时候不需要的时候删除它。

var source = new VectorSource()
 var layer = new VectorLayer({
   source,
   zIndex:100,
   name:'mensureLayer'
 })
 this.map.addLayer(layer)

1.4 定义一个交互事件draw

注意这个draw它的source为上面定义的source,并将其添加到地图中。

this.sketch = new Feature()
this.map.removeInteraction(this.draw)
this.draw = new Draw({
    type:type,
    source:source
    // 注意这里的source是在前面定义过的source,如果不定义这个sauce
    //那么这画出来就没法保存
})
this.map.addInteraction(this.draw)

1.4 对于上面定义的draw进行状态判断

如果选择了测量的按钮,再去判断draw当前的状态,是drawend就意味着绘图完毕,这时候就可以从event事件中拿到对应的 future,并根据测量的类型,使用getGeometry()方法,分别获得它的长度或者面积,并将结果显示到结果显示框内。

this.draw.on('drawend',(evt)=>{
   console.log('结束画')
   this.sketch = evt.feature
   if(type == 'LineString'){
     this.mensureResult = this.sketch.getGeometry().getLength()
   }else if (type =='Polygon'){
     this.mensureResult = this.sketch.getGeometry().getArea()
   }
 })

如果是选择了清除按钮,则需要进行三步操作:

  1. 清除draw交互事件
  2. 清除测量的图层layer
  3. 清除测量的结果mensureResult
// 清除交互
 this.map.removeInteraction(this.draw)
 // 清除测量的图层
 console.log(this.map.getAllLayers())
 this.map.getAllLayers().forEach(element => {
   if (element.values_.name == 'mensureLayer')
     this.map.removeLayer(element)
 });
 // 清除测量结果
 this.mensureResult = null

到这里就基本上把测量长度和面积的功能实现了,但是还有很多细节没有完善,接下来继续完善功能。

获取代码

  1. 关注公粽号“老靳的WebGIS”回复ol07获取

参考文章:文章来源地址https://www.toymoban.com/news/detail-456462.html

https://codesandbox.io/s/measure-forked-clft8u?file=/main.js:812-835

https://blog.csdn.net/MagicMHD/article/details/91372480

https://www.jianshu.com/p/3cd4c25bed47

https://blog.csdn.net/qq_37219845/article/details/105557335

到了这里,关于【开源WebGIS】07-Openlayers+Vue 测量功能-01的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【OpenLayers】VUE+OpenLayers+ElementUI加载WMS地图服务

    需要安装好nodejs,nodejs下载地址,下载对应的版本向导式安装即可。 安装完成后,控制台输入node -v,显示版本号即安装成功。 下载完成后,默认将缓存路径和下载路径设置的C盘,可以使用如下命令修改: 设置之后需要将上面两个地址添加到环境变量中。 安装完成之后控制

    2023年04月09日
    浏览(31)
  • vue+openlayers,初始化openlayers地图,实现鼠标移入、点击、右键等事件

    主要功能:初始化openlayers地图,实现鼠标移入、点击、右键等事件,以及获取当前图标的feature,将当前图标信息以弹框方式进行展示;地图上展示拾取到的经纬度 前端使用的是vue技术栈 步骤一:将地图的公用配置项单独提出成一个js文件,方便打包后进行修改,代码如下

    2024年02月11日
    浏览(27)
  • Openlayers的交互功能(三)——Feature的选中Select控件

    前面的两篇文章分别介绍了Openlayers的基本情况和初始化地图的流程以及Feature是什么,从这篇文章开始,将对Feature的交互功能进行介绍。 Select是交互事件的一种,用于选中 矢量图层 上的几何图形,添加选择交互事件后,点击地图上的几何图形,或者将鼠标移动到几何图形上

    2024年02月03日
    浏览(35)
  • 前端开发---在vue项目中使用openLayers

    本篇文章主要讲解openLayers的初步使用,包括渲染地图、获取点坐标、标记点、中心位置的调整、以及获取到经纬度向后台发送请求 演示地址 官网 gitee链接 npm install ol import “ol/ol.css”; import { Map, View, ol } from “ol”; import TileLayer from “ol/layer/Tile”; DW () { var view = this.map.getVi

    2024年02月08日
    浏览(37)
  • 222:vue+openlayers 实现云雾缭绕,白鸽飞翔的效果

    第222个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayersvue+openlayers: 实现云雾缭绕,白鸽飞翔的效果,这里主要是动态的在canvas上绘制白鸽和云雾效果。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来

    2024年02月04日
    浏览(28)
  • Vue+Openlayers+proj4实现坐标系转换

    Vue中使用Openlayers加载Geoserver发布的TileWMS: Vue中使用Openlayers加载Geoserver发布的TileWMS_霸道流氓气质的博客-CSDN博客 在上面的基础上实现不同坐标系坐标数据的转换。 Openlayers中默认的坐标系是EPSG:900913   EPSG:900913等效于EPSG:3857 可在EPSG官网进行验证   如果从其他坐标系的系统中

    2023年04月27日
    浏览(30)
  • Vue+OpenLayers 创建地图并显示鼠标所在经纬度

    本文用的是高德地图 页面 初始化地图 附css代码

    2024年01月17日
    浏览(37)
  • vue+openLayers闪烁图形/线段/点 都可以使用类似的方法

    基础方法 1.先定义两个样式,闪烁时两个样式相互交换 2.利用定时器(单数的时候样式一,双数的时候样式二)由此来实现闪烁效果 先给主要代码如下(最后有全部代码): mapTool.js vue页面代码

    2024年01月24日
    浏览(35)
  • 243:vue+Openlayers 更改鼠标滚轮缩放地图大小,每次缩放小一点

    第243个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayers项目中设置鼠标滚轮缩放地图大小,每次滑动一格滚轮,设定的值非默认值1。具体的设置方法,参考源代码。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 示例效果

    2024年02月09日
    浏览(62)
  • 使用vue+openLayers开发离线地图以及离线点位的展示

    1 .下载 引入到需要的组件中 2. 需要用到的api... (根据开发需求以及实际情况进行引入) 3. 准备一个dom容器以及弹出层的容器 4. 准备变量 5. 代码如下: 6. 最后贴出popup的样式 7. 参考中文官网OpenLayers 3 介绍

    2024年02月13日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包