当前位置: 首页 > article >正文

69.在 Vue 3 中使用 OpenLayers 拖拽实现放大区域的效果(DragPan)

引言

在现代 Web 开发中,地图功能已经成为许多应用的重要组成部分。OpenLayers 是一个功能强大的开源地图库,支持多种地图源和交互操作。Vue 3 是一个流行的前端框架,以其响应式数据和组件化开发著称。本文将介绍如何在 Vue 3 中集成 OpenLayers,并实现拖拽放大区域的效果(DragPan)。

实现效果

  • 按住 Shift 键,使用鼠标左键圈选区域,地图会自动放大到选中的区域。

  • 支持地图的拖拽、缩放等基本操作。

  • 使用 MapTiler 提供的地图服务作为底图。

环境准备

在开始之前,请确保你已经安装了以下工具和库:

  • Node.js 和 npm

  • Vue 3 项目(可以通过 vue-cli 或 Vite 创建)

  • OpenLayers 库

安装 OpenLayers

在项目中安装 OpenLayers:

npm install ol

实现步骤

1. 创建 Vue 3 组件

首先,创建一个 Vue 3 组件,用于承载地图和实现拖拽放大功能。

<!--* @Author: 彭麒* @Date: 2025/1/24* @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拖拽实现放大区域的效果(DragPan)</div></div><div class="title">操作说明:按住shift,使用鼠标左键进行圈选</div><div id="vue-openlayers"></div></div>
</template><script>
import 'ol/ol.css';
import { ref, onMounted } from 'vue';
import { Map, View } from 'ol';
import Tile from 'ol/layer/Tile';
import TileJSON from 'ol/source/TileJSON';
import { DragPan, defaults as defaultInteractions } from 'ol/interaction';export default {setup() {const map = ref(null);const maptiler = (data) => {if (map.value) {// 清除所有 layermap.value.getLayers().getArray().forEach((layer) => {if (layer) {map.value.removeLayer(layer);}});const url = `https://api.maptiler.com/maps/${data}/tiles.json?key=RbTrJIUQMw0c6xtn6kZr`;const source = new TileJSON({url,tileSize: 512,crossOrigin: 'anonymous',});const maptilerMap = new Tile({source,});map.value.addLayer(maptilerMap);}};const initMap = () => {map.value = new Map({target: 'vue-openlayers',layers: [],view: new View({center: [13247019.404399557, 4721671.572580107],zoom: 3,}),interactions: defaultInteractions().extend([new DragPan()]),});};onMounted(() => {initMap();maptiler('topographique');});return {map,};},
};
</script><style scoped>
.container {width: 840px;height: 590px;margin: 50px auto;border: 1px solid #42B983;
}#vue-openlayers {width: 800px;height: 470px;margin: 0 auto;border: 1px solid #42B983;position: relative;
}
.title{font-size: 20px;font-weight: bold;margin-top: 20px;margin-bottom: 20px;text-align: center;color: red;
}
</style>

2. 代码解析

2.1 模板部分
  • <div id="vue-openlayers">: 这是地图的容器,OpenLayers 会将地图渲染到这个 DOM 元素中。

  • 操作说明: 提示用户如何操作地图(按住 Shift 键并使用鼠标左键圈选区域)。

2.2 脚本部分
  • 引入依赖:

    • ol/ol.css: OpenLayers 的样式文件。

    • refonMounted: Vue 3 的 Composition API 函数。

    • MapView: OpenLayers 的核心类,用于创建地图和视图。

    • TileTileJSON: OpenLayers 的图层和数据源类。

    • DragPandefaultInteractions: OpenLayers 的交互功能,用于实现地图拖拽。

  • setup 函数:

    • map: 使用 ref 创建一个响应式的地图对象。

    • maptiler 函数: 用于加载 MapTiler 提供的地图服务。它会清除当前地图的所有图层,并根据传入的 data 参数加载新的地图图层。

    • initMap 函数: 初始化 OpenLayers 地图,设置目标容器、视图中心、缩放级别,并添加拖拽交互。

    • onMounted 钩子: 在组件挂载后调用 initMap 和 maptiler 函数,初始化地图并加载默认的 MapTiler 地图。

2.3 样式部分
  • .container: 设置地图容器的宽度、高度、边框等样式。

  • #vue-openlayers: 设置地图显示区域的宽度、高度、边框等样式。

  • .title: 设置操作说明的字体大小、颜色、对齐方式等样式。

3. 运行项目

在终端中运行以下命令启动项目:

npm run serve

打开浏览器,访问 http://localhost:8080,即可看到地图效果。

总结

本文介绍了如何在 Vue 3 中集成 OpenLayers,并实现拖拽放大区域的效果(DragPan)。通过 OpenLayers 的强大功能和 Vue 3 的响应式特性,我们可以轻松构建出功能丰富的地图应用。希望本文对你有所帮助,欢迎在评论区交流讨论!


参考文档

  • OpenLayers 官方文档

  • Vue 3 官方文档

  • MapTiler 地图服务


希望这篇文章能帮助你在 CSDN 上顺利发表!如果有任何问题,欢迎随时交流!

相关文章:

69.在 Vue 3 中使用 OpenLayers 拖拽实现放大区域的效果(DragPan)

引言 在现代 Web 开发中&#xff0c;地图功能已经成为许多应用的重要组成部分。OpenLayers 是一个功能强大的开源地图库&#xff0c;支持多种地图源和交互操作。Vue 3 是一个流行的前端框架&#xff0c;以其响应式数据和组件化开发著称。本文将介绍如何在 Vue 3 中集成 OpenLa…...

77,【1】.[CISCN2019 华东南赛区]Web4

有句英文&#xff0c;看看什么意思 好像也可以不看 进入靶场 点击蓝色字体 我勒个豆&#xff0c;百度哇 所以重点应该在url上&#xff0c;属于任意文件读取类型 接下来该判断框架了 常见的web框架如下 一&#xff0c;Python 框架 1.Flask URL 示例 1&#xff1a;http://…...

手撕B-树

一、概述 1.历史 B树&#xff08;B-Tree&#xff09;结构是一种高效存储和查询数据的方法&#xff0c;它的历史可以追溯到1970年代早期。B树的发明人Rudolf Bayer和Edward M. McCreight分别发表了一篇论文介绍了B树。这篇论文是1972年发表于《ACM Transactions on Database S…...

SQL 指南

SQL 指南 引言 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库系统的标准计算机语言。自1970年代问世以来,SQL已经成为了数据库管理和数据操作的事实标准。本文旨在为初学者和有经验的数据库用户提供一个全面的SQL指南,涵盖SQL的基础知识、高级…...

一文简单回顾复习Java基础概念

还是和往常一样&#xff0c;我以提问的方式回顾复习&#xff0c;今天回顾下Java小白入门应该知道的一些基础知识 Java语言有哪些特点呢&#xff1f; Java语言的特点有&#xff1a; 面向对象&#xff0c;主要是封装、继承、多态&#xff1b;平台无关性&#xff0c;“一次编写…...

Git上传了秘钥如何彻底修改包括历史记录【从安装到实战详细版】

使用 BFG Repo-Cleaner 清除 Git 仓库中的敏感信息 1. 背景介绍 在使用 Git 进行版本控制时&#xff0c;有时会不小心将敏感信息&#xff08;如 API 密钥、密码等&#xff09;提交到仓库中。即使后续删除&#xff0c;这些信息仍然存在于 Git 的历史记录中。本文将介绍如何使用…...

GCC之编译(8)AR打包命令

GCC之(8)AR二进制打包命令 Author: Once Day Date: 2025年1月23日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章请查看专栏: Linux实践记录_Once-Day的博客-C…...

Linux二进制部署K8s集群的平滑升级教程

一、升级前的准备工作 备份集群配置和数据 备份/etc/kubernetes/目录&#xff0c;其中包含Kubernetes集群的配置文件。 备份/var/lib/etcd/目录&#xff0c;其中存储了etcd数据库的数据。 使用etcdctl工具备份etcd数据&#xff1a; bash复制 ETCDCTL_API3 etcdctl snapshot s…...

2.1.3 第一个工程,点灯!

新建工程 点击菜单栏左上角&#xff0c;新建工程或者选择“文件”-“新建工程”&#xff0c;选择工程类型“标准工程”选择设备类型和编程语言&#xff0c;并指定工程文件名及保存路径&#xff0c;如下图所示&#xff1a; 选择工程类型为“标准工程” 选择主模块机型&#x…...

图像处理算法研究的程序框架

目录 1 程序框架简介 2 C#图像读取、显示、保存模块 3 C动态库图像算法模块 4 C#调用C动态库 5 演示Demo 5.1 开发环境 5.2 功能介绍 5.3 下载地址 参考 1 程序框架简介 一个图像处理算法研究的常用程序逻辑框架&#xff0c;如下图所示 在该框架中&#xff0c;将图像处…...

计算机工程:解锁未来科技之门!

计算机工程与应用是一个充满无限可能性的领域。随着科技的迅猛发展&#xff0c;计算机技术已经深深渗透到我们生活的方方面面&#xff0c;从医疗、金融到教育&#xff0c;无一不在彰显着计算机工程的巨大魅力和潜力。 在医疗行业&#xff0c;计算机技术的应用尤为突出。比如&a…...

Linux初识——基本指令(2)

本文将继续从上篇末尾讲起&#xff0c;讲解我们剩下的基本指令 一、剩余的基本指令 1、mv mv指令是move&#xff08;移动&#xff09;的缩写&#xff0c;其功能为&#xff1a;1.剪切文件、目录。2.重命名 先演示下重命名&#xff0c;假设我想把当前目录下的di34改成dir5 那…...

单片机-STM32 WIFI模块--ESP8266 (十二)

1.WIFI模块--ESP8266 名字由来&#xff1a; Wi-Fi这个术语被人们普遍误以为是指无线保真&#xff08;Wireless Fidelity&#xff09;&#xff0c;并且即便是Wi-Fi联盟本身也经常在新闻稿和文件中使用“Wireless Fidelity”这个词&#xff0c;Wi-Fi还出现在ITAA的一个论文中。…...

[C++技能提升]类注册

最近在做AI信息在各个平台流转的框架设计&#xff0c;想要设计一种可以灵活扩展、不改变原有代码的框架&#xff0c;了解到了类注册。 具体需求是这样的&#xff1a;AI算法在客户本地电脑和云端都有部署&#xff0c;原先AI在这两个平台下的输出格式并不统一&#xff0c;且每个…...

OpenHarmony 5.0.2 Release来了!

版本概述 OpenHarmony 5.0.2 Release版本对标准系统的能力进行持续完善&#xff0c;以快速迭代的方式推出API 14&#xff0c;相比5.0.1 Release版本&#xff0c;重点做出了如下特性新增或增强&#xff1a; 进一步增强ArkUI、图形图像的能力&#xff0c;提供更多组件的高级属性…...

80,【4】BUUCTF WEB [SUCTF 2018]MultiSQL

53&#xff0c;【3】BUUCTF WEB october 2019 Twice SQLinjection-CSDN博客 上面这个链接是我第一次接触二次注入 这道题也涉及了 对二次注入不熟悉的可以看看 BUUCTF出了点问题&#xff0c;打不开&#xff0c;以下面这两篇wp作为学习对象 [SUCTF 2018]MultiSQL-CSDN博客 …...

NR_shell运行流程简析

nr_shell 是一套开源 shell 框架&#xff0c;基于框架可创建终端交互功能。 为了记录终端输入指令&#xff0c;以及进行解析处理&#xff0c;nr_shell 提供了一套 cmd 结构体&#xff0c;具体如下&#xff1a;typedef struct static_cmd_function_struct {char cmd[NR_SHELL_CM…...

Prometheus部署及linux、mysql、monog、redis、RocketMQ、java_jvm监控配置

Prometheus部署及linux、mysql、monog、redis、RocketMQ、java_jvm监控配置 1.Prometheus部署1.2.Prometheus修改默认端口 2.grafana可视化页面部署3.alertmanager部署4.监控配置4.1.主机监控node-exporter4.2.监控mysql数据库mysqld_exporter4.3.监控mongod数据库mongodb_expo…...

问题排查 - TC397 CORE2 50MS/100MS任务不运行

1、问题描述 CORE2 的任务运行次数的计数值OsTask_100ms_Core2 - task_cnt[12]、OsTask_50ms_Core2 - task_cnt[16]不在累加&#xff0c;但是其他任务OsAlarm_1ms_Core2、OsAlarm_5ms_Core2、OsAlarm_10ms_Core2、OsAlarm_20ms_Core2 任务计数值累加正常。 如果是任务栈溢出&a…...

Spring FatJar写文件到RCE分析

背景 现在生产环境部署 spring boot 项目一般都是将其打包成一个 FatJar&#xff0c;即把所有依赖的第三方 jar 也打包进自身的 app.jar 中&#xff0c;最后以 java -jar app.jar 形式来运行整个项目。 运行时项目的 classpath 包括 app.jar 中的 BOOT-INF/classes 目录和 BO…...

百度APP iOS端磁盘优化实践(上)

01 概览 在APP的开发中&#xff0c;磁盘管理已成为不可忽视的部分。随着功能的复杂化和数据量的快速增长&#xff0c;如何高效管理磁盘空间直接关系到用户体验和APP性能。本文将结合磁盘管理的实践经验&#xff0c;详细介绍iOS沙盒环境下的文件存储规范&#xff0c;探讨业务缓…...

蓝桥杯之c++入门(一)【第一个c++程序】

目录 前言一、第⼀个C程序1.1 基础程序1.2 main函数1.3 字符串1.4 头文件1.5 cin 和 cout 初识1.6 名字空间1.7 注释 二、四道简单习题&#xff08;点击跳转链接&#xff09;练习1&#xff1a;Hello,World!练习2&#xff1a;打印飞机练习3&#xff1a;第⼆个整数练习4&#xff…...

14-6-1C++STL的list

(一&#xff09;list容器的基本概念 list容器简介&#xff1a; 1.list是一个双向链表容器&#xff0c;可高效地进行插入删除元素 2.list不可以随机存取元素&#xff0c;所以不支持at.(pos)函数与[ ]操作符 &#xff08;二&#xff09;list容器头部和尾部的操作 list对象的默…...

【AI论文】Sigma:对查询、键和值进行差分缩放,以实现高效语言模型

摘要&#xff1a;我们推出了Sigma&#xff0c;这是一个专为系统领域设计的高效大型语言模型&#xff0c;其独特之处在于采用了包括DiffQKV注意力机制在内的新型架构&#xff0c;并在我们精心收集的系统领域数据上进行了预训练。DiffQKV注意力机制通过根据查询&#xff08;Q&…...

InceptionV1_V2

目录 不同大小的感受野去提取特征 经典 Inception 网络的设计思路与运行流程 背景任务&#xff1a;图像分类&#xff08;以 CIFAR-10 数据集为例&#xff09; Inception 网络的设计思路 Inception 网络的运行流程 打个比方 多个损失函数的理解 1. 为什么需要多个损失函数&#…...

ORB-SLAM2源码学习:Initializer.cc⑧: Initializer::CheckRT检验三角化结果

前言 ORB-SLAM2源码学习&#xff1a;Initializer.cc⑦: Initializer::Triangulate特征点对的三角化_cv::svd::compute-CSDN博客 经过上面的三角化我们成功得到了三维点&#xff0c;但是经过三角化成功的三维点并不一定是有效的&#xff0c;需要筛选才能作为初始化地图点。 …...

【ArcGIS微课1000例】0141:提取多波段影像中的单个波段

文章目录 一、波段提取函数二、加载单波段导出问题描述:如下图所示,img格式的时序NDVI数据有24个波段。现在需要提取某一个波段,该怎样操作? 一、波段提取函数 首先加载多波段数据。点击【窗口】→【影像分析】。 选择需要处理的多波段影像,点击下方的【添加函数】。 在多…...

【测试人生】变更风险观测的流程逻辑设计

在线上服务变更过程中&#xff0c;我们希望可以通过一套实时观测机制去监测线上服务的风险&#xff0c;从而能够确保线上稳定性&#xff0c;在出问题是可以及时回滚变更。今天这篇文章&#xff0c;就简单讲一下变更风险观测的流程逻辑需要怎么设计。 首先需要明确变更观测的相…...

一文大白话讲清楚webpack基本使用——17——Tree Shaking

文章目录 一文大白话讲清楚webpack基本使用——17——Tree Shaking1. 建议按文章顺序从头看&#xff0c;一看到底&#xff0c;豁然开朗2. 啥叫Tree Shaking3. 什么是死代码&#xff0c;怎么来的3. Tree Shaking的流程3.1 标记3.2 利用Terser摇起来 4. 具体使用方式4.1 适用前提…...

ChatGPT从数据分析到内容写作建议相关的46个提示词分享!

在当今快节奏的学术环境中&#xff0c;研究人员面临着海量的信息和复杂的研究任务。幸运的是&#xff0c;随着人工智能技术的发展&#xff0c;像ChatGPT这样的先进工具为科研人员提供了强大的支持。今天就让我们一起探索如何利用ChatGPT提升研究效率进一步优化研究流程。 ChatG…...