11.在 Vue 3 中使用OpenLayers加载引用 MapTiler 地图(多种形式)

前言

在前端地理信息系统开发中,地图服务是不可或缺的一部分。如今,MapTiler 提供了强大的地图服务,我们可以在 Vue 3 中轻松集成和加载多种样式的地图。在这篇文章中,我将以 Vue 3 Composition APIOpenLayers 为例,演示如何在 Vue 3 项目中加载 MapTiler 地图。


什么是 MapTiler?

MapTiler 是一个专业的地图服务提供商,支持高性能的在线地图托管以及离线地图部署。通过它的 API,我们可以快速加载不同样式的地图,还支持在地图上叠加自定义数据。

MapTiler 的特点

  1. 多样的地图样式
    MapTiler 提供多种内置地图样式,例如:

    • Streets:街道地图,适合展示地理基础信息。
    • Toner:高对比度黑白地图,适用于设计需要。
    • Winter:冬季主题地图。
    • Topographique:地形图,展示地貌特征。
  2. 离线支持
    MapTiler 提供离线部署工具,可应用于没有网络的场景,如移动设备或局域网。

  3. 开箱即用的 API
    MapTiler 的 REST API 和 SDK 能够快速集成到各种开发框架中,包括 Vue、React、Angular 等。

  4. 兼容性
    支持标准的地图数据格式(如 GeoJSON 和 MBTiles),并能与 OpenLayers、Leaflet 等主流地图库完美结合。

适用场景

  • 地图可视化展示(比如实时交通、人口分布等)
  • 旅游、导航相关应用开发
  • 地理信息系统(GIS)
  • 数据叠加和可视化分析

通过 MapTiler,我们可以专注于应用开发,而不必担心底层的地图渲染细节。

项目环境和准备

1. 安装依赖

确保项目已经初始化了 Vue 3。如果还未安装,可以通过以下步骤操作:

npm init vue@latest

安装 OpenLayers

npm install ol

安装 UI 框架(可选,本例中使用 Element Plus):

npm install element-plus

2. 获取 MapTiler API 密钥

要访问 MapTiler 的地图服务,您需要一个 API 密钥。可以前往 MapTiler 官网 注册账号并获取密钥。


实现步骤

1. MapTilerMap 组件代码

以下是完整的 MapTilerMap.vue 代码,使用 Vue 3 Composition API 编写:

<!--* @Author: 彭麒* @Date: 2024/12/6* @Email: 1062470959@qq.com* @Description: 此源码版权归吉檀迦俐所有,可供学习和借鉴或商用。-->
<template><button class="back-button" @click="goBack">返回</button><div class="container"><div class="w-full flex justify-center flex-wrap"><div class="font-bold text-[24px]">在Vue3中使用OpenLayers加载引用maptiler地图(多种形式)</div></div><h4 class="my-5 ml-[10px]"><el-button type="warning" size="small" @click="maptiler('streets')">Streets</el-button><el-button type="warning" size="small" @click="maptiler('toner')">Toner</el-button><el-button type="warning" size="small" @click="maptiler('winter')">Winter</el-button><el-button type="warning" size="small" @click="maptiler('topographique')">Topographique</el-button></h4><div id="vue-openlayers"></div></div>
</template><script setup>
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';
const map = ref(null);
import router from '@/router';const goBack = () => {router.push('/OpenLayers');
};
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: url,tileSize: 512,crossOrigin: 'anonymous',});const maptilerMap = new Tile({source: 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,}),});
};onMounted(() => {initMap();maptiler('streets');
});</script><style scoped>
.container {width: 840px;height: 590px;margin: 50px auto;border: 1px solid #42B983;
}#vue-openlayers {width: 800px;height: 420px;margin: 0 auto;border: 1px solid #42B983;position: relative;
}
</style>

代码说明

  1. initMap 函数
    初始化地图,设置地图的容器、视图(中心点和缩放级别),以及图层。

  2. maptiler 函数
    根据传入的样式参数(如 streetstoner 等),从 MapTiler API 加载相应的地图样式。

  3. 响应式引用
    使用 Vue 3 的 ref 来管理地图对象,使其具有响应式特性。

  4. 生命周期钩子
    在组件挂载完成后(onMounted),初始化地图并加载默认的地图样式。


运行效果

运行项目后,可以看到一个地图组件,点击按钮即可切换地图样式。例如:

  • Streets:街道地图
  • Toner:黑白高对比度地图
  • Winter:冬季主题地图
  • Topographique:地形图

总结

通过 Vue 3 和 OpenLayers,我们可以非常方便地集成 MapTiler 地图服务,并支持样式切换。在实际开发中,您可以根据需求进一步扩展功能,如添加图层、标记、交互功能等。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

26.删除有序数组中的重复项 python

删除有序数组中的重复项 题目题目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;题目链接 题解解题思路python实现代码解释提交结果 题目 题目描述 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现…

R语言 | 峰峦图 / 山脊图

目的&#xff1a;为展示不同数据分布的差异。 1. ggplot2 实现 # 准备数据 datmtcars[, c("mpg", "cyl")] colnames(dat)c("value", "type") head(dat) # value type #Mazda RX4 21.0 6 #Mazda RX4 Wag …

四川创新志成健康管理有限公司

四川创新志成健康管理有限公司 成都市青羊区广富路168号 公司简介 四川创新志成健康管理有限公司成立于2021年&#xff0c;公司专注体外诊断领域&#xff0c;致力为医学实验室、生产厂家、 经销商提供专业的学术、技术增值服务&#xff0c;涵盖免疫、生化、输血等检测领域&a…

系统级 I/O

Unix I/O **了解 Unix I/O 将帮助你理解其他的系统概念。**I/O 是系统操作不可或缺的一部分。我们经常遇到 I/O 和其他系统概念之间的循环依赖。例如&#xff0c;I/O 在进程的创建和执行中扮演着关键的角色。反过来&#xff0c;进程创建又在不同进程间的文件共享中扮演着关键角…

Elasticsearch:使用阿里 infererence API 及 semantic text 进行向量搜索

在之前的文章 “Elasticsearch 开放推理 API 新增阿里云 AI 搜索支持”&#xff0c;它详细描述了如何使用 Elastic inference API 来针对阿里的密集向量模型&#xff0c;稀疏向量模型&#xff0c; 重新排名及 completion 进行展示。在那篇文章里&#xff0c;它使用了很多的英文…

基于公网的无线全双工内部通话系统在演出行业可以用吗?

文旅名城再出发&#xff0c;更待“烟花”绽繁花 2024年4月将开业的扬州首个大型沉浸式剧场-《运河密城》 以运河为原点 追随河的记忆 从春秋时代的吴王夫差 到贯通南北的大运河成形 穿梭时空 探索扬州的前世今生 「运河第一锹」古运河旁 有一处新地标正在悄然兴起 如…

POSTGRESQL跟ORACLE语法区别和相同之处

跟ORACLE语法区别之处 1. Update和delete语法区别 Pg 和MySQL Update和delete的时候表名不能加别名 2. 插入数字类型不一样 ORACLE 对number类型的数据可以用’’ 字符串标记插入&#xff0c;但是PG不行&#xff0c;必须要进行正确的数据类型 3. SEQ使用不同 ORACEL的SEQ…

C++编程物联网:舵机VS步进电机

舵机和步进电机都是常见的电机类型,它们在自动化和机器人控制中有着不同的应用场景。两者的主要区别在于控制方式、运动精度、适用范围等方面。下面详细介绍它们的作用、应用场景和主要区别。 1. 舵机(Servo Motor) 工作原理 舵机是一种具有反馈控制的电动机,通常由电动…

鸿翼参与撰写档案数据管理与长期保存策略基于数字中国战略的研究

​编者按&#xff1a;近日&#xff0c;由中国财富出版社有限公司出版的《档案数据管理与长期保存策略——基于数字中国战略的研究》正式发行&#xff0c;上海鸿翼软件技术股份有限公司董事长兼CEO龙凌云作为核心作者参与主要编写工作。 本书是在国家档案局立项科研项目“数字档…

机器学习中的图匹配问题—基础学习

机器学习中的图匹配问题 结合导师所给的方向&#xff0c;能否将实例之间的点匹配问题转换为点到实例之间的匹配问题来进行求解呢&#xff1f;这里结合师姐推荐的讲座首先对图匹配的这个方向来进行简单的了解和接触。 图匹配问题概述 图匹配就是&#xff1a;不仅考虑点之间的配…

2024.11.29——[HCTF 2018]WarmUp 1

拿到题&#xff0c;发现是一张图&#xff0c;查看源代码发现了被注释掉的提示 <!-- source.php--> step 1 在url传参看看这个文件&#xff0c;发现了这道题的源码 step 2 开始审计代码&#xff0c;分析关键函数 //mb_strpos($haystack,$needle,$offset,$encoding):int|…

gRPC 快速入门 — SpringBoot 实现(1)

目录 一、什么是 RPC 框架 &#xff1f; 二、什么是 gRPC 框架 &#xff1f; 三、传统 RPC 与 gRPC 对比 四、gRPC 的优势和适用场景 五、gRPC 在分布式系统中应用场景 六、什么是 Protocol Buffers&#xff08;ProtoBuf&#xff09;&#xff1f; 特点 使用场景 简单的…

工具篇--GitHub Desktop 使用

文章目录 前言一、GitHub Desktop 的使用&#xff1a;1.1 通过官网下载GitHub Desktop和安装&#xff1a;1.2 安装和使用&#xff1a;1.2.1 填充自己的标识&#xff1a;1.2.3 克隆项目&#xff1a;1.2.4 git 常用忽略项配置&#xff1a; 二、代码的更新和提交&#xff1a;2.1 代…

MySQL事物隔离级别详细解释

目录 事务隔离级别总结 实际情况演示 脏读(读未提交) 避免脏读(读已提交) 不可重复读 可重复读 幻读 解决幻读的方法 事务隔离级别总结 SQL 标准定义了四个隔离级别&#xff1a; READ-UNCOMMITTED(读取未提交) &#xff1a;最低的隔离级别&#xff0c;允许读取尚未提…

[每周一更]-(第126期):MQ解耦场景

消息队列&#xff08;MQ&#xff09;解耦是一种软件架构设计模式&#xff0c;主要通过中间件将系统中的生产者和消费者模块分离&#xff0c;减少模块之间的直接依赖&#xff0c;使系统具有更高的扩展性和灵活性。这种模式尤其适用于需要处理复杂业务逻辑、频繁请求或异步处理的…

Redis的高可用之哨兵模式

Redis哨兵主要是解决Redis主从同步时主数据库宕机问题,使其能够自动进行故障恢复&#xff0c;提高Redis系统的高可用性。 1. 哨兵的作用&#xff1a; 监控&#xff1a;哨兵通过心跳机制监控主库和从库的存活性。 选主&#xff1a;当主库宕机时&#xff0c;哨兵会选举出一个领…

知识分享|一文了解实时荧光定量PCR(qPCR)技术的原理与分类

实时荧光定量PCR技术(Realtime quantitative PCR&#xff0c;qPCR)是在PCR反应体系中添加荧光报告基团和荧光淬灭基团&#xff0c;通过荧光信号来实现对核酸分子的定量检测过程在反应过程中&#xff0c;PCR产物随着扩增反应的进行不断生成&#xff0c;荧光信号不断增加&#xf…

【MySQL】环境变量配置

环境变量英文名SystemRoot&#xff0c;直译为“系统总&#xff08;根&#xff09;目录"&#xff0c;主要指明操作系统的重要目录在哪里。那么配置MySQL的环境变量&#xff0c;就是在程序运行时&#xff0c;告诉操作系统你的MySQL目录位置。 复制MySQL安装目录&#xff1a;…

高级 CEF 内核集成与 VC++——开发环境搭建与配置

开发环境的搭建是 CEF 浏览器开发中至关重要的一步。正确配置开发环境不仅能提高开发效率&#xff0c;也能确保开发过程中的稳定性与可靠性。本文将结合最新的资料和技术方案&#xff0c;深入讲解如何搭建 CEF 编译与配置环境&#xff0c;正确配置 Windows SDK 与依赖库&#x…

【React】组件通讯有哪几种方式?

文章目录 一、父子组件通讯二、兄弟组件通讯3、context 跨级组件通讯 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、父子组件通讯 父组件 ----> 子组件&#xff1a; props 父组件提供要传递的 state 数据 给子组件标签添加属性&#xff0c;值…