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

基于vite+vue3+mapbox-gl从零搭建一个项目

下面是基于 ViteVue 3Mapbox GL 从零搭建一个项目的完整步骤,包括环境搭建、依赖安装、配置和代码示例。


1. 初始化项目

首先,使用 Vite 快速创建一个 Vue 3 项目:

npm create vue@latest vue3-mapboxgl --template vue
cd vue3-mapboxgl
npm install

在这里插入图片描述

项目目录结构将类似于以下内容:

vue3-mapboxgl/
├── public/
├── src/
│   ├── assets/
│   ├── components/
│   ├── router/
│   ├── stores/
│   ├── views/
│   ├── App.vue
│   ├── main.js
├── index.html
├── package.json
├── tsconfig.json
└── vite.config.js

2. 安装 mapbox-gl 依赖

安装 Mapbox GL JS 及其类型定义(可选):

npm install mapbox-gl

3. 配置 Mapbox Access Token

Mapbox 需要 Access Token。请前往 Mapbox官网 注册并获取一个 Token。

src 目录下创建一个 .env 文件(注意:此文件不要上传到版本控制,添加到 .gitignore):

VITE_MAPBOX_TOKEN=你的_access_token

4. 实现地图组件

创建 src/components/MapView.vue 文件,并编写地图组件代码:

<template><div ref="mapContainer" id="map-container"></div>
</template><script lang="ts" setup>
import { onMounted, onBeforeUnmount, ref } from 'vue';
import mapboxgl from "mapbox-gl";
import "mapbox-gl/dist/mapbox-gl.css";const mapContainer = ref(null);
let map;onMounted(() => {// 设置 Mapbox Access Token 令牌 mapboxgl.accessToken = import.meta.env.VITE_APP_MAP_TOKEN;console.log(mapboxgl.accessToken);// 创建 Map 实例console.log(mapContainer.value);map = new mapboxgl.Map({container: mapContainer.value, // 绑定的 DOM 容器style: "mapbox://styles/mapbox/streets-v11", // 地图样式center: [120.1551, 30.2741], // 初始中心点经纬度(杭州)zoom: 10, // 初始缩放级别});// 添加缩放和方向控制map.addControl(new mapboxgl.NavigationControl());
});onBeforeUnmount(() => {// 销毁地图实例if (map) map.remove();
});
</script><style>
#map-container {width: 100%;height: 100vh;
}
</style>

5. 在 App.vue 中使用地图组件

修改 src/App.vue 文件:

<template><MapView />
</template><script lang="ts" setup>
import MapView from './components/MapView.vue';</script><style></style>

6. 启动开发服务器

运行以下命令启动项目:

npm run dev

打开浏览器访问 http://localhost:5173,你应该可以看到 Mapbox 地图。
在这里插入图片描述


7. 添加自定义功能(可选)

1) 添加标记点

MapView.vuemounted 方法中加入以下代码:

const marker = new mapboxgl.Marker().setLngLat([120.1551, 30.2741]) // 设置标记点位置.addTo(this.map); // 添加到地图

2) 响应用户交互

添加点击事件监听:

this.map.on('click', (e) => {const { lng, lat } = e.lngLat;alert(`你点击了坐标: ${lng}, ${lat}`);
});

3) 加载自定义图层

示例:加载 GeoJSON 数据:

this.map.on('load', () => {this.map.addSource('my-data', {type: 'geojson',data: {type: 'FeatureCollection',features: [{type: 'Feature',geometry: { type: 'Point', coordinates: [120.1551, 30.2741] },properties: { title: '杭州' },},],},});this.map.addLayer({id: 'my-data-layer',type: 'circle',source: 'my-data',paint: {'circle-radius': 10,'circle-color': '#007cbf',},});
});

8. 部署项目

将项目打包后部署到服务器:

npm run build

将生成的 dist 文件夹内容上传到服务器。


如果需要更复杂的功能或定制,可以继续扩展组件逻辑,比如结合 Vuex 或 Pinia 管理地图状态,或通过 Mapbox 的 API 添加更多交互。

http://www.lryc.cn/news/521799.html

相关文章:

  • 向harbor中上传镜像(向harbor上传image)
  • 【线性代数】行列式的性质
  • 智能家居企业如何通过设计师渠道打造第二曲线?
  • Unity3d 实时天气系统基于UniStorm插件和xx天气API实现(含源码)
  • 年后找工作需要注意的事项
  • 模拟器多开窗口单IP与代理IP关系
  • Android ScrollView嵌套X5WebView大片空白问题
  • Java Web开发进阶——WebSocket与实时通信
  • zerotier搭建虚拟局域网,自建planet
  • SQL面试题1:连续登陆问题
  • 2Spark Core
  • linux之进程信号(初识信号,信号的产生)
  • 基于nginx实现正向代理(linux版本)
  • 【蓝牙】win11 笔记本电脑连接 hc-06
  • 小程序组件 —— 31 事件系统 - 事件绑定和事件对象
  • 力扣cf补题-1【算法学习day.94】
  • 系统学习算法:专题四 前缀和
  • java 迪米特法则,原理、思想、工作流程、实现细节、稳定性、优缺点、应用场景等
  • vue项目引入阿里云svg资源图标
  • 存储过程和触发器
  • 《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二)
  • 【深度学习实战】kaggle 自动驾驶的假场景分类
  • Spring Boot 和微服务:快速入门指南
  • qt QPainter setViewport setWindow viewport window
  • 网络安全面试题汇总(个人经验)
  • 【网络云SRE运维开发】2025第3周-每日【2025/01/14】小测-【第13章ospf路由协议】理论和实操
  • FreeType 介绍及 C# 示例
  • 金融项目实战 04|JMeter实现自动化脚本接口测试及持续集成
  • Linux网络知识——路由表
  • 浅谈云计算14 | 云存储技术