56.在 Vue 3 中使用 OpenLayers 通过 moveend 事件获取地图左上和右下的坐标信息
前言
在现代 Web 开发中,地图应用越来越成为重要的组成部分。OpenLayers 是一个功能强大的 JavaScript 地图库,它提供了丰富的地图交互和操作功能,而 Vue 3 是当前流行的前端框架之一。在本篇文章中,我们将介绍如何在 Vue 3 中集成 OpenLayers,并使用 moveend 事件来获取地图的左上角和右下角坐标信息。
通过获取这些坐标,你可以实现地图的视野限制、统计分析等多种功能。我们将详细讲解如何在 Vue 3 中完成这一功能的实现,并通过代码示例演示具体步骤。
1. 环境准备
首先,我们需要在项目中引入 Vue 3 和 OpenLayers 库。
安装 Vue 3
如果你还没有一个 Vue 3 项目,可以通过 Vue CLI 快速创建一个新项目:
npm install -g @vue/cli vue create vue-openlayers cd vue-openlayers
在创建过程中选择 Vue 3 配置。
安装 OpenLayers
接下来,安装 OpenLayers:
npm install ol
2. 创建 Vue 组件
在这个项目中,我们将创建一个 Vue 组件,该组件初始化了 OpenLayers 地图,并使用 moveend 事件来获取地图视图的左上和右下坐标。
组件代码
<!--* @Author: 彭麒* @Date: 2025/1/3* @Email: 1062470959@qq.com* @Description: 此源码版权归吉檀迦俐所有,可供学习和借鉴或商用。-->
<template><div class="container"><div class="w-full flex justify-center flex-wrap"><div class="font-bold text-[24px]">在Vue3中使用OpenLayers通过moveend事件获取地图左上和右下的坐标信息</div></div><h4 style="color: orangered">左上坐标:{{ lt }};右下坐标:{{ rb }}</h4><div id="vue-openlayers"></div></div>
</template><script setup>
import {ref, onMounted} from 'vue';
import 'ol/ol.css';
import Map from 'ol/Map';
import View from 'ol/View';
import OSM from 'ol/source/OSM';
import TileLayer from 'ol/layer/Tile';
import {getTopLeft, getBottomRight} from 'ol/extent';
const lt = ref([]); // 左上坐标
const rb = ref([]); // 右下坐标
const map = ref(null); // 地图对象
// 初始化地图
const initMap = () => {map.value = new Map({layers: [new TileLayer({source: new OSM(),}),],target: 'vue-openlayers',view: new View({center: [116, 39],projection: 'EPSG:4326',zoom: 2,extent: [-180, -85, 180, 85],}),});moveendEvent(); // 绑定 moveend 事件
};// 处理 moveend 事件
const moveendEvent = () => {map.value.on('moveend', () => {const extent = map.value.getView().calculateExtent(map.value.getSize());const gtl = getTopLeft(extent);lt.value = [Number(gtl[0].toFixed(2)), Number(gtl[1].toFixed(2))];const grb = getBottomRight(extent);rb.value = [Number(grb[0].toFixed(2)), Number(grb[1].toFixed(2))];});
};
// 在组件挂载时初始化地图
onMounted(() => {initMap();
});</script><style scoped>
.container {width: 840px;height: 570px;margin: 50px auto;border: 1px solid #42b983;
}#vue-openlayers {width: 800px;height: 400px;margin: 0 auto;border: 1px solid #42b983;position: relative;
}
</style>
代码说明
1. 引入依赖
我们通过 import 语句引入了 ol/ol.css 和 OpenLayers 中需要使用的模块(如 Map, View, TileLayer, OSM 等)。这将确保地图可以正确渲染。
2. 组件中的 ref 和 onMounted
lt和rb分别是存储左上角和右下角坐标的响应式变量。map用来保存 OpenLayers 地图对象。
在 onMounted 生命周期钩子中,我们初始化了地图,并绑定了 moveend 事件。
3. 事件处理
在 moveendEvent 方法中,我们使用 map.value.getView().calculateExtent() 获取当前视图的范围(即地图的显示区域)。然后通过 getTopLeft 和 getBottomRight 方法获取左上和右下的坐标。
3. 运行效果
将上述代码放入一个新的 Vue 组件中,并确保你的项目已经正确安装了 OpenLayers。运行 npm run serve 启动项目后,访问页面,移动地图视图后,页面上会实时显示地图左上和右下的坐标。

4. 总结
通过本篇文章的示例代码,我们实现了在 Vue 3 中集成 OpenLayers,并通过 moveend 事件获取地图视图的左上角和右下角坐标。这对于进行地图定位、视野管理等功能非常有用。
希望这篇文章能帮助你更好地理解如何在 Vue 3 中使用 OpenLayers,并掌握地图事件的处理方式。如果你有任何问题或进一步的需求,欢迎在评论区留言交流。
作者:彭麒
联系方式: 1062470959@qq.com
通过这篇博文,你可以帮助读者更好地了解如何使用 Vue 3 和 OpenLayers 集成地图,处理地图事件以及如何在前端获取地图的坐标信息。
相关文章:
56.在 Vue 3 中使用 OpenLayers 通过 moveend 事件获取地图左上和右下的坐标信息
前言 在现代 Web 开发中,地图应用越来越成为重要的组成部分。OpenLayers 是一个功能强大的 JavaScript 地图库,它提供了丰富的地图交互和操作功能,而 Vue 3 是当前流行的前端框架之一。在本篇文章中,我们将介绍如何在 Vue 3 中集…...
文件本地和OSS上传
这里写目录标题 前端传出文件后端本地存储阿里云OSS存储上传Demo实现上传ConfigurationProperties 前端传出文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上传文件</title> </head&g…...
elementui table 表格 分页多选,保持选中状态
elementui多选时分页,解决选中状态无法保留选中项问题: 在el-table标签中加入row-key,row-key的值取当前数据里的唯一key在el-table-column selection 项中加入以下:reserve-selection“true” 完成后,将需要清空的地方 ( 如返回…...
MSE+Range案例
MSE的demo实现思路:首先准备fmp4格式的视频地址或者切片,接着将MSE挂载到video上,创建createObjectURL转二进制数据,fetch请求在线地址,分段请求,监听这个数据流的获取状态,当这个ReadyState为o…...
C# 设计模式(结构型模式):代理模式
C# 设计模式(结构型模式):代理模式 在软件开发中,有时我们需要通过某种方式间接地访问一个对象,这时就可以使用代理模式(Proxy Pattern)。代理模式通过引入一个代理对象来控制对目标对象的访问…...
YOLO——pytorch与paddle实现YOLO
YOLO——pytorch与paddle实现YOLO 本文将深入探讨YOLO目标检测的理论基础,并通过PyTorch和PaddlePaddle两个深度学习框架来展示如何实现基础的YOLO模型。我们将首先介绍YOLO的基本概念,这些理论基础是理解和实现YOLO网络的基础。通过PyTorch和PaddlePad…...
持续大额亏损,销量增幅有限,北汽蓝谷依旧黯然神伤
撰稿 | 行星 来源 | 贝多财经 “起了个大早,赶了个晚集”,用在如今的北汽蓝谷身上再合适不过。 2025年的第一个工作日,北汽蓝谷新能源科技股份有限公司(SH:600733,简称“北汽蓝谷”)对外披露了子公司北京…...
C# OpenCV机器视觉:背景减除与前景分离
在实验室的一角,阳光仿若一个急性子的小精灵,迫不及待地穿过窗帘缝隙,在阿强的桌面上欢快跳跃,洒下一片片斑驳陆离的光影,似乎在催促着阿强赶紧开启今日的奇妙探索。阿强端坐在桌前,眼神炽热地盯着眼前那台…...
C语言return与 ? :
上次讲解过一次函数,函数要配合return返回东西,但是在编写一些程序的时候我发现了很多冷门逻辑语法还没有掌握,当时讲课也是看一眼就过去了(死去的记忆开始攻击我) Return,爽! 现在有一个小问…...
【论文阅读】SCGC : Self-supervised contrastive graph clustering
论文地址:SCGC : Self-supervised contrastive graph clustering - ScienceDirect 代码地址: https://github.com/gayanku/SCGC 摘要 图聚类旨在发现网络中的群体或社区。越来越多的模型使用自编码器(autoencoders)结合图神经网…...
python pyqt5+designer的信号槽和动态显示
至少需要两个文件,一个是python的主文件,一个是designer的UI文件 1.对UI文件的处理 首先需要将UI文件转化成python文件,并且引入到主文件中。 2.在主文件中接受UI上的一些动作和返回主文件处理的数据到UI界面上。 框中选中的部分,…...
版本控制系统Helix Core 2024.2增强功能:与OpenTelemetry协议集成、Delta同步和传输等
“Perforce团队非常高兴为您带来Helix Core 2024.2版本,它拥有众多旨在提高团队效率、优化工作流程的增强功能。通过新的Open Telemetry协议集成,团队现在可以轻松将结构化日志集成到可观测性平台中。DeltaTransfer现在也适用于同步操作——这是2024.1版…...
certificate verify failed: unable to get local issuer certificate (_ssl.c:10
出现 “certificate verify failed: unable to get local issuer certificate (_ssl.c:10)” 这个错误通常是因为Python在尝试建立HTTPS连接时,无法验证服务器的SSL证书。这可能是因为本地系统中缺少必要的根证书,或者服务器的证书链不完整,导…...
关于大一上的总结
大一上总结 前言 源于学长们都喜欢写总结,今晚也正好听见一首有点触动心灵的歌,深有感慨,故来此写下这篇总结 正文 1.暑假前的准备 暑假之前姑且还是学习了基本的C语法,大概是到了结构体的地方,进度很慢࿰…...
JavaScript的基础知识
在鸿蒙操作系统的应用开发中,JavaScript作为一种广泛使用的编程语言,扮演着重要的角色。无论是构建用户界面还是实现业务逻辑,理解JavaScript的基础知识都是必不可少的。本文将深入探讨鸿蒙开发中与JavaScript相关的几个关键概念:…...
数据结构之单链表(超详解)
文章目录 1. 单链表1.1 概念、结构1.2 结点1.2.1 链表的性质 2. 链表的打印3. 尾插、头插创建结点尾插头插 4. 尾删、头删尾删头删 5. 查找指定结点6. 指定位置之前、之后插入数据指定位置之前插入数据指定位置之后插入数据 7. 删除指定位置结点7.1 删除指定位置之后结点8. 链表…...
告别编程困惑:GDB、冯诺依曼、操作系统速通指南
🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 🚩用通俗易懂且不失专业性的文字,讲解计算机领域那些看似枯燥的知识点🚩 目录 前言 一…...
网络分析工具-tcpdump
文章目录 前言一、tcpdump基础官网链接命令选项详解常规过滤规则tcpdump输出 一、tcpdump实践HTTP协议ICMP状态抓包 前言 当遇到网络疑难问题的时候,抓包是最基本的技能,通过抓包才能看到网络底层的问题 一、tcpdump基础 tcpdump是一个常用的网络分析工…...
基于AI边缘计算盒子的智慧零售场景智能监控解决方案
一、方案背景 随着零售业的快速发展,传统零售模式面临着诸多挑战,如人力成本高、管理效率低、顾客体验不佳等。智慧零售借助人工智能、物联网等技术手段,实现对零售场景的全面感知和智能管理。AI边缘计算盒子作为智慧零售的关键技术之一&…...
STM32G431收发CAN
1.硬件连接 PB8作为CAN_RX,PB9作为CAN_TX,连接一个CAN收发器TJA1051T/3 2. CubeMX里配置CAN 设置连接FDCAN1的参数,使用1个标准过滤器,波特率位500K 使能FDCAN1的中断 3 自动生成代码 3.1 初始化 static void MX_FDCAN1_In…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
