前言

在 Vue 3 项目中集成高德地图(AMap)是一个常见的需求。本文将详细介绍如何在 Vue 3 项目中使用高德地图,包括安装配置、基本使用以及一些进阶功能的实现。

一、环境准备

1.1 vue3项目初始化

步骤 1:初始化项目

npm create vite@latest

步骤 2:按提示选择配置

✔ Project name: … your-project-name  # 输入项目名称
✔ Select a framework: › Vue          # 选择框架
✔ Select a variant: › TypeScript      # 或 JavaScript

步骤 3:进入项目并安装依赖

cd your-project-name
npm install

步骤 4:启动开发服务器

npm run dev

1.2 安装map依赖

npm i @amap/amap-jsapi-loader --save

二、申请高德地图 Key

2.1 登录控制台

登录 高德开放平台控制台,如果没有开发者账号,请 注册开发者。
在这里插入图片描述

2.2 创建 key

进入应用管理,创建新应用,新应用中添加 key,服务平台选择 Web端(JS API)。
在这里插入图片描述

2.3 获取 key 和密钥

创建成功后,可获取 key 和安全密钥。
在这里插入图片描述

三、开发一个地图组件

3.1 新建 MapContainer.vue 文件

在项目中新建 MapContainer.vue 文件,用作地图组件。

3.2 创建地图容器

MapContainer.vue 地图组件中创建 div 标签作为地图容器 ,并设置地图容器的 id 属性为 container

<template><div id="container"></div>
</template>
<style  scoped>#container{padding:0px;margin: 0px;width: 100%;height: 800px;}
</style>

3.3 引入 JS API Loader

在地图组件 MapContainer.vue 中引入 amap-jsapi-loader

import AMapLoader from '@amap/amap-jsapi-loader';

3.4 创建地图实例

<script setup>
import { onMounted, onUnmounted } from "vue";
import AMapLoader from "@amap/amap-jsapi-loader";let map = null;onMounted(() => {window._AMapSecurityConfig = {securityJsCode: "「你申请的安全密钥」",};AMapLoader.load({key: "", // 申请好的Web端开发者Key,首次调用 load 时必填version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15plugins: ["AMap.Scale"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']}).then((AMap) => {map = new AMap.Map("container", {// 设置地图容器idviewMode: "3D", // 是否为3D地图模式zoom: 11, // 初始化地图级别center: [116.397428, 39.90923], // 初始化地图中心点位置});}).catch((e) => {console.log(e);});
});onUnmounted(() => {map?.destroy();
});
</script><template><div id="container"></div>
</template><style scoped>
#container {width: 100%;height: 800px;
}
</style></script>

效果图:
在这里插入图片描述

四、基础使用

4.1 地图控件

  • 比例尺 AMap.Scale
  • 工具条 AMap.ToolBar
  • 方向盘 AMap.ControlBar
  • 鹰眼 AMap.HawkEye

完整代码

<script setup>
import { onMounted, onUnmounted } from "vue";
import AMapLoader from "@amap/amap-jsapi-loader";let map = null;
//图层
let traffic = null;onMounted(() => {window._AMapSecurityConfig = {securityJsCode: "「你申请的安全密钥」",};AMapLoader.load({key: "", // 申请好的Web端开发者Key,首次调用 load 时必填首次调用 load 时必填version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15plugins: ["AMap.Scale", "AMap.ToolBar", "AMap.ControlBar", "AMap.HawkEye"], //需要使用的的插件列表}).then((AMap) => {const layer = new AMap.createDefaultLayer({zooms: [3, 20], //可见级别visible: true, //是否可见opacity: 1, //透明度zIndex: 0, //叠加层级});map = new AMap.Map("container", {// 设置地图容器idviewMode: "2D", // 是否为3D地图模式zoom: 11, // 初始化地图级别center: [116.397428, 39.90923], // 初始化地图中心点位置});traffic = new AMap.TileLayer.Traffic({autoRefresh: true, //是否自动刷新,默认为falseinterval: 180, //刷新间隔,默认180s});map.add(traffic); //通过add方法添加图层console.log(traffic);// 添加比例尺const scale = new AMap.Scale({position: "LB", //左下角});map.addControl(scale);// 添加工具条const toolBar = new AMap.ToolBar({position: {right: "40px",top: "105px",},});map.addControl(toolBar);// 添加方向盘const controlBar = new AMap.ControlBar({position: {right: "10px",top: "10px",},showControlButton: true, //显示倾斜、旋转按钮});map.addControl(controlBar);// 添加鹰眼const hawkEye = new AMap.HawkEye({opened: true, // 默认展开position: "RB", // 右上角width: "200px",height: "150px",});map.addControl(hawkEye);}).catch((e) => {console.log(e);});
});
onUnmounted(() => {map?.destroy();
});
</script><template><div id="container"></div><div class="traffic-btn"><button @click="traffic.show()">显示交通图层</button><button @click="traffic.hide()">隐藏交通图层</button></div>
</template><style>
#container {width: 100%;height: 800px;
}
</style>

在这里插入图片描述

4.2 3D地图

  • viewMode: "3D", //开启3D视图,默认为关闭

完整代码

<script setup>
import { onMounted, onUnmounted } from "vue";
import AMapLoader from "@amap/amap-jsapi-loader";let map = null;onMounted(() => {window._AMapSecurityConfig = {securityJsCode: "「你申请的安全密钥」",};AMapLoader.load({key: "", // 申请好的Web端开发者Key,首次调用 load 时必填version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15plugins: ["AMap.Scale"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']}).then((AMap) => {map = new AMap.Map("container", {// 设置地图容器idpitch: 50, //地图俯仰角度,有效范围 0 度- 83 度viewMode: "3D", //开启3D视图,默认为关闭rotateEnable: true, //是否开启地图旋转交互 鼠标右键 + 鼠标画圈移动 或 键盘Ctrl + 鼠标左键画圈移动pitchEnable: true, //是否开启地图倾斜交互 鼠标右键 + 鼠标上下移动或键盘Ctrl + 鼠标左键上下移动zoom: 13, //初始化地图层级rotation: -15, //初始地图顺时针旋转的角度zooms: [2, 20], //地图显示的缩放级别范围center: [116.333926, 39.997245], //初始地图中心经纬度});}).catch((e) => {console.log(e);});
});
onUnmounted(() => {map?.destroy();
});
</script>

在这里插入图片描述

4.3 添加标记物

1. 创建一个 Marker 实例:
const marker = new AMap.Marker({position: new AMap.LngLat(116.39, 39.9), //经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]title: "北京",
});
//将创建的点标记添加到已有的地图实例:
map.add(marker);
2. 给 Marker 添加事件
//创建点标记的点击事件
marker.on("click", function (e) {alert("你点击了Marker");
});
3. 完整代码
<script setup>
import { onMounted, onUnmounted } from "vue";
import AMapLoader from "@amap/amap-jsapi-loader";let map = null;onMounted(() => {window._AMapSecurityConfig = {securityJsCode: "「你申请的安全密钥」",};AMapLoader.load({key: "", // 申请好的Web端开发者Key,首次调用 load 时必填version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15plugins: ["AMap.Scale"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']}).then((AMap) => {map = new AMap.Map("container", {zoom: 10, //地图级别center: [116.397428, 39.90923], //地图中心点viewMode: "2D", //设置地图模式});//创建一个 Marker 实例:const marker = new AMap.Marker({position: new AMap.LngLat(116.39, 39.9), //经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]title: "北京",});//将创建的点标记添加到已有的地图实例:map.add(marker);marker.on("click", function (e) {alert("你点击了Marker");});}).catch((e) => {console.log(e);});
});
onUnmounted(() => {map?.destroy();
});
</script><template><div id="container"></div>
</template><style>
#container {width: 100%;height: 800px;
}
</style>

在这里插入图片描述

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

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

相关文章

blender mcp安装(完全免费的ai建模)

1.最关键的一步&#xff0c;建议最早执行(就是安装uvx) mac系统执行 brew install uvwindows执行 powershell -c "irm https://astral.sh/uv/install.ps1 | iex" 出现这一步就成功安装uvx了&#xff0c;因为mcp需要使用uvx 2.第二步骤 github地址: https://gith…

GIS开发入门教程与笔记分享

大家好&#xff0c;我是地信小学生&#xff0c;距离5月3日发布暂停更新以来&#xff0c;也一两个月啦&#xff0c;这期间也陆陆续续更新了点内容。 我自己写的笔记主要是以入门笔记为主&#xff0c;真正的内容并不多&#xff0c;包括&#xff1a;GIS基础、PostgreSQLPostGIS入门…

设计模式-代理模式、装饰者模式

代理模式 Proxy&#xff08;代理&#xff09;—对象结构型模式定义&#xff1a;给某一个对象提供一个代理对象&#xff0c;并由代理对象控制原有对象的引用。 代理模式的核心思想是&#xff1a;创建一个代理对象&#xff0c;代理对象在调用目标方法时&#xff0c;可以插入额外…

国产安路FPGA纯verilog视频图像去雾,基于暗通道先验算法实现,提供5套TD工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目国产安路FPGA相关方案推荐本博主已有的图像处理方案 3、设计思路框架工程设计原理框图输入Sensor之-->GC0308摄像头输入Sensor之-->OV7725摄像头输入Sensor之--…

Windows商店中的简笔画学习应用

此应用包含动物、植物、人物、交通工具、卡通等类别超过1500张线条图片&#xff0c;支持图片临摹和图片填色&#xff0c;可以将绘图和填色结果保存成文件&#xff0c;也可以打开本地图片进行临摹和填色。 菜单说明 右侧绘图区上方菜单功能包括&#xff1a;打开文件&#xff1…

树莓派4B --ubundu20.04 机载电脑配置WIFI热点

不要用刷机过程配置WIFI账号&#xff0c;因为在那里配置的WIFI都是不受控的&#xff0c;会出很多问题。 1.安装网络 sudo apt-get install network-manager 2.将源码CLONE到本地 sudo git clone https://github.com/oblique/create_ap cd create_ap sudo make install 当你…

​​JETSON NANO B01​ 在AIOT 的领域的作用

低功耗边缘设备的理想选择 &#x1f449; ​​适合人群​​&#xff1a;精打细算、小厂搞智能监控的 ​​Jetson Nano B01​​&#xff08;4GB内存/0.47TOPS算力&#xff09;&#xff0c;JetBot (NVIDIA社区版) 机器人/自动驾驶项目​ ​​硬件​​&#xff1a;Jetson Nano B0…

Kioptrix Level2

靶机截图 收集信息 主机发现 打开靶机后&#xff0c;用kali探测靶机的 IP arp-scan-l 可以用nmap进行同网段扫描探测存活ip nmap -sP 10.4.7.0/24 端口扫描 命令过程 nmap -sT -sV -p- -O 10.4.7.220 -sT&#xff1a;TCP连接扫描 -sV&#xff1a;服务版本探测 -p-&#x…

Word之电子章制作——1

第一步&#xff1a;在插入 ——形状哪里选择一个圆形&#xff0c;并且下一步按住shift键拉出一个正圆形。 第二步&#xff1a;鼠标右键去掉背景颜色&#xff0c;边框粗细设置成3磅。 第三步&#xff1a;在插入导航窗找到艺术字&#xff0c;点击大写的A&#xff0c;输入公司名字…

LeetCode 2799.统计完全子数组的数目

给你一个由 正 整数组成的数组 nums 。 如果数组中的某个子数组满足下述条件&#xff0c;则称之为 完全子数组 &#xff1a; 子数组中 不同 元素的数目等于整个数组不同元素的数目。 返回数组中 完全子数组 的数目。 子数组 是数组中的一个连续非空序列。 示例 1&#xff1…

33.表复制和去重

1.表结构的复制(LIKE) 当我们想复制一个表的时候&#xff0c;首先需要创建一个与被复制表相同结构的表。这时候就要用到关键字like&#xff1a; 语法使用&#xff1a; create table table_name LIKE temp_table 示例&#xff1a;复制一个和表emp&#xff08;老朋友了&#…

GitLab 18.1 正式发布Maven 虚拟仓库、密码泄露检测等功能,可升级体验!

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

蓝牙网络拓扑面试通关:微微网与散射网原理 + 真题解析

为什么面试官总爱问蓝牙拓扑? 你可能有过这样的经历:面试嵌入式 / 物联网 / 无线通信岗位时,面试官突然问:“蓝牙的微微网和散射网有什么区别?” 别慌!这不是在考你背定义,而是考察你对无线通信核心逻辑的理解 ——如何用有限资源实现高效组网。 蓝牙作为短距离无线通信…

[Python]-基础篇1- 从零开始的Python入门指南

无论你是尚未接触编程的新手,还是想从其他语言转向Python的开发者,这篇文章都是你的入门课。 一、Python是什么? Python是一种解释型、高级、通用型编程语言,以简洁明了、简单易用着称。它可以应用于网站开发、自动化脚本、数据分析、人工智能、系统操作等多种场景。 二、…

Objective-C面向对象编程:类、对象、方法详解(保姆级教程)

目录 一、核心概念 二、类的定义&#xff08;分.h和.m文件&#xff09; 1. 头文件&#xff08;.h&#xff09;—— 公开声明 2. 实现文件&#xff08;.m&#xff09;—— 具体实现 3. 属性特性解析 原子性 所有权语义(ARC环境下) 读写控制 三、对象创建与内存管理 1…

CentOS 7 编译ClickHouse 24.8完整指南

前言 在CentOS 7上编译ClickHouse 24.8可能会遇到一些挑战&#xff0c;主要是因为CentOS 7的默认软件版本较旧。本文将详细介绍从零开始构建ClickHouse 24.8的完整过程&#xff0c;包括依赖安装和环境配置。 准备工作 首先确保系统已更新到最新版本&#xff1a; yum update…

Protocol Buffers (Protobuf) 全面解析

一、核心概念解析 1. 什么是数据序列化&#xff1f; #mermaid-svg-HZKw9iRlpQIRFiO3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HZKw9iRlpQIRFiO3 .error-icon{fill:#552222;}#mermaid-svg-HZKw9iRlpQIRFiO3 .…

高斯混合模型GMMK均值(十三-1)——K均值是高斯混合模型的特例

EM算法与K均值算法的关系 K均值可以看成是高斯混合模型的特例。 对K均值算法与EM算法进行比较后&#xff0c;可以发现它们之间有很大的相似性。K均值算法将数据点硬&#xff08;hard&#xff09;分配到聚类中&#xff0c;每个数据点唯一地与一个聚类相关联&#xff0c;而EM算法…

StarRocks 向量索引如何让大模型“记性更好”?

随着 ChatGPT、DeepSeek 等大语言模型的普及&#xff0c;我们已经能够与 AI 进行流畅的对话。然而&#xff0c;即使是最先进的大模型也面临着“记忆困境”&#xff0c;具体表现模型只能记住训练时接触的知识&#xff0c;且这些知识在使用时很可能会过期。实际应用或在处理特定领…

UniApp Vue3 模式下实现页面跳转的全面指南

1. 引言 1.1 UniApp 与 Vue3 的结合优势 UniApp 是一个使用 Vue.js 开发所有前端应用的框架,支持编译到 iOS、Android、H5、以及各种小程序平台。Vue3 提供了更高效的响应式系统和 Composition API,使开发体验更加现代化和灵活。 1.2 页面跳转在应用开发中的重要性 页面跳…