OpenLayers对要素进行新增绘制、选择、修改等交互操作

news2024/9/20 6:08:58

1、绘制-Draw

新建一个用来绘制要素的图层:

    const vector = new VectorLayer({
      source: new VectorSource(),
      style: {
        "fill-color": "rgba(255, 255, 255, 0.2)",
        "stroke-color": "#ffcc33",
        "stroke-width": 2,
        "circle-radius": 7,
        "circle-fill-color": "#ffcc33",
      },
    });

在图层中对多边形要素进行绘制:

let draw = new Draw({
      source: vector.getSource(),
      type: "Polygon",
    });
    map.addInteraction(draw);

效果:

备注:draw.setActivity(false)即可禁用要素绘的制功能

2、选择-Select

实现绘制完一个多边形之后禁用多边形绘制,并且开启选择器功能

let draw = new Draw({
      //放置一个source(要素需要放到Source里)
      source: vector.getSource(),
      type: "Polygon",
    });
    draw.on("drawend", function () {
      draw.setActive(false);
      //只需要new一个Select实例,后面可以根据select.setActive进行启用和禁用要素选择器
      if (!select) select = new Select();
      map.addInteraction(select);
    });
    map.addInteraction(draw);

 效果:

3、修改-Modify

绘制图形之后结束绘制并且开启编辑多边形功能:

//新增一个绘制图形的矢量图层
    const vector = new VectorLayer({
      source: new VectorSource({ useSpatialIndex: false }),
      style: {
        "fill-color": "rgba(255, 255, 255, 0.2)",
        "stroke-color": "#ffcc33",
        "stroke-width": 2,
        "circle-radius": 7,
        "circle-fill-color": "#ffcc33",
      },
    });
    //新增一个绘制图形的交互组件
    let draw = new Draw({
      //放置一个source(要素需要放到Source里)
      source: vector.getSource(),
      //绘制多边形
      type: "Polygon",
    });


    let collection = new Collection();
    let modify = new Modify({
      //集合里的要素是动态添加修改的,只需要放一次就好
      features: collection,
    });
    //添加一个选择器
    map.addInteraction(modify);

    //一个图形绘制结束时的回调方法
    draw.on("drawend", function (event) {
      //绘制好一个图形之后禁用绘制功能
      draw.setActive(false);
      //把当前绘制的要素放到可以编辑修改的集合里
      collection.push(event.feature);
    });
    //把绘制多边形交互实例放置到
    map.addInteraction(draw);
    //添加矢量图层到map上
    map.addLayer(vector);

效果:

也可以从Select获取Features(Collection集合)放置到Modify的features属性上

    let modify = new Modify({
      //集合里的要素是动态添加修改的,只需要放一次就好
      features: select.getFeatures(),
    });

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1907697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何提升美国Facebook直播的整体体验?

Facebook作为全球最大的社交媒体平台之一,提供了直播功能,用户可以实时分享生活、见解和创意。许多商家通过美国Facebook直播来获取更多客户,但直播时可能会遇到网络卡顿的问题,导致观看体验不佳。本文将探讨如何解决这个问题&…

Ubuntu开源软件LibreOffice将Excel多表转PDF多目录示例

一、实现的起因: Windows平台下,常见的WPS办公自动化套件中电子表格软件,其中具备将Excel工作表中数据转为PDF文档表格的功能。现在进一步的需求是:像PDF标准的电子书那样,具备一本书的目录结构或章节结构&#xff0c…

[C++]入门基础(1)

Hello大家好,今天通过本篇文章,我们来初步学习C,C可以说是对C语言的一个升级,我们会一步一步的由浅入深的学习C。 目录 1.第一个C程序 2.命名空间 2.1 命名空间出现的意义 2.2 namespace的定义 2.3 命名空间的使用 3.C输入…

Spring Cloud - 代码生成器

1、代码生成器概述 Spring Cloud 并没有提供类似于 Spring Data 中的“代码生成器”,因为它主要提供的是分布式系统中服务发现和配置管理的一套解决方案。如果你想要为你的微服务应用生成样板代码,你可能需要考虑使用其他工具或者方案,例如 S…

基于SSM的志愿者服务平台

基于SSM的志愿者服务平台系统主要其系统包括不同的端组成,前端主要包括系统用户管理、新闻数据管理、变幻图管理、志愿者管理、培训视频管理、志愿者项目管理、服务时长管理、交流分享管理、志愿者表彰管理。前台主要包括网站首页、培训视频、志愿者项目、交流分享、…

【python中级】图像从笛卡尔坐标系转换为极坐标系

【python中级】图像从笛卡尔坐标系转换为极坐标系 1.背景2.生成二维图3.极坐标转换1.背景 笛卡尔坐标系就是我们常说的直角坐标系。 笛卡尔坐标系,也称为直角坐标系,是由法国数学家和哲学家勒内笛卡尔(Ren Descartes)发明的一种二维或三维坐标系统。它使用两个或三个相互垂…

李彦宏: 开源模型是智商税|马斯克: OpenAI 闭源不如叫 CloseAI

在 2024 年世界人工智能大会(WAIC 2024)上,百度创始人、董事长兼首席执行官李彦宏发表对开源模型的评价。 李彦宏认为:开源模型实际上是一种智商税,而闭源模型才是人工智能(AI)行业的未来。 马…

基于LangChain的RAG开发教程(二)

v1.0官方文档:https://python.langchain.com/v0.1/docs/get_started/introduction/ 最新文档:https://python.langchain.com/v0.2/docs/introduction/ LangChain是一个能够利用大语言模型(LLM,Large Language Model)能…

git恢复到之前提交的记录

项目搞崩了,还提交上去了怎么办? 那当然是恢复到之前的提交记录了,那怎么操作呢? 首先,到代码托管平台找到你想恢复的提交记录(在此以github为例) 获取 commit id 首先,通过如下图操作获取到commit id {% a…

Spring Cloud: OpenFeign 超时重试机制

超时重试是一种用于网络通信的常用策略,目的是在请求未能在规定时间内获得响应或响应超时的情况下,重新发送请求。具体来说,当发起请求后,如果在设定的时间内未能收到预期的响应,就会启动超时重试机制,重新…

徒手绘制 Android 通用进度条

拖动条&#xff08;FlexSeekBar&#xff09;&#xff0c;在Android的各个地方都非常常用&#xff0c;本文旨在自研一套通用的进度条&#xff0c;非常适合车载App使用 样式如下&#xff1a; 使用示例 <!--默认用法--> <com.max.android.ui.seekbar.FlexSeekBarandroi…

python获取文件列表按照文件修改时间进行排序,默认按照文件名时间戳排序

python获取文件列表按照文件修改时间进行排序,默认按照文件名时间戳排序 1、流程 1、获取文件绝对路径下的所有文件 2、通过os.path.getmtime获取每个文件的修改时间,并与文件组成元组,方便后续排序 3、默认按照时间戳降序,否则按照按修改时间排序文件列表(从最晚到最早)…

Linux忘记密码重置root密码、重置普通用户密码

重启看到选项按e reboot 或 init 62、移动到Linux开头的行在末尾添加 rw init/bin/bash3、按下Ctrlx引导启动 mount -o remount,rw /输入命令回车更改密码,输入新密码&#xff0c;别用小键盘&#xff0c;容易出错 passwd输入两次校验&#xff0c;出现updated successfully就…

几何建模基础-样条曲线和样条曲面介绍

1.概念介绍 1.1 样条曲线的来源 样条的英语单词spline来源于可变形的样条工具&#xff0c;那是一种在造船和工程制图时用来画出光滑形状的工具&#xff1a;富有弹性的均匀细木条/金属条/有机玻璃条&#xff0c;它围绕着按指定位置放置的重物或者压铁做弹性弯曲&#xff0c;以…

SAPUI5基础知识12 - 应用程序描述符(manifest.json)

1. 背景 在SAPUI5中&#xff0c;manifest.json是一个配置文件&#xff0c;它包含了应用程序的所有配置信息。这个文件是SAPUI5应用程序的核心&#xff0c;它定义了应用程序的元数据&#xff0c;包括应用程序的名称、描述、版本、模型、路由等信息。 manifest.json的主要功能和…

如何使用Vue3创建在线三维模型展示?

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 代码相关的技术博客 代码应用场景介绍 本段代码使用 RoughJS 库在 HTML5 Canvas 上创建了手绘风格的图像&#xff0c;展示了 RoughJS 库的强大功能&#xff0c;可用于创建具有有机手绘外观的图形。 代码基本…

2024已过半,还没试过在vue3中使用ioc容器吗?

Vue3 已经非常强大和灵活了&#xff0c;为什么还要引入 IOC 容器呢&#xff1f;IOC 容器离不开 Class&#xff0c;那么我们就从 Class 谈起 Class的应用场景 一提起 Class&#xff0c;大家一定会想到这是 Vue 官方不再推荐的代码范式。其实&#xff0c;更确切的说&#xff0c…

基于Java+SpringMvc+Vue技术的实验室管理系统设计与实现

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

二次元转向SLG,B站游戏的破圈之困

文 | 螳螂观察 作者 | 夏至 2023年是B站游戏的滑铁卢&#xff0c;尽管这年B站的游戏营收还有40多亿&#xff0c;但相比去年大幅下降了20%&#xff0c;整整少了10亿&#xff0c;这是过去5年来的最大跌幅&#xff0c;也是陈睿接管B站游戏业务一年以来&#xff0c;在鼻子上碰的第…

[每周一更]-(第104期):Go中使用Makefile的经验

文章目录 1. 项目结构2. Makefile的基础知识什么是 Makefile 3. Go项目的Makefile示例4. 详细解释每个Makefile目标5. 使用Makefile执行常见任务 在Go项目中&#xff0c;使用Makefile可以简化和自动化常见的开发和部署任务&#xff0c;如编译、测试、格式化和清理。深入认识及实…