Vue3引入高德地图js API 2.0


前言

本文主要由地图加载、POI检索、绘制点标记、信息窗体、信息窗体中链接的路由跳转、相关事件的使用几部分组成。
目前网上关于高德js API的文章大多数是vue2.0版本的,这篇文章是基于vue3.0的,我的写法不一定是主流写法,如果有更好的写法,请评论中指正,感谢🙏🙏🙏


一、地图加载

1.本文准备环境

2.引入库

代码如下(示例):

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

3.加载地图

<!-- 创建地图容器,js api会根据id将地图加载到容器中 -->
<!-- 注意:需要设置地图容器的大小 -->
<template>
  <div id="container"></div>
</template>
<component :is="'script'" type="text/javascript">
	<!-- 使用明文设置安全密钥(不安全),https://lbs.amap.com/api/javascript-api-v2/guide/abc/jscode  -->
    window._AMapSecurityConfig = {securityJsCode: '准备环境阶段拿到的的安全密钥'}
</component>

<!-- 本文中使用script-setup,非setup需要自行替换写法 -->
<script lang="ts" setup>
	// 引入jsApi 地图Loader
	import AMapLoader from '@amap/amap-jsapi-loader';
	
	let map = null;
	onMounted(() => {
     
     
	  AMapLoader.load({
     
     
	    key: "", // 申请好的Web端开发者Key,首次调用 load 时必填
	    version: "2.0", // 指定要加载的 JSAPI 的版本
        plugins: ["AMap.Scale", "AMap.ToolBar"], //(按需引用,pc端建议加入AMap.ToolBar,便于操作)需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']
  	  })
    .then((AMap) => {
     
     
      // 加载地图到id为container的容器中
      map = new AMap.Map("container", {
     
     
        viewMode: "2D", // 设置地图视图类型,2D / 3D
        zoom: 11, // 初始化地图级别
        center: [116.397428, 39.90923], // 初始化地图中心点位置
      });
    })
    .catch((e) => {
     
     
      console.log(e);
    });
});

onUnmounted(() => {
     
     
  map?.destroy();
});
</script>

<style  scoped>
	// 设置地图容器的大小
    #container{
     
     
        padding:0px;
        margin: 0px;
        width: 100%;
        height: 800px;
    }
</style>

4.加载地图控件

<!-- 本文中使用script-setup,非setup需要自行替换写法 -->
<script lang="ts" setup>
	// ··· 相关代码已省略
	let map = null;
	onMounted(() => {
     
     
	  AMapLoader.load({
     
     
	    key: "", 
	    version: "2.0",
        plugins: ["AMap.Scale", "AMap.ToolBar"], //(按需引用,pc端建议加入AMap.ToolBar,便于操作)需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']
  	  })
	    .then((AMap) => {
     
     
	      // 加载地图到id为container的容器中
	      map = new AMap.Map("container", {
     
     
	        viewMode: "2D", // 设置地图视图类型,2D / 3D
	        zoom: 11, // 初始化地图级别
	        center: [116.397428, 39.90923], // 初始化地图中心点位置
	      });
	
		  // 地图加载后,可以加载地图控件。
		  // 如:创建工具条插件实例。需要在AMapLoader.plugins中引入控件,并map.addControl添加到地图中
	      var toolbar = new AMap.ToolBar();
	      map.addControl(toolbar);
	    })
	    .catch((e) => {
     
     
	      console.log(e);
	    });
	});
	
	onUnmounted(() => {
     
     
	  // 页面关闭后及时销毁资源
	  map?.destroy();
	});
</script>


二、POI搜索

1.什么是poi搜索

poi检索是高德的地理信息查询服务,即通过关键字获取目标地理信息(如坐标,城市信息等)。其中包含输入提示插件AMap.AutoComplete和POI 搜索插件 AMap.PlaceSearch,如图显示,右上角通过JAC获取多个地点提示信息即输入提示插件,选择匹配信息后,POI 搜索插件会返回多个相关的地理信息,并在地图上添加标记点。
在这里插入图片描述

2.如何使用

<template>
  <div id="container"></div>
  <div 
<think>好的,我现在需要帮助用户在Vue3项目中集成高德地图。首先,我得回顾一下用户提供的引用内容,特别是引用[3]和[4],因为这两个引用提到了Vue3高德地图的结合。用户的问题是如何在Vue3引入和配置高德地图API,所以我的回答需要分步骤说明。 首先,引用[3]提到在Vue3中使用高德地图JS API 2.0,需要引入高德的JavaScript库,并且提到了通过index.html添加script标签的方式。而引用[4]则讨论了在Vue CLI 3中使用vue-amap插件,但可能这个插件是否支持Vue3需要确认,因为Vue3Vue2插件兼容性可能不同。 接下来,我应该考虑两种方法:一种是原生引入,即直接在index.html中添加script标签,然后在Vue组件中初始化地图;另一种是使用Vue3插件或库,比如vue-amap是否支持Vue3,或者是否有其他替代方案。根据引用[3]的内容,用户可能更倾向于原生API的使用,因为该引用详细描述了Vue3中的实现步骤。 然后,我需要检查每个步骤的正确性。例如,在原生方法中,用户需要注册高德开发者账号获取API key,然后在index.html中引入脚本,接着在Vue组件中创建地图容器,并在onMounted生命周期钩子中初始化地图。这需要确保DOM已经加载完成,所以使用onMounted是正确的。 另外,如果使用vue-amap插件,引用[4]中的代码是针对Vue CLI 3的,但Vue3插件初始化方式可能不同。需要确认vue-amap是否支持Vue3,或者是否有更新的版本。如果vue-amap不支持,可能需要寻找其他库,或者继续使用原生方法。 可能的问题点包括:API key的替换、安全密钥的配置(如果需要)、插件的兼容性,以及地图初始化时的配置项是否正确。例如,在高德地图的初始化中,需要指定容器ID、缩放级别、中心坐标等参数。 然后,我需要确保示例代码的正确性。例如,在原生方法中,使用Vue3的setup语法和onMounted钩子,正确引用地图容器的DOM元素。如果使用组合式API,可能需要使用ref来获取DOM元素。此外,需要注意高德地图的加载是异步的,可能需要使用回调函数或动态导入来确保API加载完成后再初始化地图。 最后,生成相关问题,需要考虑用户可能的后续疑问,比如如何在Vue3中使用地图组件、处理事件、添加标记等,以及如何处理路由跳转或与后端交互的问题。</think>### 分步指南:Vue3 引入高德地图 API #### 方法一:原生 JavaScript API 引入(推荐) 1. **注册高德开发者账号并获取 Key** 前往[高德开放平台](https://lbs.amap.com/),创建应用并获取 Web 端 API Key 和安全密钥(JSAPI 需启用安全密钥)[^3]。 2. **在 `index.html` 中引入 SDK** 修改项目根目录的 `index.html`,在 `<head>` 标签内添加: ```html <script src="https://webapi.amap.com/maps?v=2.0&key=你的API_KEY"></script> ``` 3. **创建地图组件** 新建 `MapComponent.vue`,通过 `onMounted` 初始化地图: ```vue <template> <div id="map-container" style="width: 600px; height: 400px"></div> </template> <script setup> import { onMounted } from &#39;vue&#39;; onMounted(() => { const map = new AMap.Map(&#39;map-container&#39;, { zoom: 12, center: [116.397428, 39.90923] // 北京市中心坐标 }); // 添加标记 new AMap.Marker({ position: [116.397428, 39.90923], map: map }); }); </script> ``` #### 方法二:通过 `@amap/amap-jsapi-loader` 插件 1. **安装依赖** ```bash npm install @amap/amap-jsapi-loader ``` 2. **组件中动态加载地图** ```vue <script setup> import { ref, onMounted } from &#39;vue&#39;; import AMapLoader from &#39;@amap/amap-jsapi-loader&#39;; const map = ref(null); onMounted(async () => { AMapLoader.load({ key: &#39;你的API_KEY&#39;, version: &#39;2.0&#39; }).then((AMap) => { map.value = new AMap.Map(&#39;map-container&#39;, { zoom: 12, center: [116.397428, 39.90923] }); }); }); </script> ``` #### 关键配置注意事项 - **安全密钥**:若启用,需在 SDK 引入时添加 `&plugin=AMap.Security` 并配置 `securityJsCode` ```html <script src="https://webapi.amap.com/maps?v=2.0&key=YOUR_KEY&plugin=AMap.Security"></script> ``` - **TypeScript 支持**:安装类型声明包 ```bash npm install @types/amap-js-api ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值