五十三、openlayers官网示例Layer Spy解析——跟随鼠标透视望远镜效果、图层剪裁

官网demo地址:

Layer Spy

 这篇实现了鼠标跟随望远镜效果,鼠标移动时绘制一个圆形的剪裁区剪裁上层图层。

container.addEventListener("mousemove", function (event) {mousePosition = map.getEventPixel(event);map.render();});container.addEventListener("mouseout", function () {mousePosition = null;map.render();});

通过map.render()触发prerender,postrender两个函数来完成裁剪,其原理和上篇的卷帘效果一样。

上篇地址: 

 完整代码:

<template><div class="box"><h1>Layer Spy</h1><div id="map" class="map"></div></div>
</template><script>
import StadiaMaps from "ol/source/StadiaMaps.js";
import Map from "ol/Map.js";
import TileLayer from "ol/layer/Tile.js";
import View from "ol/View.js";
import XYZ from "ol/source/XYZ.js";
import { fromLonLat } from "ol/proj.js";
import { getRenderPixel } from "ol/render.js";
export default {name: "",components: {},data() {return {map: null,};},computed: {},created() {},mounted() {const container = document.getElementById("map");const layer = new TileLayer({source: new StadiaMaps({layer: "stamen_terrain_background",}),zIndex: 2,});const map = new Map({layers: [layer,new TileLayer({source: new StadiaMaps({layer: "outdoors",}),}),],target: "map",view: new View({center: [0, 0],zoom: 2,projection: "EPSG:4326",}),});let radius = 75;document.addEventListener("keydown", function (evt) {if (evt.key === "ArrowUp") {radius = Math.min(radius + 5, 150);map.render();evt.preventDefault();} else if (evt.key === "ArrowDown") {radius = Math.max(radius - 5, 25);map.render();evt.preventDefault();}});let mousePosition = null;container.addEventListener("mousemove", function (event) {mousePosition = map.getEventPixel(event);map.render();});container.addEventListener("mouseout", function () {mousePosition = null;map.render();});layer.on("prerender", function (event) {const ctx = event.context;ctx.save();ctx.beginPath();if (mousePosition) {const pixel = getRenderPixel(event, mousePosition);const offset = getRenderPixel(event, [mousePosition[0] + radius,mousePosition[1],]);const canvasRadius = Math.sqrt(Math.pow(offset[0] - pixel[0], 2) + Math.pow(offset[1] - pixel[1], 2));ctx.arc(pixel[0], pixel[1], canvasRadius, 0, 2 * Math.PI);ctx.lineWidth = (5 * canvasRadius) / radius;ctx.strokeStyle = "rgba(0,0,0,0.5)";ctx.stroke();}ctx.clip();});layer.on("postrender", function (event) {const ctx = event.context;ctx.restore();});},methods: {},
};
</script><style lang="scss" scoped>
#map {width: 100%;height: 500px;
}
.box {height: 100%;
}</style>

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

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

相关文章

28.建议和纠错

创建ByteBuf建议 特别说明&#xff1a; 之前创建的ByteBuffer都是&#xff1a; ByteBuf buffer ByteBufAllocator.DEFAULT.buffer(10); //默认获取的是直接内存 这样创建只是自己写一些测试练习使用。 真正项目开发中&#xff0c;还是建议在handler中的创建&#xff1a;在服…

【windows|009】计算机网络基础知识

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 ​ &#x1f3c5;阿里云ACE认证高级工程师 ​ &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社…

SAP AI Copilot Joule有可能是对SAP顾问的王炸

本月初在奥兰多举行的SAP蓝宝石大会&#xff0c;按照惯例SAP蓝宝石大会是SAP宣传SAP最新战略和技术的大会&#xff0c;所以火热的AI话题是重中之重&#xff0c;包括请了黄仁勋来站台。刚开始我也没有太在意&#xff0c;认为会是一场普通的大会。对于AI&#xff0c;虽然很火但是…

将 Aira2 集成到 Go项目中

介绍 Aria2 简介 Aria2 是一个轻量级的、跨平台的命令行下载工具&#xff0c;具有强大的多连接、多协议支持&#xff0c;以及灵活的任务控制功能。它可以同时从 HTTP、HTTPS、FTP、BitTorrent 和磁力链接等来源下载文件&#xff0c;并支持断点续传&#xff0c;可以在下载过程…

代码评审——Java占位符%n的处理

问题描述 在软件开发项目中&#xff0c;特别是在处理动态内容生成与呈现至前端界面的过程中&#xff0c;正确运用占位符以确保文本完整性和数据准确性显得尤为重要。不当的占位符管理不仅可能导致语法错误或逻辑混乱&#xff0c;还会引发一系列隐蔽的问题&#xff0c;这些问题…

PHP序列化基础概念:深入理解数据存储与传输

PHP序列化是一个关键概念&#xff0c;它允许开发者将复杂的数据结构&#xff08;如对象、数组等&#xff09;转换为可存储或可传输的字符串格式。以下是关于PHP序列化基础概念的深入理解&#xff1a; 序列化的定义与目的 定义&#xff1a;序列化是将数据结构或对象状态转换为可…

ASP.NET Core 6.0 多种部署方式

IIS 环境准备和部署 安装并配置 IIS 安装 IIS&#xff0c;在搜索输入并打开 启用或关闭 Windows 功能。 配置IIS 需要配置 ASPNETCore 部署IS 程序包安装 &#xff08;ASP.NET Core Module v2&#xff09; Download .NET 6.0 (Linux, macOS, and Windows).NET 6.0 downloads…

人工智能如何助力人才招聘方式改变

尽管全球经济不稳定&#xff0c;但在当今的就业市场上&#xff0c;招聘顶尖人才仍然竞争激烈&#xff0c;企业很难找到优质人才。明智的人才招聘团队会将人工智能融入日常招聘流程当中&#xff0c;借助人工智能工具或智能招聘系统&#xff08;如大易招聘管理系统&#xff09;&a…

Kafka第一篇——内部组件概念架构启动服务器zookeeper选举以及底层原理

目录 引入 ——为什么分布式系统需要用第三方软件&#xff1f; JMS 对比 组件 架构推演——备份实现安全可靠 &#xff0c; Zookeeper controller的选举 controller和broker底层通信原理 BROKER内部组件 ​编辑 topic创建 引入 ——为什么分布式系统需要用第三方软件&#…

Java 面试题:对比 Hashtable、HashMap、TreeMap 有什么不同?

在 Java 集合框架中&#xff0c;理解 Hashtable、HashMap 和 TreeMap 之间的区别对于任何希望编写高效代码的开发者来说都是至关重要的。尽管这三个类都用于存储键值对&#xff0c;但它们在特性和使用场景上却有着显著的差异。 Hashtable 是最早实现的哈希表之一&#xff0c;提…

静电式油烟净化器:餐饮业油烟治理的革命性选择

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 在餐饮业&#xff0c;油烟问题一直是业主们头疼的难题。如何有效治理油烟&#xff0c;不仅关乎厨房的清洁&#xff0c;更直接…

收费4980的AI批量混剪,素材技术方法工具配套,详细拆解!

前几天有朋友跟我讲&#xff0c;他说有做旅游卡的&#xff0c;他们收费4980元&#xff0c;给500张卡&#xff0c;送AI批量混剪技术&#xff0c;问我们有没有&#xff1f; 批量混剪技术&#xff0c;这个其他早在2022年的时候我们就已经使用了。有开通抖音企业号的朋友都知道&am…

编译chamfer3D报错

python setup.py install编译chamfer3D报错 出现nvcc fatal : Unsupported gpu architecture ‘compute_86‘的问题&#xff0c;是因为显卡与cuda版本支持的算力不匹配。 nvcc fatal : Unsupported gpu architecture ‘compute_86’ ninja: build stopped: subcommand failed. …

[leetcode 27移除元素]双指针

Problem: 27. 移除元素 文章目录 思路Code 思路 使用双指针 第一个指针,遍历整个数组 第二个指针,当第一个指针遍历到不等于val值时,将其赋给第一个指针所指的位置 并且每赋值一个,第二个指针向后移动一个 最后第二个指针的长度就是结果 Code class Solution {public int remo…

机器人里程计(Odometry)

机器人里程计&#xff08;Odometry&#xff09;是机器人定位和导航中的一个关键概念&#xff0c;它涉及到利用传感器数据来估计机器人在环境中的位置和姿态。里程计的基本原理是根据机器人自身动作的反馈来计算其相对于初始位置的位移。这通常包括机器人从一个已知位置开始&…

太牛了!AI换脸数字人,限制解除,免费用!

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 今天给大家安利一款美图公司出品的神器&#xff0c;功能限制完全解除&#xff0c;可以免费使用AI换脸数字人、AI提词器、AI脚本、AI抠图、AI清除、AI封面等超多超实用功能&#xff0c;…

抖音商城618好物节消费数据报告发布,带货成交额同比增长300%

6月21日&#xff0c;“抖音商城618好物节”消费数据报告发布&#xff0c;呈现618期间平台全域经营情况及大众消费趋势。 今年618大促活动中&#xff0c;抖音电商投入流量资源和消费券&#xff0c;鼓励商家、达人双向经营货架场景和内容场景&#xff0c;不断激活消费市场。 报…

SEGGER Embedded Studio IDE移植embOS

SEGGER Embedded Studio IDE移植embOS 一、背景介绍二、任务目标三、技术实现3.1 获得embOS3.2 创建SES工程3.2.1 创建初始Solution和Project3.2.2 制作项目文件结构3.2.3 移植embOS库和有关头文件3.2.3.1 头文件3.2.3.2 库文件3.2.3.3 创建RTOSInit.c源文件3.2.3.4 OS_Error.c…

Golang——channel

channel是Go在语言层面提供的协程间的通信方式。通过channel我们可以实现多个协程之间的通信&#xff0c;并对协程进行并发控制。 使用注意&#xff1a; 管道没有缓冲区时&#xff0c;从管道中读取数据会阻塞&#xff0c;直到有协程向管道中写入数据。类似地&#xff0c;向管道…

生产实习Day9 ---- Scala介绍

文章目录 Scala&#xff1a;融合面向对象与函数式编程的强大语言引言Scala与Java的互操作性Scala在大数据处理中的应用Scala的并发编程Scala的学习资源和社区结论 Scala&#xff1a;融合面向对象与函数式编程的强大语言 引言 Scala&#xff0c;全称Scalable Language&#xff…