openlayer 使用ol-ext插件实现凸显区域

使用ol-ext插件实现凸显多变形

效果如图

1、创建openlayer

var map;
var view;
var tileLayer, source, vector;function init() {tileLayer = new ol.layer.Tile({source: new ol.source.TileArcGISRest({url: "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer"}) //});view = new ol.View({center: [113, 23],projection: 'EPSG:4326',zoom: 10});map = new ol.Map({layers: [tileLayer],target: 'map',view: view});}

2、添加图层和多变形

function addpolygon() {var source = new ol.source.Vector({wrapX: false});var vector = new ol.layer.Vector({source: source,});map.addLayer(vector);var array = [[113.0, 23.0],[113.5, 23.0],[113.5, 23.5],[113.0, 23.0]];var p = new ol.geom.Polygon([array]);var features = new ol.Feature({geometry: p,name: 'My Polygon',names: 'My Polygon'});source.addFeature(features);//ol-ext插件let r3D = new ol.render3D({style: new ol.style.Style({stroke: new ol.style.Stroke({color: 'rgba(142,66,66,0.5)',width: 1}),fill: new ol.style.Fill({color: 'rgba(12,45,210,0.8)'})}),/** 初始高度 **/height: 0.1,//ghost: true,/** 最大可视分辨率 **/maxResolution: 0.1})vector.setRender3D(r3D)r3D.drawFeature3D_ = drawFeature3D_;//重新改写该函数}

3、改写ol-ext的render3D中的函数

function drawFeature3D_(ctx, build) {var i, j, b, k// Constructvar fillStyle=    ctx.fillStyle;for (i = 0; i < build.length; i++) {switch (build[i].type) {case "MultiPolygon": {for (j = 0; j < build[i].geom.length; j++) {b = build[i].geom[j]
// 绘制侧边渐变墙for (k = 0; k < b.length - 1; k++) {ctx.beginPath()ctx.moveTo(b[k].p0[0], b[k].p0[1])ctx.lineTo(b[k].p1[0], b[k].p1[1])ctx.lineTo(b[k + 1].p1[0], b[k + 1].p1[1])ctx.lineTo(b[k + 1].p0[0], b[k + 1].p0[1])ctx.lineTo(b[k].p0[0], b[k].p0[1])var m = [(b[k].p0[0] + b[k + 1].p0[0]) / 2, (b[k].p0[1] + b[k + 1].p0[1]) / 2]var h = [b[k].p0[1] - b[k + 1].p0[1], -b[k].p0[0] + b[k + 1].p0[0]]var c = ol.coordinate.getIntersectionPoint([m, [m[0] + h[0], m[1] + h[1]]],[b[k].p1, b[k + 1].p1])var gradient = ctx.createLinearGradient(m[0], m[1],c[0], c[1])//设置渐变色带gradient.addColorStop(0, 'rgba(220,29,29,0.5)')gradient.addColorStop(0.2, 'rgba(220,29,29,0.5)')gradient.addColorStop(0.4, 'rgba(45,222,180,0.5)')gradient.addColorStop(0.6, 'rgba(219,194,36,0.5)')gradient.addColorStop(0.8, 'rgba(193,36,227,0.5)')gradient.addColorStop(1, 'rgba(20,92,238,0.5)')ctx.fillStyle = gradientctx.fill()}}break}case "Point": {var g = build[i].geomctx.beginPath()ctx.moveTo(g.p0[0], g.p0[1])ctx.lineTo(g.p1[0], g.p1[1])ctx.stroke()break}default: break}}// Roofctx.fillStyle=fillStyle;for (i = 0; i < build.length; i++) {switch (build[i].type) {case "MultiPolygon": {ctx.beginPath()for (j = 0; j < build[i].geom.length; j++) {b = build[i].geom[j]if (j == 0) {ctx.moveTo(b[0].p1[0], b[0].p1[1])for (k = 1; k < b.length; k++) {ctx.lineTo(b[k].p1[0], b[k].p1[1])}} else {ctx.moveTo(b[0].p1[0], b[0].p1[1])for (k = b.length - 2; k >= 0; k--) {ctx.lineTo(b[k].p1[0], b[k].p1[1])}}ctx.closePath()}ctx.fill("evenodd")ctx.stroke()break}case "Point": {b = build[i]var t = b.feature.get('label')if (t) {var p = b.geom.p1var f = ctx.fillStylectx.fillStyle = ctx.strokeStylectx.textAlign = 'center'ctx.textBaseline = 'bottom'ctx.fillText(t, p[0], p[1])var m = ctx.measureText(t)var h = Number(ctx.font.match(/\d+(\.\d+)?/g).join([]))ctx.fillStyle = "rgba(255,255,255,0.5)"ctx.fillRect(p[0] - m.width / 2 - 5, p[1] - h - 5, m.width + 10, h + 10)ctx.strokeRect(p[0] - m.width / 2 - 5, p[1] - h - 5, m.width + 10, h + 10)ctx.fillStyle = f//console.log(build[i].feature.getProperties())}break}default: break}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

组合数问题

1.直接用递推&#xff1a; 下面是AC代码“&#xff1a; #include<bits/stdc.h> using namespace std; const int N2010,mod1e97; int a[N][N]; void init() {for(int i0;i<N;i){for(int j0;j<i;j){if(j0) a[i][j]1;else a[i][j](a[i-1][j]a[i-1][j-1])%mod;}} } i…

Stm32CubeMX 为 stm32mp135d 添加 adc

Stm32CubeMX 为 stm32mp135d 添加 adc 一、启用设备1. adc 设备添加2. adc 引脚配置2. adc 时钟配置 二、 生成代码1. optee 配置 adc 时钟和安全验证2. linux adc 设备 dts 配置 bringup 可参考&#xff1a; Stm32CubeMX 生成设备树 一、启用设备 1. adc 设备添加 启用adc设…

指令寻址——顺序寻址、跳跃寻址

目录 一、概述 1.定义 2.寻址方式分类 3.形式地址、物理地址 二、指令寻址 1、顺序寻址方式 2、跳跃寻址方式 一、概述 1.定义 寻址方式解决的是指如何在指令中表示一个操作数的地址&#xff0c;如何用这种表示得到操作数、或怎样计算出操作数的地址。 2.寻址方式分类…

ElasticSearch教程入门到精通——第一部分(基于ELK技术栈elasticsearch 8.x新特性)

ElasticSearch教程入门到精通——第一部分&#xff08;基于ELK技术栈elasticsearch 8.x新特性&#xff09; 1. ElasticSearch安装&#xff08;略&#xff09;2. ElasticSearch基础功能2.1 索引操作2.1.1 创建索引2.1.2 Head 索引2.1.3 查询索引2.1.3.1 查询单独索引2.1.3.2 查询…

linus下Anaconda创建虚拟环境pytorch

一、虚拟环境 1.创建 输入下面命令 conda create -n env_name python3.8 输入y 2.激活环境 输入 conda activate env_name 二、一些常用的命令 在Linux的控制平台 切换到当前的文件夹 cd /根目录/次目录 查看conda目录 conda list 查看pip目录 pip list查看历史命…

springboot mongodb分片集群事务

前置 mongodb分片集群想要使用事务,需要对应分片没有仲裁节点 代码 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.1.0.RELEASE</version></d…

数据结构可视化(适合考研党)

废话不多说传送门 还在疑惑平衡二叉树、红黑树、B树、B树怎么插入构建的吗&#xff0c;不要慌张&#xff0c;这个网站会一步一步来演示.&#xff0c;听了咸鱼的课还不够&#xff0c;需要自己动手模拟一下各种数据结构的CRUD&#xff01;&#xff01;

JavaEE初阶-多线程易忘点总结

文章目录 1.PCBPID文件描述符表内存指针状态上下文优先级记账信息tgid 2.线程与进程的区别3.sleep和interrupt方法的关系变量终止线程interrupt方法终止线程 4.线程状态5.出现线程不安全的原因线程在系统中是随即调度&#xff0c;抢占式执行的。多个线程修改同一个变量线程针对…

Pycharm新建工程时使用Python自带解释器的方法

Pycharm新建工程时使用Python自带解释器的方法 新建Project时最好不要新建Python解释器&#xff0c;实践证明&#xff0c;自己新建的Python解释器容易出现各种意想不到的问题。 那么怎样使用Python安装时自带的解释器呢&#xff1f; 看下面的三张截图大家就清楚了。 我的Pyth…

【大语言模型LLM】-基于ChatGPT搭建客服助手(1)

&#x1f525;博客主页&#xff1a;西瓜WiFi &#x1f3a5;系列专栏&#xff1a;《大语言模型》 很多非常有趣的模型&#xff0c;值得收藏&#xff0c;满足大家的收集癖&#xff01; 如果觉得有用&#xff0c;请三连&#x1f44d;⭐❤️&#xff0c;谢谢&#xff01; 长期不…

数据库(MySQL)—— 多表查询

数据库&#xff08;MySQL&#xff09;—— 多表查询 多表关系一对多多对多一对一多表查询概述数据准备查询形式笛卡尔积 分类连接查询内连接外连接左外连接右外连接 自连接联合查询 今天我们来进入MySQL中一个非常重要的部分&#xff1a;多表查询&#xff1a; 多表关系 多表关…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-9.1-LED灯(模仿STM32驱动开发实验)

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

MySQL技能树学习——数据库组成

数据库组成&#xff1a; 数据库是一个组织和存储数据的系统&#xff0c;它由多个组件组成&#xff0c;这些组件共同工作以确保数据的安全、可靠和高效的存储和访问。数据库的主要组成部分包括&#xff1a; 数据库管理系统&#xff08;DBMS&#xff09;&#xff1a; 数据库管理系…

eNSP-抓包解析HTTP、FTP、DNS协议

一、环境搭建 1.http服务器搭建 2.FTP服务器搭建 3.DNS服务器搭建 二、抓包 三、http协议 1.HTTP协议&#xff0c;建立在TCP协议之上 2.http请求 3.http响应 请求响应报文参考&#xff1a;https://it-chengzi.blog.csdn.net/article/details/113809803 4.浏览器开发者工具抓包…

爬虫自动化之drissionpage实现随时切换代理ip

目录 一、视频二、dp首次启动设置代理三、dp利用插件随时切换代理一、视频 视频直接点击学习SwitchyOmega插件使用其它二、dp首次启动设置代理 from DrissionPage import ChromiumPage, ChromiumOptions from loguru

Flask教程1:flask框架基础入门,路由、模板、装饰器

文章目录 一、 简介二、 概要 一、 简介 Flask是一个非常小的Python Web框架&#xff0c;被称为微型框架&#xff1b;只提供了一个稳健的核心&#xff0c;其他功能全部是通过扩展实现的&#xff1b;意思就是我们可以根据项目的需要量身定制&#xff0c;也意味着我们需要学习各…

C++设计模式-创建型设计模式

设计模式 设计模式是什么 设计模式是指在软件开发中&#xff0c;经过验证的&#xff0c;用于解决在特定环境下&#xff0c;重复出现的&#xff0c;特定问题的解决方案&#xff1b;其实就是解决问题的固定套路。但是要慎用设计模式&#xff0c;有一定的工程代码量之后用它比较…

[每日AI·0501]GitHub 版 Devin,Transformer的强力挑战者 Mamba,Sora 制作细节与踩坑,OpenAI 记忆功能

AI 资讯 国资委&#xff1a;加快人工智能等新技术与制造全过程、全要素深度融合GitHub版 Devin 上线&#xff0c;会打字就能开发应用&#xff0c;微软 CEO&#xff1a;重新定义 IDE在12个视频理解任务中&#xff0c;Mamba 先打败了 TransformerSora 会颠覆电影制作吗&#xff…

信息泄露.

一&#xff0c;遍历目录 目录遍历&#xff1a;没有过滤目录相关的跳转符号&#xff08;例如&#xff1a;../&#xff09;&#xff0c;我们可以利用这个目录找到服务器中的每一个文件&#xff0c;也就是遍历。 tipe&#xff1a;依次点击文件就可以找到flag 二&#xff0c;phpi…

LNMP部署及应用(Linux+Nginx+MySQL+PHP)

LNMP 我们为什么采用LNMP这种架构? 采用Linux、PHP、MySQL的优点我们不必多说。 Nginx是一个小巧而高效的Linux下的Web服务器软件&#xff0c;是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的&#xff0c;已经在一些俄罗斯的大型网站上运行多年&#xff0c;目…