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

ops/2024/9/20 3:58:37/ 标签: openlayer

使用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.ppmy.cn/ops/31165.html

相关文章

Django后台项目开发实战五

完成两个功能&#xff1a; HR 可以维护候选人信息面试官可以录入面试反馈 第五阶段 创建 interview 应用&#xff0c;实现候选人面试评估表的增删改功能&#xff0c;并且按照页面分组来展示不同的内容&#xff0c;如候选人基础信息&#xff0c;一面&#xff0c;二面的面试结…

腾讯云ubuntu新建用户后,命令行只显示$

这是因为&#xff0c;新建用户命令行解释器默认是sh&#xff0c;需要手动切换为bash&#xff0c;bash可以认为是sh的加强版本。 所以我们只需要将&#xff0c;shell切换为bash就好了。 切换到root 修改配置文件 vim/etc/bash 将sh修改为bash

Flask知识点汇总表格总结

最近接手的Python项目有两个&#xff0c;一个是Django项目&#xff0c;一个是Flask项目&#xff0c;Django昨天做了一个比较全面的总结&#xff0c;今天再就Flask做一个知识总结。我这相当于是项目驱动学习类型。 Flask是一个轻量级的Python Web应用框架&#xff0c;它被设计为…

(优作)基于STM32蓝牙控制小车系统设计(硬件+源代码+论文)竞赛作品

基于STM32蓝牙控制小车系统设计&#xff08;硬件源代码论文&#xff09;竞赛作品 基于意法半导体与ARM公司生产的STM32F4 DISCOVERY开发板的集电机驱动模块、电源管理模块、stm32f4主控模块、蓝牙串口通信模块、android控制端模块。电机驱动模块使用了两个L298N芯片来驱动4路电…

从零开始搭建一个vue项目

从零开始搭建一个vue项目 一、环境准备 1.1 安装node.js 选择合适的LTS版本&#xff0c;然后下载安装&#xff0c;安装地址&#xff1a;https://nodejs.org/en/download 在命令行中查看已安装的node.js版本 node -v v14.14.01.2 切换为淘宝的镜像源 解决国内下载慢的问题,…

python - mac安装mysqlclient

参考 https://github.com/PyMySQL/mysqlclient 安装 xcode xcode-select --install安装mysql brew uninstall mysql brew install mysql8.0启动 mysql-server 命令如下 brew services start mysql8.0安装 mysql-client brew uninstall mysql-client wget https://raw.git…

python在Django中切换语言,中英文两种语言怎样切换

在Django中切换语言(比如中英文两种语言)通常涉及以下步骤: 设置语言和本地化 在你的Django项目的settings.py文件中,你需要设置LANGUAGES和LOCALE_PATHS。LANGUAGES是一个包含所有可用语言和它们的本地化的元组列表,而LOCALE_PATHS是包含.mo翻译文件路径的列表。 pyth…

55.基于SpringBoot + Vue实现的前后端分离-旅游管理系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统&#xff0c;采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的旅游管理系统设计与实现管理工作系统…

Meltdown 以及Linux KPTI技术简介

文章目录 前言一、Introduction二、 Background2.1 Out-of-order execution2.2 Address Spaces2.3 Cache Attacks 三、A Toy Example四、Building Blocks of the Attack4.1 Executing Transient Instructions4.2 Building a Covert Channel 五、Meltdown5.1 Attack Description…

HTML页面关于高分屏的设置

记录一个HTML页面关于高分屏的踩到的坑。 所谓高分屏&#xff0c;就是在同样大小的屏幕面积上显示更多的像素点&#xff0c;这样可以呈现更好的可视效果的屏幕。例如&#xff0c;我的笔记本是15.6寸&#xff0c;理论上它的屏幕分辨率应该是1920 x 1080像素&#xff0c;但实际上…

Photoshop前言

Photoshop前言 分辨率图像格式工具界面组件 分辨率 分辨率是指单位长度内包含的像素点的数量&#xff0c;其单位通常为像素/英寸&#xff08;ppi&#xff09;&#xff0c;300ppi表示每英寸包含300个像素点。对于1英寸1英寸大小的图像&#xff0c;若分辨率为72ppi&#xff0c;则…

Web Storage 笔记11 网页数据存储

相关内容&#xff1a;Web Storage基本概念、localStorage、sessionStorage、登录注销实例、…… 在制作网页时会希望记录一些信息&#xff0c;例如用户登录状态、计数器或者小游戏等&#xff0c;但是又不希望用到数据库&#xff0c;就可以利用WebStorage技术将数据存储在用户浏…

Flutter笔记:Widgets Easier组件库(9)使用弹窗

Flutter笔记 Widgets Easier组件库&#xff08;9&#xff09;&#xff1a;使用弹窗 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress o…

vue如何实现异步组件

在 Vue 中实现异步组件&#xff0c;通常是为了在需要时加载组件&#xff0c;从而优化应用的性能&#xff0c;特别是当组件很大或者只在某些特定条件下才需要时。Vue 提供了几种方式来定义和使用异步组件。 1. 使用 import() 语法 你可以使用 ES6 的 import() 语法来动态地导入…

【网络】TCP为什么采用三次握手?而不是两次,四次

TCP&#xff08;Transmission Control Protocol&#xff09;是一种可靠的、面向连接的通信协议&#xff0c;它在建立连接时采用了三次握手的机制。这种设计并非偶然&#xff0c;而是为了确保连接的可靠性、安全性和效率。下面我们详细解释为什么TCP要采用三次握手。主要就是看两…

llama_index微调BGE模型

微调模型是为了让模型在特殊领域表现良好,帮助其学习到专业术语等。 本文采用llama_index框架微调BGE模型,跑通整个流程,并学习模型微调的方法。 一、环境准备 Linux环境,GPU L20 48G,Python3.8.10。 pip该库即可。 二、数据准备 该框架实现了读取各种类型的文件,给…

WebSocket 多屏同显和异显

介绍 多屏同显:通过在一个应用上进行操作之后,另一个应用也能跟着一起发生改变,例如app1播放了晴天这首音乐,那么app2也要同步播放这首音乐,确保所有屏幕显示的内容完全相同。多屏异显:每个屏幕可以显示不同的内容,或者在内容更新时存在一定的延迟,而不需要严格保持同步…

flutter实现选择图片视频上传到oss和图片视频的预览功能

一、效果图 flutter实现选择图片视频上传到oss和图片视频的预览功 二、所需要的依赖 image_picker: ^1.1.0 //选择图片 flutter_oss_aliyun: ^6.4.1 //图片上传到阿里云oss uuid: ^4.4.0 //生成唯一uuid interactiveviewer_gallery: ^0.6.0 //图片视频预览 cached_network_ima…

Baumer工业相机堡盟工业相机如何通过NEOAPISDK获取相机的Statistics图像传输统计信息(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPISDK获取相机的Statistics图像传输统计信息&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机NEOAPI SDK和相机Statistics图像传输统计信息的技术背景Baumer工业相机通过NEOAPISDK获取相机的Statistics图像传输统计信息技术1.引…

CMake:静态库链接其他动态库或静态库(九)

1、项目结构 对于下面这样一个项目 把calc模块做成静态或者动态库把sort模块做成静态库然后再sort模块中的*.cpp调用calc模块生成的库即可&#xff08;这样就制作了一个静态库引用动态或者静态库&#xff09;test模块用于测试sort模块中的内容 . ├── calc │ ├── ad…