Vue3集成高德地图:快速上手,实现你的业务需求

Vue3集成高德地图

  • 前言
  • 一、准备工作
    • 1.开发文档
    • 2.添加应用
  • 二、使用步骤
    • 命令安装
    • 2.地图容器创建
    • 3.组件引入
    • 4.js api 安全密钥
    • 5.初始化地图
    • 6. 图层
      • 6.1 添加 / 设置 / 获取 / 移除图层
        • 6.1.1 添加图层
        • 6.1.2 设置图层
        • 6.1.3 获取图层
        • 6.1.4 移除图层
    • 7. 点标记
    • 8. 信息窗体
      • 8.1 默认信息窗体
        • 8.1.1 默认信息窗体的创建
        • 8.1.2 信息窗体锚点的设置(anchor)
      • 8.2 自定义信息窗体
        • 8.2.1 自定义窗体的创建
        • 8.2.2 自定义信息窗体的偏移量(offset)
      • 8.3 信息窗体的打开关闭
    • 9.搜索
      • 9.1 引入和创建插件实例
      • 9.2 输入提示插件
      • 9.3 POI搜索

在这里插入图片描述

主页传送门:📀 传送


前言

  总结之前写的内容,优化下细节


一、准备工作

  确保自己有开发者账号并成功生成了API密钥。具体操作如下:

1.开发文档

  百度搜索高德开放平台 -登录/注册 -文档与支持- Web服务 API - JS API

在这里插入图片描述

2.添加应用

  认证 - 控制台 - 应用管理 -我的应用 -创建新应用
在这里插入图片描述
创建完应用点击添加key在弹出的页面根据需求选择对应服务平台即可

web示例:
web网页 选择 web端(js api)key名称随便写 域名白名单根据自己需求选择添加 最后勾选同意
在这里插入图片描述

注意选 web端 才能生成安全密钥 调用api需要用到
在这里插入图片描述

二、使用步骤

安装高德地图SDK

命令安装

npm安装:

代码如下:

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

yarn安装:
代码如下:

yarn add vue-amap

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: '全国'};// 实例化AutoCompletevar 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和adcodemap: map // 展现结果的地图实例})// 关键字搜索placeSearch.search(value, function (status, result) {// 监听标记点击事件AMap.Event.addListener(placeSearch, 'markerClick', function (data) {let result = data})        })
})

在这里插入图片描述

  如果喜欢的话,欢迎 🤞关注 👍点赞 💬评论 🤝收藏  🙌一起讨论你的评价就是我✍️创作的动力!					  💞💞💞

参考文档:
高德开放平台

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

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

相关文章

【微服务】微服务初步认识 - 微服务技术如何学习 · 认识微服务架构

微服务&#xff08;1&#xff09; 文章目录 【微服务】&#xff08;1&#xff09;1. 微服务相关技术栈2. 微服务学习路线3. 认识微服务架构3.1 单体架构3.2 分布式架构3.3 微服务(架构)3.4 微服务(架构)治理落实相关的SpringCloud、SpringCloudAlibaba和阿里巴巴的Dubbo提供的服…

226、翻转二叉树

题目链接&#xff1a; \sf 题目链接&#xff1a; 题目链接&#xff1a; 图解&#xff1a; 方法一、 D F S \sf 方法一、DFS 方法一、DFS 递归&#xff1a; 让左子树是翻转后的右子树&#xff0c; 右子树是翻转后的左子树。 ∴从叶结点开始&#xff0c;自底向上逐步翻转。递归出…

Elucidating the Design Space of Diffusion-Based Generative Models 阅读笔记

文章使用模块化&#xff08;modular&#xff09;的思想&#xff0c;分别从采样、训练、score network设计三个方面分析和改进diffusion-based models。 之前的工作1已经把diffusion-based models统一到SDE或者ODE框架下了&#xff0c;这篇文章的作者同样也从SDE和ODE的角度出发…

文件路径操作

避开-转义字符 python文件路径导致的错误常常与“\”有关&#xff0c;因为在路径中的“\”常会被误认为转义字符。 所以在上述路径中&#xff0c;\table\name\rain中的\t,\n,\r都易被识别为转义字符。 解决的办法主要由以下三种&#xff1a; #1 前面加r表示不转义 pathr&quo…

html资源提示符

前言&#xff1a;正常dom解析 中遇到script标签 &#xff0c;会暂停主线程 去下载js&#xff0c;拿到资源后&#xff0c;主线程再执行js。 那么主线程在等待网络线程下载这个空闲很浪费 解决方案&#xff1a; script标签增加属性 async defer 1.async <script src"./i…

[C++]:1.初识C++和C语言缺陷补充。

初识C和C语言缺陷补充 一.主要内容&#xff1a;二.具体内容&#xff1a;一&#xff1a; 作用域1.命名空间&#xff1a;2.函数声明和定义&#xff1a;3.不存在命名冲突的情况&#xff1a; 二.输入输出&#xff1a;1.基本输入输出&#xff1a;2.关于std的展开&#xff1a; 三.函数…

5+非肿瘤分析,分型+WGCNA+机器学习筛选相关基因

今天给同学们分享一篇非肿瘤分型机器学习WGCNA实验的生信文章“Identification of diagnostic markers related to oxidative stress and inflammatory response in diabetic kidney disease by machine learning algorithms: Evidence from human transcriptomic data and mou…

Windows网络系统架构

在介绍Windows网络体系架构之前&#xff0c;我首先介绍一下Windows中的两个重要编程规范——TDI&#xff0c;NDIS.&#xff0c;然后再介绍网络体系的架构。TDI&#xff0c;Transport Driver Interface&#xff0c;传输驱动程序接口。/Windows/System32/Drivers/Tdi.sys。在实现…

搜索引擎站群霸屏排名源码系统+关键词排名 前后端完整的搭建教程

开发搜索引擎站群霸屏排名系统是一项重要的策略&#xff0c;通过在搜索引擎中获得多个高排名站点&#xff0c;可以大大提高企业的品牌知名度&#xff0c;从而吸引更多的潜在客户和消费者。而且当潜在客户在搜索结果中看到多个与您的品牌相关的站点时&#xff0c;他们可能会认为…

Thread常用API

setname方法每个线程取名 需要创建构造器 线程设置名字 package Thread_api_test;// 继承Thread类 public class MyThread extends Thread {//创建构造器 线程设置名字public MyThread(String name){super(name);}Overridepublic void run() {super.run();Thread mThread.cur…

css 左右滚轮无缝衔接

最近的项目有做到一个功能 类似跑马灯或者公告栏那种 有文字 也有列表的 所以 写了两种 第一种公告栏文字是用的js 第二种图文类型是用的css 两种方法 记录一下 第一种 纯文字滚动 其实也是根据js去计算dom的宽度 通过js去给css赋值 <div class"div1"><div …

计网面试复习自用

五层&#xff1a; 应用层&#xff1a;应用层是最高层&#xff0c;负责为用户提供网络服务和应用程序。在应用层&#xff0c;用户应用程序与网络进行交互&#xff0c;发送和接收数据。典型的应用层协议包括HTTP&#xff08;用于网页浏览&#xff09;、SMTP&#xff08;用于电子邮…

【MySQL】事务四大特性ACID、并发事务问题、事务隔离级别

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 MySQL 一、事务四大特性ACID1.1 原子性1.2 …

车辆车型识别系统python+TensorFlow+Django网页界面+算法模型

一、介绍 车辆车型识别系统。本系统使用Python作为主要开发编程语言&#xff0c;通过TensorFlow搭建算法模型网络对收集到的多种车辆车型图片数据集进行训练&#xff0c;最后得到一个识别精度较高的模型文件。并基于该模型搭建Django框架的WEB网页端可视化操作界面。实现用户上…

【LeetCode刷题(数据结构与算法)】:二叉树之左叶子之和

给定二叉树的根节点 root &#xff0c;返回所有左叶子之和 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&#xff0c;所以返回 24 示例 2: 输入: root [1] 输出: 0 这都题目用递归的方法就可以解决…

『C++之STL』双端队列 - deque

前言 双端队列,Double-ended queue,简称为deque是一种线性结构的一种容器; 在数据结构中出现的顺序表与链表,或者栈与队列都算是线性结构; 在结构中,它与vector相比较会相似一些; 但是在实际当中,双端队列 - deque 包含了vector与list的优点; vector(顺序表) 支持随机访问,空…

Vue3引入腾讯地图,点击坐标后实时获取经纬度

本文将介绍如何在Vue 引入腾讯地图组件&#xff0c;引入后可以直接在页面中渲染腾讯地图&#xff0c;实现 经纬度 与 地图锚点位置的双向绑定&#xff0c;如&#xff1a; 1&#xff0c;输入经纬度后&#xff0c;地图自动定位到指定位置&#xff1b;2&#xff0c;鼠标在地图点击…

多域名SSL数字证书是什么呢

多域名SSL数字证书是众多SSL数字证书中最灵活的一款SSL证书产品。一般一张SSL证书只能保护一个域名&#xff0c;即使能保护多个域名站点&#xff0c;证书保护的域名类型也有限制(通配符SSL数字证书)。多域名SSL数字证书既能用一张SSL证书保护多个域名网站&#xff0c;又不限制域…

HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Toggle

组件提供勾选框样式、状态按钮样式及开关样式。该组件从API Version 8开始支持。 仅当ToggleType为Button时可包含子组件。 一、接口 Toggle(options: { type: ToggleType, isOn?: boolean }) 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 参数: Toggle…

基于Java的驾校教练预约管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…