当前位置: 首页 > news >正文

vue+openlayers之几何图形交互绘制基础与实践

文章目录

  • 1.实现效果
  • 2.实现步骤
  • 3.示例页面代码
  • 3.基本几何图形绘制的关键代码

1.实现效果

绘制点、线、多边形、圆、正方形、长方形
在这里插入图片描述

2.实现步骤

  1. 引用openlayers开发库。
  2. 加载天地图wmts瓦片地图。
  3. 在页面上添加几何图形绘制的功能按钮,使用下拉列表(select)设置几何图形绘制功能项,并设置其样式。其中,当“几何图形类型”为“无”时清除当前绘制的所有图形。

3.示例页面代码

<template><div id="map" class="imap"></div><div class="menu"><label>几何图形类型:</label><select id="type" v-model="typeSelect" @change="typeSelectOnChange"><option value="">无</option><option value="Point">点</option><option value="LineString">线</option><option value="Polygon">多边形</option><option value="Circle">圆</option><option value="Square">正方形</option><option value="Box">长方形</option></select></div>
</template>

3.基本几何图形绘制的关键代码

<script setup>// vue+openlayers之几何图形交互绘制基础与实践import {onMounted,ref} from 'vue'import 'ol/ol.css';import {Map,View} from 'ol';import TileLayer from 'ol/layer/Tile';import XYZ from 'ol/source/XYZ';import VectorLayer from "ol/layer/Vector";import VectorSource from "ol/source/Vector";import {Circle,Fill,Stroke,Style,Text} from "ol/style";import Draw, {createRegularPolygon} from "ol/interaction/Draw";import {LinearRing,LineString,MultiLineString,MultiPoint,MultiPolygon,Point,Polygon,} from 'ol/geom';var map = null;var draw; // 绘制对象// 实例化一个矢量地图vectorvar source = new VectorSource({wrapX: false})var vector = new VectorLayer({source: source,style: new Style({fill: new Fill({ //填充样式color: 'rgba(225,225,225,0.2)'}),stroke: new Stroke({ //边界样式color: '#ece034',width: 2}),image: new Circle({ //点要素样式radius: 7,fill: new Fill({color: '#ece034'})}),})})onMounted(() => {map = new Map({target: 'map',layers: [new TileLayer({source: new XYZ({url: "你的天地图地址",attributions: '影像底图',crossOrigin: 'anonymous',wrapX: false //如果设置为 false,地图在横向滚动到最右侧时不会出现重复的地图;}),preload: Infinity})],view: new View({//地图初始中心点center: [0, 0],minZoom: 2,maxZoom: 18,zoom: 5})});window.olmap = mapmap.addLayer(vector)})const typeSelect = ref('')function typeSelectOnChange() {map.removeInteraction(draw)addInteraction()}//根据几何图形类型进行绘制function addInteraction() {var value = typeSelect.value //几何图形类型if (value) {if (source == null) {source = new VectorSource({wrapX: false});vector.setSource(source); //添加数据源}var geometryFunction, maxPoints;if (value === 'Square') { //正方形value = 'Circle'; //设置几何图形类型为Circle(圆形)//设置几何图形类型,即创建正多边形geometryFunction = createRegularPolygon(4);} else if (value === 'Box') { //长方形value = 'LineString'; //设置绘制类型为LineString(线)maxPoints = 2; //设置最大点数为2//设置几何图形类型,即设置长方形的坐标点geometryFunction = function (coordinates, geometry) {var start = coordinates[0];var end = coordinates[1];if (!geometry) {//多边形geometry = new Polygon([[start, [start[0], end[1]], end, [end[0], start[1]], start]]);}geometry.setCoordinates([[start, [start[0], end[1]], end, [end[0], start[1]], start]]);return geometry;};}//实例化交互式图形绘制控件并添加到地图容器中draw = new Draw({source: source, //数据源type: /**@type{ol.geom.GeometryType}*/ (value), //几何图形类型geometryFunction: geometryFunction, //几何图形变更时调用函数maxPoints: maxPoints, //最大点数style: new Style({image: new Circle({radius: 7,fill: new Fill({color: '#ece034',}),}),stroke: new Stroke({ //边界样式color: '#ece034',width: 2}),}),});map.addInteraction(draw);} else {source = null;vector.setSource(source); //清空绘制的图形}}
</script>
http://www.lryc.cn/news/391832.html

相关文章:

  • 「多模态大模型」解读 | 突破单一文本模态局限
  • Redis深度解析:核心数据类型与键操作全攻略
  • C语言 指针和数组——指针的算术运算
  • [C++][CMake][CMake基础]详细讲解
  • CCD技术指标
  • SpringBoot系列——使用Spring Cache和Redis实现查询数据缓存
  • 【算法】(C语言):冒泡排序、选择排序、插入排序
  • iOS项目怎样进行二进制重排
  • CentOS中使用SSH远程登录
  • spring @Autowire注解作用
  • 密码学原理精解【5】
  • Unity3D 资源管理YooAsset原理分析与详解
  • npm install puppeteer 报错 npm ERR! PUPPETEER_DOWNLOAD_HOST is deprecated解决办法
  • 浙大版PTA《Python 程序设计》题目集 参考答案
  • “拆分盘投资:机遇与风险并存
  • Java面试题系列 - 第2天
  • AGI|Transformer自注意力机制超全扫盲攻略,建议收藏!
  • QT+OpenCV在Android上实现人脸实时检测与目标检测
  • 常见网络攻击方式及防御方法
  • 使用 ESP32 实现无线对讲机功能涉及音频采集、音频传输以及音频播放等多个方面。实现无线对讲机功能的基本步骤和示例代码。
  • SpringBoot项目,配置文件pom.xml的结构解析
  • 教程:Spring Boot中集成Memcached的详细步骤
  • Websocket通信实战项目(图片互传应用)+PyQt界面+python异步编程(async) (上)服务器端python实现
  • 实验一 MATLAB \ Python数字图像处理初步
  • echarts柱状选中shadow阴影背景宽度设置
  • ArrayBuffer 对象常见的几个用途
  • STC89C52RC单片机设计的FM收音机+自动搜台+存储电台(程序+原理图+PCB)
  • 【若依】关闭当前标签页并跳转路由到其他页面
  • 防爆智能手机如何解决危险环境下通信难题?
  • 软件测试最全面试题及答案整理(2024最新版)