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.hqwc.cn/news/661997.html

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

相关文章

Mysql-黑马

Mysql-黑马 编写规范&#xff1a;## 一级1. 二级三级 1.Mysql概述 数据库概念mysql数据仓库 cmd启动和停止 net start mysql180 net stop mysql180备注&#xff1a;其中的mysql180是服务名 客户端连接 远程连接数据仓库 -h 主机号 -P端口号 mysql [-h 127.0.0.1] [-P 33…

Nginx负载均衡主备模式

1. 背景 使用Nginx代理后端服务&#xff0c;有时候某些服务是不能使用多台负载均衡&#xff0c;但又想保障高可用&#xff0c;所以采用主备模式&#xff0c;记录如下&#xff1a; 2. 参考 nginx 负载均衡Nginx-负载均衡-后端状态max_conns、down、backup、max_fails、fail_t…

【数据结构】第四讲:双向链表

个人主页&#xff1a;深情秋刀鱼-CSDN博客 数据结构专栏&#xff1a;数据结构与算法 循环链表这个轮回的思想很有意思。它强调了不管你今生是贫是富&#xff0c;如果持续行善积德&#xff0c;下辈子就会好过&#xff0c;反之就会遭到报应。 就像每个人的人生一样&#xff0c;欲…

android 分区存储(沙盒存储)适配总结

目录 一、分区存储概念 1.外部存储分类 2.分区存储如何影响文件访问 二、分区适配方案 1. 应用分区存储的文件访问规定 (1).应用专属目录--私有目录 (2).共享目录文件--公有目录 2.MediaStore API介绍 3.Storage Access Framework介绍 三、所有文件访问权限 四、总结…

Docker容器---Harbor私有仓库部署与管理

一、搭建本地私有仓库 1、下载registry镜像 [rootlocalhost ~]#docker pull registry Using default tag: latest latest: Pulling from library/registry 79e9f2f55bf5: Pull complete 0d96da54f60b: Pull complete 5b27040df4a2: Pull complete e2ead8259a04: Pull comp…

第十五届蓝桥杯Java软件开发大学B组自我经验小结

自我介绍 23届大一 双非 计院科班 软件工程 江苏人在吉林上大学 Java蒟蒻 在学校的宣传下 有幸参加了第十五届蓝桥杯Java大学b组省赛 蓝桥杯说明 就是一个算法比赛吧 考试时间9.00到1.00 四小时 带准考证和身份证和笔 草稿纸会发 赛制是IOC就是不会给任何反馈 就是你…

【6D位姿估计】GDR-Net 单目几何引导的直接回归模型

前沿 本文介绍6D位姿估计的直接回归方法GDR-Net&#xff0c;它从单个RGB图像中确定物体在三维空间中的位置和方向。 它是一个端到端模型&#xff0c;与传统的间接方法不同&#xff0c;GDR-Net可以通过反向传播完全训练&#xff0c;简化了训练过程。 论文地址&#xff1a;GDR…

【C++航海王:追寻罗杰的编程之路】C++11(四)

目录 1 -> 相关文章 【C航海王&#xff1a;追寻罗杰的编程之路】C11(一) 【C航海王&#xff1a;追寻罗杰的编程之路】C11(二) 【C航海王&#xff1a;追寻罗杰的编程之路】C11(三) 2 -> lambda表达式 2.1 -> C98中的一个例子 2.2 -> lambda表达式 2.3 ->…

【19】JAVASE-多线程专题【从零开始学JAVA】

Java零基础系列课程-JavaSE基础篇 Lecture&#xff1a;波哥 Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。…

qt嵌入并控制外部程序

一、流程 1、调用Window接口模拟鼠标&#xff0c;键盘事件 POINT point; LPPOINT lpppoint &point; GetCursorPos(lpppoint);//获取鼠标位置 SetCursorPos(point.x, point.y);//设置鼠标位置//鼠标左键按下 mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, poi…

Windows php 安装 Memcached扩展、php缺失 Memcached扩展、Class ‘Memcached‘ not found

在Windows系统下如何安装 php Memcached 扩展 下载dll文件 pecl地址&#xff1a;https://pecl.php.net/package/memcached 根据版本进行选择 &#xff1a; 解压下载的文件后得到了这么样的文件结构&#xff1a; 配置 移动dll文件到相应文件位置 重点&#xff1a; libme…

React的useEffect

概念&#xff1a;useEffect是一个React Hook函数&#xff0c;组件渲染之后执行的函数 参数1是一个函数&#xff0c;可以把它叫做副作用函数&#xff0c;在函数内部可以放置要执行的操作参数2是一个数组&#xff08;可选参&#xff09;&#xff0c;在数组里放置依赖项&#x…