【vue3引入高德地图】

2023-11-15

vue3引入高德地图


前言

	vue3项目中添加高德地图,后端人写前端的踩坑之旅,记录下来避免再次踩坑。

一、准备工作

1.开发文档

开发文档

2.添加应用

注册账号 - 认证 - 控制台 - 应用 -我的应用 -添加 key

应用
创建完应用点击添加key
添加key
web网页 选择 web端(js api)key名称随便写 域名白名单根据自己需求选择添加 最后勾选同意
在这里插入图片描述
注意:选 web端 才能生成安全密钥 调用api需要用到
在这里插入图片描述

二、使用步骤

1.npm 安装

代码如下:

npm i @amap/amap-jsapi-loader --save
npm install coordtransform  --涉及到坐标转换不想自己写的可以安装这个 

2.地图容器创建

地图组件中创建 < div> 标签作为地图容器

<template>
    <div class="home_div">
        <div id="container" style="height: 50vh; width: 100%"></div>
    </div>
</template>

<style scope>
    .home_div{
        height: 100%;
        width: 100%;
        padding: 0px;
        margin: 0px;
        position: relative;
    }
</style>
	

3.组件引入

import AMapLoader from "@amap/amap-jsapi-loader"
import { reactive, ref, toRefs, onMounted, nextTick, defineProps } from 'vue';
import { shallowRef } from '@vue/reactivity'

4.js api 安全密钥

JS API 安全密钥以明文方式设置,不建议在生产环境使用(不安全)

<script setup>

window._AMapSecurityConfig = {
  securityJsCode: '此处填应用生成的秘钥', 
}
</script>

JS API 安全密钥通过代理服务器转发,强烈建议使用(安全)

server {
  listen       80;             #nginx端口设置,可按实际端口修改
  server_name  127.0.0.1;      #nginx server_name 对应进行配置,可按实际添加或修改

  # 自定义地图服务代理
  location /_AMapService/v4/map/styles {
    set $args "$args&jscode=您的安全密钥";
    proxy_pass https://webapi.amap.com/v4/map/styles;
  }
  # 海外地图服务代理
  location /_AMapService/v3/vectormap {
    set $args "$args&jscode=您的安全密钥";
    proxy_pass https://fmap01.amap.com/v3/vectormap;
  }
  # Web服务API 代理
  location /_AMapService/ {
    set $args "$args&jscode=您的安全密钥";
    proxy_pass https://restapi.amap.com/;
  }
}

5.初始化地图

var map = new AMap.Map('container', {
            viewMode: "3D",  //  是否为3D地图模式
            zoom: 10, //  地图显示的缩放级别
            zooms:[2,22], // 地图缩放范围
            center: arr, //  地图中心点坐标
		    layers: [new AMap.TileLayer.Satellite()],  //设置图层,可设置成包含一个或多个图层的数组
		    mapStyle: 'amap://styles/whitesmoke',  //设置地图的显示样式
            resizeEnable: true  //  是否监控地图容器尺寸变化
});

也可以使用 map.setMapStyle('amap://styles/whitesmoke') 来动态的设置地图样式。

6. 图层

地图在初始化的时候,如果你没有配置layers属性,JS API会默认添加一个标准图层,标准图层的配置为:

const layer = new AMap.createDefaultLayer({ // 提示:参数值并不是API默认使用的值
  zooms:[3,20],    //可见级别
  visible:true,    //是否可见
  opacity:1,       //透明度
  zIndex:0         //叠加层级
})
如果你想更改默认配置,你可以在初始化地图的时候传入你创建的 createDefaultLayer。
const map = new AMap.Map('container',{
  ...otherOptions, // 其他配置
  layers:[layer]   // layer为你通过 new AMap.createDefaultLayer() 创建的默认图层
});

6.1 添加 / 设置 / 获取 / 移除图层

6.1.1 添加图层

地图上可使用add()方法添加各类型的图层,如高德官方的卫星、路网图层,第三方或是自定义图层等。

// 构造官方卫星、路网图层
var layer1 = new AMap.TileLayer.Satellite();
var layer2 =  new AMap.TileLayer.RoadNet();
var layers = [
    layer1,
    layer2
]
// 添加到地图上
map.add(layers);

6.1.2 设置图层

可以使用setLayers()方法设置图层,使用该方法后,地图图层会被重置。

// 构造官方卫星、路网图层
var layers =  [
    new AMap.TileLayer.Satellite(),
    new AMap.TileLayer.RoadNet()
]
// 地图上设置图层
map.setLayers(layers);

6.1.3 获取图层

可以通过getLayers()方法获取地图图层数据

// 获取地图图层数据
map.getLayers();

6.1.4 移除图层

通过remove()方法移除地图图层

// 移除一个图层
map.remove(layer1);

7. 点标记

点标记适用于用户需要在地图上创建一个标记的场景。Marker 类型推荐在数据量为 500 以内时使用。若数据量大于 500 ,推荐使用 LabelMarker,可以获得更好的性能。另外需要地图标注可以避让用户标注时,也推荐使用 LabelMarker。

var marker = new AMap.Marker({
    icon: "",
    position: [经度, 纬度]
});
map.add(marker1);
map.setFitView();
// 删除已有Marker对象使用:
 map.remove(marker)// 可以一次性添加多个Marker实例,只需将每个Marker示例放入一个数组Array中。
// 多个点实例组成的数组
const markerList = [marker1, marker2, marker3];
map.add(markerList);
// 绑定Marker实例的事件
const clickHandler = function(e) {
  alert('您在[ '+e.lnglat.getLng()+','+e.lnglat.getLat()+' ]的位置点击了地图!');
};
// 绑定事件
map.on('click', clickHandler);

8. 信息窗体

8.1 默认信息窗体

8.1.1 默认信息窗体的创建

默认信息窗体封装了关闭按钮,使用 API 默认的信息窗体样式,这个时候只需要对 InfoWindow 设定 content 属性即可,content 可以是 dom 对象,也可以是 html 识别的字符串。

// 信息窗体的内容
var content = [
    "<div><img src="\"" http:="" webapi.amap.com="" images="" autonavi.png="" \"=""> ",
    "<div style="\"padding:0px" 0px="" 4px;\"=""><b>高德软件有限公司</b>",
    "电话 : 010-84107000   邮编 : 100102",
    "地址 : 北京市望京阜通东大街方恒国际中心A座16层</div></div>"
];

// 创建 infoWindow 实例	
var infoWindow = new AMap.InfoWindow({
   content: content.join("<br>")  //传入 dom 对象,或者 html 字符串
});
  
// 打开信息窗体
infoWindow.open(map);

8.1.2 信息窗体锚点的设置(anchor)

通过 anchor 可以方便的设置锚点方位。anchor 可选值有 ‘top-left’、‘top-center’、‘top-right’、‘middle-left’、‘center’、‘middle-right’、‘bottom-left’、‘bottom-center’、‘bottom-right’ , 分别代表了信息窗体锚点的不同方位。

var infoWindow = new AMap.InfoWindow({
        anchor: 'top-left',
        content: '这是信息窗体!',
});

infoWindow.open(map,[116.401337,39.907886]);

8.2 自定义信息窗体

如果要自定义信息窗体内容,只需把 InfoWindow 的 isCustom 属性设置为 true ,信息窗体就会变成自定义信息窗体。与默认信息窗体的不同在于,自定义信息窗体需要自己通过 content 来实现关闭按钮以及全部外观样式,同时需要通过 offset 指定锚点位置,offset 为相对于 content 下边缘中间点的位移:

8.2.1 自定义窗体的创建

// 折线的节点坐标数组,每个元素为 AMap.LngLat 对象
var content = [
    "<div><img src="\"" http:="" webapi.amap.com="" images="" autonavi.png="" \"=""> ",
    "<div style="\"padding:0px" 0px="" 4px;\"=""><b>高德软件有限公司</b>",
    "电话 : 010-84107000   邮编 : 100102",
    "地址 : 北京市望京阜通东大街方恒国际中心A座16层</div></div>"
];

// 实现自定义窗体内容,返回拼接后的字符串
function createInfoWindow (title, content){
    // 内容拼接 ...
    return content;
}

// 创建 infoWindow 实例 
var infoWindow = new AMap.InfoWindow({
   isCustom: true,  //使用自定义窗体
   content: createInfoWindow(title,content.join("<br>")),  //传入 dom 对象,或者 html 字符串
   offset: new AMap.Pixel(16, -50)
});

8.2.2 自定义信息窗体的偏移量(offset)

如果用户自定义信息窗体内容,可以为定义的内容添加偏移量(offset)。当偏移量为 (0, 0) 时,自定义内容默认以底部中部为基准点(若设置了 anchor,基准点位置则为 anchor 设置的位置)与经纬度坐标对齐;设置 offset 为其他值则对齐位置相应改变。具体偏移规则如下:
在这里插入图片描述

8.3 信息窗体的打开关闭

// 在指定位置打开已创建的信息窗体
var position = new AMap.LngLat(116.39, 39.9);
infoWindow.open(map, position);

// 关闭信息窗体
infoWindow.close();

9.搜索

9.1 引入和创建插件实例

const placeSearch = new AMap.PlaceSearch({
  pageSize: 5, // 单页显示结果条数
  pageIndex: 1, // 页码
  city: "010", // 兴趣点城市
  citylimit: true,  //是否强制限制在设置的城市内搜索
  map: map, // 展现结果的地图实例
  panel: "panel", // 结果列表将在此容器中进行展示。
  autoFitView: true // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
});
// 使用插件搜索关键字并查看结果
placeSearch.search('北京大学');
// 自定义搜索结果 (如果你不想使用JS API的结果面板,panel可以缺省或者赋值false,然后可以在search()的回调中处理自己的逻辑。)
placeSearch.search('北京大学', function (status, result) {
   // 查询成功时,result即对应匹配的POI信息
});

9.2 输入提示插件

想实现类似在高德地图的输入框里输入文本片段即显示相关的匹配信息,使用输入提示插件AMap.AutoComplete就对了

AMap.plugin('AMap.AutoComplete', function(){
  var autoOptions = {
    //city 限定城市,默认全国
    city: '全国'
  };
  // 实例化AutoComplete
  var autoComplete= new AMap.AutoComplete(autoOptions);
  // 根据关键字进行搜索
  autoComplete.search(keyword, function(status, result) {
    // 搜索成功时,result即是对应的匹配数据
    console.log(result);
  })
})

9.3 POI搜索

使用 AMap.PlaceSearch 获取搜索信息。

map.plugin('AMap.PlaceSearch', () => {
      let placeSearch = new AMap.PlaceSearch({
        city: '010', // city 指定搜索所在城市,支持传入格式有:城市名、citycode和adcode
        map: map // 展现结果的地图实例
      })
      // 关键字搜索
      placeSearch.search(value, function (status, result) {
	   // 监听标记点击事件
        AMap.Event.addListener(placeSearch, 'markerClick', function (data) {
          let result = data
        })        
      })
})
  如果喜欢的话,欢迎 									
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【vue3引入高德地图】 的相关文章

  • 使用 jquery 淡入/淡出

    我正在研究我的学生项目 我是新的 jquery 对于该项目 我必须使用 jquery 来增强一些功能 并且我已经学到了很多来执行基本任务 但我陷入了一些非常令人困惑的事情 我的一个脚本实际上在鼠标悬停在功能上时更改了 div 容器的图像 功
  • 如何让 Google Apps 脚本进行 SHA-256 加密?

    我需要使用文本输入 1 轮 十六进制输出 SHA 256 加密来加密字符串 这应该是一个长度为 64 的字符串 我在 Google Apps 脚本文档中尝试过的每个 SHA 256 加密模块都会返回一组数字 例如 function SHA2
  • Node + now.js + 模型-视图-控制-模式

    我正在使用基于 MVC 模式 模板和 PHP 类 的论坛软件 页面如下所示 domain com index php page Test 我想使用 Node 和 now js 在一个页面 domain com index php page
  • ScrollTop 在 Chrome/Safari 中不起作用

    我的网站上有一个循环内的表单 当有人提交表单时 查询字符串会添加到 URL 中 例如 updated 111 然后 我的 JQuery 脚本检查数字的 url 并在提交表单并重新加载页面后滚动到该 div 该脚本在 Firefox 中运行良
  • 使用 Javascript 实现 Tinder 风格的拖放手势?

    我正在尝试找出哪些库可以用于仅使用 Javascript 的 Tinder 风格拖放手势 需要创建一个响应拖动手势的 HTML 元素 触摸并按住时 允许元素跟随用户的手指移动 当用户移开手指时 该元素会 动画回到原来的位置 如果元素在释放时
  • 方向改变后的javascript最大视口高度Android和iOS

    目标 查找设备的最大视口高度 包括设备的空间address bar这样我们就可以动态调整 min body 的大小并将内容向上推 问题 移动浏览器处理方向状态的方式不同 方向变化时更新 DOM 属性的方式也不同 使用 JavaScript
  • Javascript 自时间戳以来经过的时间

    我试图通过将其存储在变量中来 缓存 一些信息 如果 2 分钟过去了 我想获取 实时 值 调用 url 如果 2 分钟还没有过去 我想从变量中获取数据 我基本上想要的是 if time passed is less than 2 minute
  • 粉碎一个元素,向随机方向发送碎片

    我试图 粉碎 一个元素 例如 一个图像 并将其碎片朝随机方向飞行 当碎片到达目的地时 即x距离 以像素为单位 它们变成原始图像的较小版本 jQuery UI 的explode http api jqueryui com explode ef
  • 将其作为参数传递给 addEventListener()

    我想添加change一组复选框的事件 我如何访问this在我的事件函数中 这样当我执行事件时我可以访问复选框的值 这是我当前的代码 var checkboxes document getElementsByClassName cb Arra
  • 获取 pdf 第 1 页(共 2 页)的图像

    我正在使用 html2canvas 和 jsPDF 以及 Angular4 创建图像 我想将此图像放置在 2 页生成的 pdf 的第 1 页上 但似乎这条线 doc save test pdf 需要在函数内部htm2canvas 因为如果我
  • 尝试使用 CasperJS 跟踪 iframe 中的链接

    我正在尝试使用CasperJS http casperjs org index html跟踪 iframe 中的链接 但我似乎无法获取 iframe 的文档 这是使用我找到的 iframe 示例页面进行的测试 第三个 iframe 有一个名
  • 内联执行生成的汇编程序

    我正在阅读以下演示文稿 http wingolog org pub qc 2012 js slides pdf http wingolog org pub qc 2012 js slides pdf其中讨论了 4 10 19 内联 ASM
  • 标记内的值发生变化时调用函数

    JavaScript 有没有什么方法可以在段落标记的值更改时调用函数 概述 HTML p 00 00 p
  • Bootstrap 3 - 模态背景不会根据模态对话框的高度调整大小?

    我将一个表单放入模式中 并尝试在用户触发单选按钮时显示表单的一些隐藏字段 显示隐藏字段后 模态自动重新缩放的高度 但模态背景的高度不能用作模态对话框 我该如何解决它 div class modal fade div class modal
  • 按钮导致页面重新加载

    我在我的页面上使用 html 和 jquery 在我的 html 中 我有一个按钮 单击该按钮将触发一个功能 当页面加载时 我调用文档准备中的主函数 这是我的代码 div div
  • 限制线的长度

    我正在尝试画一条代表 弹弓 的线 并且希望它具有最大拉伸长度 在 p5 中 我在位置和位置之间画了一条线 line posA x posA y posB x posB y posA 是鼠标 x 和 y posB 是画布上圆的位置 我想要做的
  • onClick 事件适用于触摸屏设备上的触摸吗?

    我用过onclick我的网站上的活动 但是 当我在谷歌浏览器的开发人员模式移动视图中打开它时 触摸使用鼠标单击的元素没有任何反应 所以我的问题是 我还必须添加吗ontouch事件连同onclick事件或 onClick 事件适用于所有触摸屏
  • Modernizr 未将类应用于 html 标签

    我目前正在构建一个网站 我需要使用 Modernizr 但由于某种原因 它没有将类应用到 html 标签 因为它应该 我的代码如下所示
  • $vuetify.goTo 不会在 v-card 组件内滚动

    我有一个带有 v 卡的组件 我在卡片标题区域放置了一个简单的按钮 当我单击时 我看到该方法被触发 它显示在控制台中 但是 卡片永远不会滚动 如果我输错了类名 则会收到错误 因此 goTo 似乎会执行某些操作 因为它找不到该类 没有拼写错误
  • javascript:获取带有单位的CSS prop值[重复]

    这个问题在这里已经有答案了 我的代码是这样的 image 1 position absolute top 3vw 我的尝试 http jsfiddle net z8k6t3fb 1 http jsfiddle net z8k6t3fb 1

随机推荐

  • google 图片下载

    def xia url headers headers user agent Mozilla 5 0 Windows NT 10 0 WOW64 AppleWebKit 537 36 KHTML like Gecko Chrome 78 0
  • Cadence 17.4 使用TIPS: Orcad 输出PDF

    首先File gt Export gt PDF PDF Export 设置页面 其中有4个输出工具供选择 此处我选择第一个Acrobat Distiller 这个是电脑里安装了咱们常用的Adobe Acrobat DC 就会自带的程序 如果
  • 线性分组码最小汉明距离_信息与编码系列(六)线性码~线性代数

    目录 序 线性码的矩阵描述 线性码的等价性 线性码的最小距离 标准数组 Standard Array 校验子解码 Syndrome Decoding 序 这篇文章相当于做一篇 索引 将线性代数的东西和线性码对应起来 方便日后出现问题能够快速
  • jsp调用服务器上的其他程序(C程序)

    String area dz String req getParameter area String id dz String req getParameter id String ip 10 xxx x xx String encodeS
  • SAM-DETR学习笔记Accelerating DETR Convergence via Semantic-Aligned Matching

    Abstract 最近开发的DEtection TRansformer DETR 通过消除一系列手工制作的组件 建立了一个新的对象检测范式 然而 DETR的收敛速度非常慢 这大大增加了培训成本 我们观察到 慢收敛主要归因于在不同特征嵌入空间
  • dropout层

    深度神经网 DNN 中经常会存在一个常见的问题 模型只学会在训练集上分类 过拟合现象 dropout就是为了减少过拟合而研究出的一种方法 一 简介 当训练模型较大 而训练数据很少的话 很容易引起过拟合 一般情况我们会想到用正则化 或者减小网
  • EIGamal数字签名的实现(c++)——大三密码学实验

    实验原理 1 密钥产生 Alice要对一个消息签名 她选择一个大素数p和一个本原根g 选择一个秘密整数 并且计算 p g y 公开 x秘密保存 注 EIGamal签名方案的安全性在于x的保密性 由于离散对数学问题难解 很难由 p g y 确
  • 电脑上显示打印机无法连接服务器错误代码,电脑怎么连接打印机显示错误代码的解决办法...

    下面来看看小编为您整理的电脑怎么连接打印机显示错误代码的答案 电脑怎么连接打印机显示错误代码内容导航1 连接不上打印机错误0x00000709 打印机出现0x00000709错误代码可能是因为网络或者打印设置错误 具体解决步骤如下 1 首先
  • 关于APP接口设计

    最近一段时间一直在做APP接口 总结一下APP接口开发过程中的注意事项 1 效率 接口访问速度 APP有别于WEB服务 对服务器端要求是比较严格的 在移动端有限的带宽条件下 要求接口响应速度要快 所有在开发过程中尽量选择效率高的框架 PHP
  • golang获取当前时间,前n天时间,以及时间格式的转化

    获取当前时间 currentTime time Now currentTime 的结果为go的时间time类型 2018 09 27 13 24 58 287714118 0000 UTC 获取前n天的时间 获取两天前的时间 current
  • idea中jar包依赖了但还是找不到类的解决方案

    新项目check到本地 导入到idea中后 编译的时候很多类都报错了 打开发现有些框架中的类找不到 现象为 控制台报错 点击这个包 明明发现是有这个依赖的 说明项目是依赖了这个jar包的 打开项目配置 查看依赖树 问题找到 idea这里将这
  • 机器学习实验基础

    文章目录 一 机器学习是什么 二 实验方法和原则 1 评价指标 1回归任务 2分类任务 3特定任务 2 数据集 3 实验验证 随机重复实验 K fold 交叉实验 三 总结 课程链接 学堂在线 张敏老师机器学习算法训练营 一 机器学习是什么
  • sparkStreaming对接kafka

    ReceiverAPI 需要一个专门的Executor去接收数据 然后发送给其他的Executor做计算 存在的问题 接收数据的Executor和计算的Executor速度会有所不同 特别在接收数据的Executor速度大于计算的Execu
  • shell脚本编程之循环

    内容预知 1 循环的定义 2 for循环 2 1 for循环的基本用法 运用演示1 列表打印 运用演示二 分类打印 运用演示三 累加求和 2 2 for循环读取文件作为循环条件 运用演示 2 3 for循环的多线程运用 运用演示 2 4 f
  • 计算机系统课程 笔记总结 CSAPP第七章 链接(7.1-7.13)

    GitHub计算机系统CSAPP课程资源 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 1 2 2 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 3 2 4 计算机系统课程 笔记总结 CSAPP第三章
  • Ubuntu复现NeuS(用体绘制学习神经隐式曲面用于多视图重建 )——NeRF应用:表面重建

    目录 一 系统配置 二 安装 可能会遇到的问题 1 pytorch安装报错 2 缺少安装依赖项 三 数据集文件夹设置 1 数据集链接 2 数据集组织 3 以dtu scan24为例 四 训练 以dtu scan24为例 1 无掩码训练 2
  • 在Linux系统中部署zabbix监控服务

    今天学习安装zabbix 以下参考网上各种安装方法及自己做实验 一 zabbix简介 zabbix z biks 是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 zabbix能监视各种网络参数 保证服务器系统
  • 查找---散列表查找定义

    当我们进行查找时 如果是顺序表查找 要找的关键字的记录 是从表头开始 挨个的比较记录a i 与key的值是等于还是不等于 有序表查找时 利用折半查询或者插值查询 直到相等时成功返回i 最终我们的目的都是为了找到那个i 其实也就是相对的下标
  • 使用TortoiseGit

    初衷 脱离命令行的方式 使用gui的界面化工具完成工作需要的版本控制操作 同时还对git运行机制有一定的了解 达到工作需要的基本 提高工作效率 准备工作 安装git 至于为什么 我就不废话了 点我下载git 安装TortoiseGit 理由
  • 【vue3引入高德地图】

    vue3引入高德地图 文章目录 vue3引入高德地图 前言 一 准备工作 1 开发文档 2 添加应用 二 使用步骤 1 npm 安装 2 地图容器创建 3 组件引入 4 js api 安全密钥 5 初始化地图 6 图层 6 1 添加 设置
Powered by Hwhale