Vue3項目引入高德地圖【超詳細教程】

前言

在 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 頁面跳轉在應用開發中的重要性 頁面跳…