openlayers WebGL裁剪图层,双图层拼接显示

本篇介绍一下使用openlayers WebGL裁剪图层,双图层拼接显示

1 需求

  • WebGL裁剪图层,双图层拼接显示

2 分析

  • 图层prerender和postrender事件的使用

  • WebGL scissor方法的使用

scissor方法指定了一个裁剪区域,用来将绘图区域限制在其限定的盒形区域内。

gl.scissor(x, y, width, height);

参数:

x,指定盒形裁剪区域左下角所在的横坐标,默认为 0。

y,指定盒形裁剪区域左下角的纵坐标,默认为 0。

width,用来确定盒型裁剪区域宽度的非负数,默认为 canvas 的宽度。

height,用以指定盒形裁剪区域高度的非负数,默认为 canvas 的高度。

3 实现

在这里插入图片描述

<template><div id="map" class="map"></div><div class="toolbar"><el-slider v-model="rateH" :min="1" :max="100" :step="1" @input="handleInput"></el-slider><el-slider v-model="rateV" :min="1" :max="100" :step="1" @input="handleInput"></el-slider></div>
</template><script setup lang="ts">
import { Map, View } from 'ol';
import { WebGLTile as WebGLTileLayer } from 'ol/layer';
import { fromLonLat, get } from 'ol/proj';
import { XYZ } from 'ol/source';
import { getRenderPixel } from 'ol/render.js';const projection = get('EPSG:3857');
const key = '替换为天地图key';
const layerTypeMap = {vector: ['vec', 'cva'], // [矢量底图, 矢量注记]image: ['img', 'cia'], // [影像底图, 影像注记]terrain: ['ter', 'cta'] // [地形晕渲, 地形注记]
};
let map = null;
const rateH = ref(50);
const rateV = ref(50);const imageLayer = new WebGLTileLayer({source: new XYZ({url: `https://t{0-7}.tianditu.gov.cn/DataServer?T=${layerTypeMap['image'][0]}_w&tk=${key}&x={x}&y={y}&l={z}`,projection})
});const terrainLayer = new WebGLTileLayer({source: new XYZ({url: `https://t{0-7}.tianditu.gov.cn/DataServer?T=${layerTypeMap['terrain'][0]}_w&tk=${key}&x={x}&y={y}&l={z}`,projection})
});onMounted(() => {initMap('image');
});const initMap = (layerType = 'image') => {// c: 经纬度 w: 墨卡托const matrixSet = 'w';map = new Map({target: 'map',layers: [// 底图terrainLayer,imageLayer,// 注记new WebGLTileLayer({source: new XYZ({url: `https://t{0-7}.tianditu.gov.cn/DataServer?T=${layerTypeMap[layerType][1]}_${matrixSet}&tk=${key}&x={x}&y={y}&l={z}`,projection})})],view: new View({center: fromLonLat([116.406393, 39.909006]),projection: projection,zoom: 5,maxZoom: 17,minZoom: 1})});imageLayer.on('prerender', function (event) {const gl = event.context;gl.enable(gl.SCISSOR_TEST);//获取地图[宽,高]像素(数组)const mapSize = map.getSize();// getRenderPixel从地图视口的CSS像素获取事件的画布上下文的像素。// 获取canvas坐标的左下和右上点坐标const bottomLeft = getRenderPixel(event, [0, mapSize[1]]);const topRight = getRenderPixel(event, [mapSize[0], 0]);const width = Math.round((topRight[0] - bottomLeft[0]) * (rateH.value / 100));const height = Math.round((topRight[1] - bottomLeft[1] )* (rateV.value / 100));;gl.scissor(bottomLeft[0], bottomLeft[1], width, height);});imageLayer.on('postrender', function (event) {const gl = event.context;gl.disable(gl.SCISSOR_TEST);});
};const handleInput = val => {map.render();
};
</script>
<style scoped lang="scss">
.map {width: 100%;height: 100%;
}.toolbar {position: absolute;top: 20px;left: 100px;width: 500px;display: flex;justify-content: center;align-items: center;color: #fff;.el-slider {margin-right: 50px;}div {width: 100px;height: 30px;display: flex;justify-content: center;align-items: center;}
}
</style>

如果想拼接图层放在左上角,只需要修改这句

 gl.scissor(bottomLeft[0],topRight[1]-height , width, height);

在这里插入图片描述

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

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

相关文章

【LeetCode】2187. 完成旅途的最少时间

1. 题意 2. 分析 二分法有一个关键特征&#xff1a;如果答案answer满足题意&#xff0c;那么对于任何整数i&#xff0c;如果有i>answer&#xff0c;那么i也会是一个存在的解&#xff0c;只不过不是最优解。 本题想要找出一个达到 totalTrips 趟需要的最少时间成本t&#x…

设计模式——多例模式(23种之外)

多例模式&#xff08;Multiton Pattern&#xff09;是一种特殊的设计模式&#xff0c;它属于创建型模式。与单例模式&#xff08;Singleton Pattern&#xff09;相比&#xff0c;多例模式允许一个类有多个实例&#xff0c;但是实例的数量是有限制的&#xff0c;并且这些实例在全…

【Linux】Ubuntu配置JDK环境、MySQL环境

一、 Ubuntu配置JDK环境 在Ubuntu系统中安装JDK 8可以通过以下步骤进行&#xff1a; 打开终端。更新包列表&#xff1a; sudo apt update安装OpenJDK 8&#xff1a; sudo apt install openjdk-8-jdk验证安装是否成功&#xff1a; java -version注&#xff1a;如果系统中安…

4.10、matlab生成脉冲序列:pulstran()函数

1、matlab生成脉冲序列简介 MATLAB生成脉冲序列通常涉及到使用MATLAB中的函数或编程来创建具有特定时间间隔和幅度的脉冲信号。脉冲序列通常用于数字信号处理、通信系统测试等应用中。 生成脉冲序列可以采用以下方法之一: 使用MATLAB中的函数,例如square()函数生成方波信号…

FreeRTOS 入门 知识

什么是FreeRTOS FreeRTOS 是一个轻量级的实时操作系统&#xff08;RTOS&#xff09;&#xff0c;由 Richard Barry 在 2003 年开发&#xff0c;并且由亚马逊的 FreeRTOS 项目&#xff08;一个由 Amazon Web Services (AWS) 支持的开源项目&#xff09;进一步推动和发展。FreeR…

麒麟系统开发笔记(十四):在国产麒麟系统上编译libmodbus库、搭建基础开发环境和移植测试Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140387947 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

Java--接口的定义与实现

1.Java的接口是一种约束 2.定义一些方法&#xff0c;让不同的人实现 3.方法都是 public abstract 4.常量都是public static final 5.接口不能被实例化&#xff1a; 接口中没有构造方法 6.接口可以多继承&#xff1a; 使用implements即可实现 7.必须要重写接口中的方法…

什么是稀疏化

稀疏化一词来源于条件计算理念。在稠密模型中&#xff0c;所有参数都发挥作用&#xff0c;而稀疏化可以只运行整个系统的某些部分。 前文提到 Shazeer 对机器翻译中的 MoE 进行了探索。条件计算&#xff08;网络中只有某些部分处于活动状态&#xff09;使得在不增加计算量的情况…

差分进化算法与遗传算法之间的区别

差分进化算法&#xff08;Differential Evolution, DE&#xff09;和遗传算法&#xff08;Genetic Algorithm, GA&#xff09;都是基于进化思想的优化算法&#xff0c;用于全局优化问题。尽管它们有许多相似之处&#xff0c;但在具体实现和应用上有明显的区别。 共同点 种群进…

Android系统上常见的性能优化工具

Android系统上常见的性能优化工具 以下是一些常见的性能优化工具&#xff0c;可用于辅助分析 Systrace 报告&#xff1a; Android Studio Profiler&#xff1a;它集成在 Android Studio 中&#xff0c;提供了 CPU、内存、网络等多方面的性能分析功能&#xff0c;能与 Systrace…

在家上网IP地址是固定的吗?

在数字化时代&#xff0c;互联网已成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐&#xff0c;我们都离不开网络的支持。然而&#xff0c;当我们在家中接入互联网时&#xff0c;可能会产生这样一个疑问&#xff1a;在家上网IP地址是固定的吗&#xff1f;下面一…

SpinalHDL之实用工具(下篇)

本文作为SpinalHDL学习笔记第十四篇&#xff0c;记录使用SpinalHDL的一些实用性语法工具。 SpinalHDL学习笔记总纲链接如下&#xff1a; SpinalHDL 学习笔记_spinalhdl blackbox-CSDN博客 目录&#xff1a; 6.存根&#xff08;Stub&#xff09; 7.Assertions 8.Report 9.S…

秋招Java后端开发冲刺——MyBatisPlus总结

一、 基本知识 1. 介绍 yBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上增加了大量功能和简化操作&#xff0c;以提高开发效率。 2. 特点 无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有项目产生影响。依赖少&#xff1a;仅仅依赖 …

探索 Java 8 新特性:函数式接口

Java 8 的发布为 Java 语言带来了许多重要的改进和新特性。其中&#xff0c;函数式接口&#xff08;Functional Interface&#xff09;是一个关键的概念&#xff0c;它与 Lambda 表达式紧密相关&#xff0c;为简化代码和提高可读性提供了强有力的支持。本文将深入探讨函数式接口…

数仓工具—Hive语法之正则表达式函数

正则表达式函数 之前我们介绍过like rlike regexp 这些关键字,都是和匹配有关的,今天我们介绍一下hive 的REGEXP_REPLACE 和REGEXP_EXTRACT 函数,背景是使用Hive正则表达式函数提取数字 在我的其他文章中,我们已经看到了如何使用Hive正则表达式从字符串中提取日期值。正则…

CV05_深度学习模块之间的缝合教学(1)

1.1 在哪里缝 测试文件&#xff1f;&#xff08;&#xff09; 训练文件&#xff1f;&#xff08;&#xff09; 模型文件&#xff1f;&#xff08;√&#xff09; 1.2 骨干网络与模块缝合 以Vision Transformer为例&#xff0c;模型文件里有很多类&#xff0c;我们只在最后…

Ubuntu 软件源404not found原因及解决办法

报错原因 404的意思是没有找到这个源。原因如下&#xff1a; 软件源链接有问题。可能是不符合你的架构的链接&#xff08;如ubuntu x86架构使用了ubuntu arm架构的软件源链接&#xff09;&#xff0c;或者不符合当前版本的链接&#xff08;ubuntu 22.04使用了ubuntu 24的链接…

huggingface 数据集和模型加速下载, hfdata 输出为json

如果有碰到huggingface的数据集下载慢&#xff0c;可以使用国内镜像代理下载&#xff0c;首先打开命令行&#xff0c;输入下面的环境变量&#xff1a; export HF_ENDPOINThttps://hf-mirror.com然后执行你自己的代码&#xff0c;比如&#xff1a; from datasets import load_…

嘉立创EDA隐藏地线或者

https://prodocs.lceda.cn/cn/pcb/side-panel-left-net/#%E9%A3%9E%E7%BA%BF

50+dfm模型素人网红路人实时直播替换DFLive模型dfm格式

作为一名直播达人&#xff0c;我投入了大量时间和精力在网上收集和购买各种直播所需的模型资源。这些资源不仅包括男模、女模&#xff0c;还有明星脸、大众脸、网红脸以及各类稀有的素人模型。为了回馈广大直播爱好者&#xff0c;我将这些宝贵资源整理成一个合集&#xff0c;供…