在 vue3 中使用高德地图

前言:定位地图位置所需要的经纬度,可以通过 拾取坐标 获取。

一:快速上手

1. 安装依赖

npm install @amap/amap-jsapi-loader
# or
pnpm add @amap/amap-jsapi-loader
# or
yarn add @amap/amap-jsapi-loader

2. 创建组件 src/components/Map.vue

<script setup>
import { onMounted, onUnmounted } from "vue";
import AMapLoader from "@amap/amap-jsapi-loader";let map = null;onMounted(() => {AMapLoader.load({key: "", // 申请好的Web端开发者Key,首次调用 load 时必填version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15plugins: [], // 需要使用的的插件列表,如比例尺'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>

3. 获取 key 值

注册高德账号,注册成功后登录,然后 添加 key 值。复制添加后的 Key 值到组件,就可以使用了。

二:地图配置

参考文档 地图 JS API

1. 展示地图

1.1. 加载 JS API

AMapLoader.load({key: "「你申请的应用key」", //申请好的Web端开发者key,调用 load 时必填version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15
}).then((AMap) => {//JS API 加载完成后获取AMap对象}).catch((e) => {console.error(e); //加载错误提示});

1.2. 地图初始化

const map = new AMap.Map("container", {viewMode: "2D", //默认使用 2D 模式zoom: 11, //地图级别center: [116.397428, 39.90923], //地图中心点
});

1.3. 主题样式

通过在地图初始化时设置 mapStyle 修改主题样式,官方主题有 amap://styles/ 后面拼接:normal、grey、whitesmoke、dark、light、graffiti

map = new AMap.Map("container", {mapStyle: "amap://styles/whitesmoke", //设置地图的显示样式
});

2. 展示图层

2.1 创建图层

const layer = new AMap.createDefaultLayer({zooms: [3, 20], //可见级别visible: true, //是否可见opacity: 1, //透明度zIndex: 0, //叠加层级
});

2.2 加载图层

const map = new AMap.Map("container", {viewMode: "2D", //默认使用 2D 模式zoom: 11, //地图级别center: [116.397428, 39.90923], //地图中心点layers: [layer], //layer为创建的默认图层
});

2.3 创建实时交通路况图层

const traffic = new AMap.TileLayer.Traffic({autoRefresh: true, //是否自动刷新,默认为falseinterval: 180, //刷新间隔,默认180s
});
map.add(traffic); //通过add方法添加图层

2.4 路况图层的显示和隐藏

traffic.show(); //显示路况图层
traffic.hide(); //隐藏路况图层

3. 添加地图控件

JS API 提供了众多的控件,需要引入之后才能使用这些控件的功能。常见的地图控件有:缩放工具条 ToolBar、比例尺 Scale、定位按钮 Geolocation 等。

3.1 引入地图控件

//异步加载控件
AMap.plugin("AMap.ToolBar", function () {var toolbar = new AMap.ToolBar(); //缩放工具条实例化map.addControl(toolbar);
});

3.2 控制地图控件显示/隐藏

toolbar.show(); //缩放工具展示
toolbar.hide(); //缩放工具隐藏

4. 添加点标记

点标记是地图覆盖物中非常重要的要素之一,可以用来标记地图上的某个位置。

4.1 自定义 Marker

自定义 Marker 内容可以是字符串拼接的 DOM 元素。可以根据 class 名去定义样式。

//点标记显示内容
const markerContent = `<div class="custom-content-marker">
<img src="//a.amap.com/jsapi_demos/static/demo-center/icons/dir-via-marker.png">
<div class="close-btn" onclick="clearMarker()">X</div>
</div>`;

4.2 创建 Marker 对象

const position = new AMap.LngLat(116.397428, 39.90923); //Marker 经纬度
const marker = new AMap.Marker({position: position,content: markerContent, //将 html 传给 contentoffset: new AMap.Pixel(-13, -30), //以 icon 的 [center bottom] 为原点
});

4.3 将 Marker 添加到地图

map.add(marker);

4.4 给 Marker 绑定事件

function clearMarker() {map.remove(marker); //清除 marker
}
document.querySelector(".close-btn").onclick = clearMarker; //绑定点击事件

5. 添加多边形

多边形矢量图是地图覆盖物重要的地图要素之一,可以用来突出标记某个区域的形状。

5.1 创建地图

const map = new AMap.Map("container", {center: [121.045332, 31.19884], //地图中心点zoom: 8.8, //地图级别
});

5.2 创建 Polygon 对象

AMap.Polygon 对象为用户提供在地图图面绘制多边形的能力。可以为多边形设置填充颜色 fillColor、描边颜色 strokeColor、轮廓线样式等属性。

tips: path 是多边形轮廓线的节点坐标数组。多边形支持普通多边形,带单个孔多边形,带多个孔多边形类型绘制。

普通多边形:path = [lnglat, lnglat ...] 或 path = [[lnglat, lnglat ...]]
带单个孔多边形:path = [[lnglat, lnglat ...], [ lnglat, lnglat ...]]
带多个孔多边形:path = [[lnglat, lnglat ...], [lnglat, lnglat ... ], [lnglat, lnglat ...] ...]
const pathArr = [[[[121.7789, 31.3102],[121.7279, 31.3548],[121.5723, 31.4361],[121.5093, 31.4898],[121.5624, 31.4864],[121.5856, 31.4547],[121.7694, 31.3907],[121.796, 31.3456],[121.7789, 31.3102],],],
];
const polygon = new AMap.Polygon({path: pathArr, //多边形路径fillColor: "#ccebc5", //多边形填充颜色strokeOpacity: 1, //线条透明度fillOpacity: 0.5, //填充透明度strokeColor: "#2b8cbe", //线条颜色strokeWeight: 1, //线条宽度strokeStyle: "dashed", //线样式strokeDasharray: [5, 5], //轮廓的虚线和间隙的样式
});

5.3 给 Polygon 添加事件

//鼠标移入更改样式
polygon.on("mouseover", () => {polygon.setOptions({fillOpacity: 0.7, //多边形填充透明度fillColor: "#7bccc4",});
});
//鼠标移出恢复样式
polygon.on("mouseout", () => {polygon.setOptions({fillOpacity: 0.5,fillColor: "#ccebc5",});
});

5.4 添加 Polygon 到地图

map.add(polygon);

6. 搜索地点

AMap.PlaceSearch 地点搜索插件。

6.1 创建地图

const map = new AMap.Map("container", {viewMode: "2D", //默认使用 2D 模式zoom: 11, //地图级别center: [116.397428, 39.90923], //地图中心点
});

6.2 引入插件

通过 AMap.plugin 方法按需引入插件

AMap.plugin(["AMap.PlaceSearch"], function () {const placeSearch = new AMap.PlaceSearch({pageSize: 5, //单页显示结果条数pageIndex: 1, //页码city: "010", //兴趣点城市citylimit: true, //是否强制限制在设置的城市内搜索map: map, //展现结果的地图实例panel: "my-panel", //结果列表将在此容器中进行展示。autoFitView: true, //是否自动调整地图视野使绘制的 Marker 点都处于视口的可见范围});placeSearch.search("北京大学"); //使用插件搜索关键字并查看结果
});

6.3 自定义搜索结果

如果不想使用 JS API 的结果面板,panel 可以缺省或者赋值 false,然后在 search()的回调中处理自己的逻辑,自定义搜索教程前往 输入提示与 POI 搜索。

//在回调函数中使用插件功能
placeSearch.search("北京大学", function (status, result) {//查询成功时,result 即对应匹配的 POI 信息
});

7. 路线规划

AMap.Driving 驾车路线规划插件。JS API 的路线规划种类有:驾车 AMap.Driving、公交 AMap.Transfer、步行 AMap.Walking、骑乘 AMap.Riding 和货车 AMap.TruckDriving 等。

7.1 确认规划的起点和终点信息

// 使用地名确认起终点
const points = [{ keyword: "北京市地震局(公交站)", city: "北京" }, //起始点坐标{ keyword: "亦庄文化园(地铁站)", city: "北京" }, //终点坐标
];// 使用经纬度确认起终点
const startLngLat = [116.379028, 39.865042]; //起始点坐标
const endLngLat = [116.427281, 39.903719]; //终点坐标

7.2 引入和创建驾车规划插件,获取起终点规划线路

// 使用地点名称规划获取规划路线
// 引入和创建驾车规划插件
AMap.plugin(["AMap.Driving"], function () {const driving = new AMap.Driving({map: map,panel: "my-panel",});//获取起终点规划线路driving.search(points, function (status, result) {if (status === "complete") {//status:complete 表示查询成功,no_data 为查询无结果,error 代表查询错误//查询成功时,result 即为对应的驾车导航信息console.log(result);} else {console.log("获取驾车数据失败:" + result);}});
});// 使用经纬度规划获取规划路线
// 引入和创建驾车规划插件
AMap.plugin(["AMap.Driving"], function () {const driving = new AMap.Driving({map: map,panel: "my-panel",});//获取起终点规划线路driving.search(startLngLat, endLngLat, function (status, result) {if (status === "complete") {//status:complete 表示查询成功,no_data 为查询无结果,error 代表查询错误//查询成功时,result 即为对应的驾车导航信息console.log(result);} else {console.log("获取驾车数据失败:" + result);}});
});

8. 地图生命周期

8.1 创建地图

var map = new AMap.Map("container", {zoom: 10, //地图级别center: [116.397428, 39.90923], //地图中心点layers: [new AMap.TileLayer.Satellite()], //设置图层,可设置成包含一个或多个图层的数组mapStyle: "amap://styles/whitesmoke", //设置地图的显示样式viewMode: "2D", //设置地图模式
});

8.2 地图加载完成

map.on("complete", function () {//地图图块加载完成后触发
});

8.3 地图运行阶段

var map = new AMap.Map("container"); //初始化地图
//在运行阶段添加点标记
const marker = new AMap.Marker({position: new AMap.LngLat(116.39, 39.9),
});
//将创建的点标记添加到已有的地图实例:
map.add(marker);
//在运行阶段监听地图的点击事件
const clickHandler = function (e) {console.log("您在[ " +e.lnglat.getLng() +"," +e.lnglat.getLat() +" ]的位置点击了地图!");
};
map.on("click", clickHandler);

8.4 销毁地图对象

//解绑地图的点击事件
map.off("click", clickHandler);
//销毁地图,并清空地图容器
map.destroy();
//地图对象赋值为null
map = null;
//清除地图容器的 DOM 元素
document.getElementById("container").remove(); //"container" 为指定 DOM 元素的id

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

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

相关文章

飞书小技巧:markdown导出

文章目录 下载Feishu2Md飞书应用配置配置feishu2md工具绑定应用导出markdown 下载Feishu2Md Feishu2Md 飞书应用配置 进入飞书开发者后台 https://open.feishu.cn/app。 点击“创建企业自建应用”&#xff0c;并填写应用名称等信息。而后点击创建。 PS: 此处作者创建应用名…

C++ | Leetcode C++题解之第42题接雨水

题目&#xff1a; 题解&#xff1a; class Solution { public:int trap(vector<int>& height) {int n height.size();if (n 0) {return 0;}vector<int> leftMax(n);leftMax[0] height[0];for (int i 1; i < n; i) {leftMax[i] max(leftMax[i - 1], he…

【Linux系统编程】

Linux系统编程 一.文件编程1.常用API1.1 打开&#xff1a;open1.2 读写&#xff1a;write/read1.3 光标定位: lseek1.4 创建&#xff1a;creat1.4 关闭&#xff1a;close 2.文件的打开及创建3.文件的写入4.文件的读取5.文件描述符5.代码实现cp指令6.编程实现修改文件配置7.写一…

实现Node.js安装与配置。

一 、Node.js简介 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;用于构建高性能、可扩展的网络应用程序。它发布于2009年5月&#xff0c;由Ryan Dahl开发&#xff0c;允许使用JavaScript进行服务器端编程&#xff0c;使开发者能够在前后端都使用同一种编程…

Unity 新版输入系统(Input System)

前言 官方教程 注意 新的输入系统需要 Unity 2019.4 和 .NET 4 运行时。它不适用于 .NET 3.5 的项目。 教程版本&#xff1a;Unity 2021.3.26 1. 安装 1.1 打开 Package Manager 导航栏 -> Window -> Package Manager 1.2 安装 Input System 选择 Unity Registry 在列…

RabbitMQ, DelayQueue, Redis的介绍以及IDEA的实现

RabbitMQ RabbitMQ是一个开源的消息队列中间件&#xff0c;它实现了高效、可靠的消息传递机制。它支持多种消息传递模式&#xff0c;如发布/订阅、点对点、请求/回应等。RabbitMQ以其可靠性、灵活性和易用性受到广泛的关注和应用。 RabbitMQ基于AMQP&#xff08;Advanced Mess…

孙中亮:北斗三十周年,看北斗芯片高质量发展历程和方向

1994年1月10日&#xff0c;北斗一号建设正式启动&#xff0c;党中央决策建设独立自主的北斗卫星导航系统。2020年7月31日&#xff0c;北斗三号全球卫星导航系统正式开通&#xff0c;标志着北斗系统进入全球化发展新阶段。随着2024年的到来&#xff0c;北斗系统建设已走过栉风沐…

汇智知了堂走进宜宾学院,共话国产化信创未来!

在春意盎然的四月&#xff0c;汇智知了堂以其深厚的品牌底蕴和卓越的教育品质&#xff0c;再次展现了其在教育领域的领先地位。4月18日&#xff0c;汇智知了堂走进宜宾学院&#xff0c;为广大学子带来了一场关于国产化信创时代的技术变革与专业学习建议的讲座。 汇智知了堂作…

2024深圳杯(东三省)数学建模挑战赛D题:音板的振动模态分析与参数识别思路代码成品论文分析

​ 更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓ https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 问题重述 深圳杯&#xff08;东三省&#xff09;数学建模挑战赛2024D题&#xff1a;音板的振动模态分析与…

YoloV9改进策略:注意力改进、Neck层改进_自研全新的Mamba注意力_即插即用,简单易懂_附结构图_检测、分割、关键点均适用(独家原创,全世界首发)

摘要 无Mamba不狂欢,本文打造基于Mamba的注意力机制。全世界首发基于Mamba的注意力啊!对Mamba感兴趣的朋友一定不要错过啊! 基于Mamba的高效注意力代码和结构图 import torch import torch.nn as nn # 导入自定义的Mamba模块 from mamba_ssm import Mamba class Eff…

vue做导入导出excel文档

系统中经常会遇到要实现批量导入/导出数据的功能&#xff0c;导入就需要先下载一个模板&#xff0c;然后在模板文件中填写内容&#xff0c;最后导入模板&#xff0c;导出就可能是下载一个excel文件。 1、导出 新建一个export.js文件如下&#xff1a; import {MessageBox,Mes…

赋能数据检索:构建用于www.sohu.com的新闻下载器

引言 在信息爆炸的时代&#xff0c;随着新闻数据的数量不断增长&#xff0c;获取和分析这些数据变得尤为关键。本文将介绍如何构建一个高效的新闻下载器&#xff0c;专门用于从搜狐网&#xff08;www.sohu.com&#xff09;检索和下载新闻内容。 背景介绍 搜狐网作为中国领先…

40. 【Android教程】AsyncTask:异步任务

在前面的章节有提到过&#xff0c;Android 系统默认会在主线程&#xff08;UI 线程&#xff09;执行任务&#xff0c;但是如果有耗时程序就会阻塞 UI 线程&#xff0c;导致页面卡顿。这时候我们通常会将耗时任务放在独立的线程&#xff0c;然后通过 Handler 等线程间通信机制完…

外贸干货|客户迟迟不付款,怎么催?

(一) Gentle reminder 温馨提醒 "Hello Mary, l hope this message finds you well. l wanted to kindly remind you about the payment for our agreed-upon order. We appreciate your business and would like to proceed with the next steps as soon as possible.…

DS32K查看内置寄存器数值

需要在debug的时候进行查看&#xff0c;先暂停&#xff0c;再打开EmbSys Registers窗口。 需要先将导出的内容选中并双击&#xff0c;不然复制出来会变成问号。右上角有个复制按钮&#xff0c;复制到剪贴板就行。譬如我这里选择了MCR寄存器&#xff0c;复制出来的就是这个寄存器…

下载nvm来配置node版本

背景提示&#xff1a;入职的公司项目久远&#xff0c;一直运行不起来&#xff0c;原来是我node版本太高&#xff0c;需要降级才行。然后找到这个nvm配置一下 准备工作 如果电脑有配置node的&#xff0c;需要先卸载掉才能配置nvm&#xff01;&#xff01;&#xff01;这是重点嗷…

大模型解决方案:具体业务场景下的智能表单填充(附代码)

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模型问答项目问答性能评估方法大模型…

JS -正则表达式

正则表达式 关于正则表达式&#xff0c;其实我写过几篇了&#xff0c;但是真正的正则表达式其实主要用于定义一些字符串的规则&#xff0c;计算机根据给出的正则表达式&#xff0c;来检查一个字符串是否符合规则。 我们来看一下&#xff0c;在JS中如何创建正则表达式对象。 语…

第67天:APP攻防-Frida反证书抓包移动安全系统资产提取评估扫描

思维导图 案例一&#xff1a;内在-资产提取-AppinfoScanne AppinfoScanner 一款适用于以 HW 行动/红队/渗透测试团队为场景的移动端(Android、iOS、WEB、H5、静态网站)信息收集扫描工具&#xff0c;可以帮助渗透测试工程师、攻击队成员、红队成员快速收集到移动端或者静态 WEB …

【禅道客户案例】小反馈,大杠杆!银丰新融「反馈管理」优秀实践

企业介绍 北京银丰新融科技开发有限公司&#xff08;简称&#xff1a;银丰新融&#xff09;成立于2000 年&#xff0c;自创立以来一贯专注于金融监管、风险管控等领域的信息系统建设&#xff0c;拥有目前国内金融风险领域规模庞大的信息技术服务团队。 银丰新融业务范围覆盖了…