高德地图,使用记录

提示:以下是本篇文章正文内容,下面案例可供参考

文章目录

  • 前言
  • 一、使用Promise分装方法主体或者使用class进行封装
    • 1.引入库 [ 高德官网 AMapUI 组件库](https://lbs.amap.com/api/amap-ui/intro)
  • 二、 获取地图中心点
  • 三、地图创建方法
  • 四、创建矢量图形方法 (Polygon)
  • 五 、编辑矢量图层
  • 六、创建点聚合实例
  • 七、创建搜索实例
  • 八、创建点标记
  • 九、清除的实例方法
  • 总结


前言

当前文章是基于高德地图官网提供的API提供的API,在项目中用到的方法进行二次简单处理,用到 npm install @amap/amap-jsapi-loader 使用第三方插件
使用方法有
1.地图的创建(AMap.Map)
2.矢量图形(Polygon)
3.编辑矢量图层(PolygonEditor)
4.创建点聚合实例(MarkerCluster )
5.搜索实例(PlaceSearch)
6.创建点标记(Marker)
7.清除矢量图形,清除地图实例(destroy()),清除点聚合实例( setMap(null))


提示:以下是本篇文章正文内容,下面案例可供参考

一、使用Promise分装方法主体或者使用class进行封装

1.引入库 高德官网 AMapUI 组件库

// index.js 文件
import AMapLoader from '@amap/amap-jsapi-loader';
export function AutoNavi() {return new Promise((resolve, reject) => {// 加载高德地图APIAMapLoader.load({key: 'XXXXXXXXXXXXXXXXXXXXXXXXXX2b58dc8e8e0d48', //再高德官网申请的高德地图key version: '2.0', // 版本好plugins: ['AMap.InfoWindow', 'AMap.Marker', 'AMap.DrivingResult', 'AMap.MarkerClusterer', 'AMap.MarkerCluster', 'AMap.Driving', 'AMap.GraspRoad', 'AMap.DistrictSearch',  'AMap.PolygonEditor',   'AMap.PlaceSearch', 'AMap.AutoComplete', 'AMap.MassMarks' ,  'AMap.PolygonEditor', 'AMap.MouseTool'  , 'AMap.GeometryUtil'  , 'AMap.Polygon'  ,  'AMap.LngLat'    ],AMapUI: { // 是否加载 AMapUI,缺省不加载version: "1.1", // AMapUI 版本plugins: ["geo/DistrictExplorer"], // 需要加载的 AMapUI ui插件},}).then((AMap) => {// 实例化地图return resolve(AMap)})})
}
// mapClass.js 文件class AMapMAp {AMapExample // 地图实例key // 高德地图的KeyMapId // 地图的容器 cityCode // 区市code编码AMapObjMapObj //地图实例pathArray //  Polygon 经纬度集合PolygonObj //  Polygon 实例MarkerClusterObj // 点聚合实例placeSearch // createAMapMapcenter // 获取地图中心点位经纬度PolygonDisplacement // 矢量图形 获取移动后的经纬度集MarkerObj //创建点标记实例AMapUIFun_w // 地图请求实例/*** constructor* 地图类的初始值* @param {*} key 自己创建的高德Api的Key : {@link https://console.amap.com/dev/key/app}  * @param {*} MapId  地图容器的ID*/constructor({AMapExample,key,MapId}) {this.key = key // 获取传入的keythis.MapId = MapId // 获取盒子的idthis.AMapExample = AMapExample // 获取地图实例this.MapGive()  // 初始化地图实例}// 高德地图实例MapGive() {let that = thisthis.AMapExample = new Promise((resolve, reject) => {AMapLoader.load({key: this.key, // 'XXXXXXXXXXXXXXXXXa572b58dc8e8e0d48', //你申请的高德地图keyversion: '2.0',plugins: ['AMap.InfoWindow', 'AMap.Marker', 'AMap.DrivingResult', 'AMap.MarkerClusterer', 'AMap.MarkerCluster', 'AMap.Driving', 'AMap.GraspRoad', 'AMap.DistrictSearch', 'AMap.PolygonEditor', 'AMap.PlaceSearch', 'AMap.AutoComplete', 'AMap.MassMarks', 'AMap.PolygonEditor', 'AMap.MouseTool', 'AMap.GeometryUtil', 'AMap.Polygon', 'AMap.LngLat'],AMapUI: {// 是否加载 AMapUI,缺省不加载version: "1.1", // AMapUI 版本plugins: ["geo/DistrictExplorer", "misc/PathSimplifier", "overlay/SimpleMarker"], // 需要加载的 AMapUI ui插件},}).then((AMap) => {that.CreateAMapUI(AMapUI)return resolve(AMap)})})}}

二、 获取地图中心点

代码如下(示例):

   /*** *createAMapMap* @param { Object} createAMapMapObj* @param {Number}createAMapMapObj.cityCode 区域编码* @param {String} createAMapMapObj.InputId 地图检索输入框ID* @param {*} createAMapMapObj.mapStyle     地图样式* @param {*} createAMapMapObj.viewMode     开启3D视图,默认为关闭* @param {*} createAMapMapObj.features     地图显示元素种类* @param {*} createAMapMapObj.resizeEnable 是否监控地图容器尺寸变化*/createAMapMap({cityCode,InputId,mapStyle,viewMode,features,zooms,resizeEnable}) {let that = thisthat.cityCode = cityCode  // 区市code编码that.AMapExample.then(AMap => {// 创建地图实例that.AMapObj = AMap//  通过检索 行政编码获取中心点坐标AMap.plugin("AMap.DistrictSearch", function () {new AMap.DistrictSearch({extensions: "all",subdistrict: 0,}).search(cityCode + '', function (status, result) {// 获取行政区经纬度 let LngAndLat = [result.districtList[0].center.lng + '', result.districtList[0].center.lat + '']// 将结构 行政区 的经纬度 赋值给 地图中心点 that.center = {lng: result.districtList[0].center.lng,lat: result.districtList[0].center.lat}that.pathArray = result.districtList[0].boundaries// 调用地图创建方法that.createMap({zooms,center: LngAndLat,InputId,mapStyle,viewMode,features,resizeEnable})})})})}

三、地图创建方法

代码如下(示例):

 /*** * createMap* 地图试图创建* @param {Object} createMapObj 地图试图创建参数对象* @param {Array} createMapObj.center  初始化地图中心点* @param {Array} createMapObj.zooms  限制地图的最大和最小的缩放级别* @param {String} createMapObj.InputId  地图检索输入框ID* @param {String} createMapObj.mapStyle  地图的显示样式* @param {String} createMapObj.viewMode  开启3D视图,默认为关闭* @param {Array} createMapObj.features  地图显示元素种类* @param {Boolean} createMapObj.resizeEnable  是否监控地图容器尺寸变化*/createMap({center,zooms,zoom = 11,InputId,mapStyle = "amap://styles/blue",viewMode = "3D",features = ['bg', 'road', 'building', 'point'],resizeEnable = true}) {let that = thisconsole.log(zooms, 'zooms');that.MapObj = new AMap.Map(that.MapId, {zoom: zoom, // 初始化地图层级zooms: zooms,resizeEnable: resizeEnable, //是否监控地图容器尺寸变化mapStyle: mapStyle, // 地图的显示样式viewMode: viewMode, // 开启3D视图,默认为关闭features: features, // 地图显示元素种类center // 初始化地图中心点});that.CreatePlaceSearch(InputId)}

四、创建矢量图形方法 (Polygon)

CreatePolygon({path,strokeStyle = 'solid',draggable = false,strokeColor = "blue",strokeWeight = 3,fillColor = "#47E9FF",fillOpacity = 0,extData = {}}) {let that = thisconsole.log(that.AMapObj, 'pathCreatePolygon');that.PolygonObj = new that.AMapObj.Polygon({path: path, // 当前区域的经纬度strokeColor: strokeColor, //城市边界颜色strokeWeight: strokeWeight, // 轮廓线宽度fillColor: fillColor, // 多边形填充颜色,使用16进制颜色代码赋值。fillOpacity: fillOpacity, // 多边形填充透明度,取值范围 [0,1] ,0表示完全透明,1表示不透明。默认为0.5draggable: draggable, // 设置点标记是否可拖拽移动strokeStyle: strokeStyle, // 轮廓线样式,实线:solid,虚线:dashedextData: extData // 用户自定义属性,支持JavaScript API任意数据类型});that.MapObj.add(that.PolygonObj)// 当 draggable 这个变量为真的时候在执行一下逻辑// 用于获取矢量图形的移动后的经纬度if (draggable) {// 矢量图形的移动事件that.PolygonObj.on('dragging', (e) => {let {path} = e.target._opts // 获取矢量图形的经纬度that.PolygonDisplacement = path;})}return that.PolygonObj}

五 、编辑矢量图层

CreatePolygonEditor({MapObj,Polygon}) {let that = this;that.CreatePolygonEditorObj = new that.AMapObj.PolygonEditor(that.MapObj, Polygon)// 在外层利用实例调用该方法// 使用.open() 打开矢量图层// 使用 .close()关闭矢量图层return that.CreatePolygonEditorObj}

六、创建点聚合实例

 CreateMarkerCluster({processingFun,_renderMarker,MarkerClusterStyle}) {let that = this;this.MarkerClusterObj = new that.AMapObj.MarkerCluster(that.MapObj, processingFun, {styles: MarkerClusterStyle,gridSize: 48,renderMarker: _renderMarker,})return this.MarkerClusterObj}// 调用示例var _renderMarker = function (context) {let div = document.createElement('div');div.style = ` height: 38px; width: 38px;border-radius: 12px;`div.className = 'ZhiLianClass'context.marker.setContent(div)context.marker.setExtData(context.data);// 实例点击事件context.marker.on("click", () => {})}this.CreateMarkerCluster({ 这个位置是你的数据源,_renderMarker})

七、创建搜索实例

   CreatePlaceSearch(InputId) {let that = this// 创建实例需要的盒子idlet autoOptions = {input: InputId  // 你输入框的id};// 调用搞得搜索 Apithat.placeSearch = new that.AMapObj.PlaceSearch({map: that.MapObj});// 注册监听,当选中某条记录时会触发let auto = new that.AMapObj.AutoComplete(autoOptions);auto.on("select", select); //注册监听,当选中某条记录时会触发let circle = null// 高德自带搜索function select(e) {if (circle) {that.MapObj.remove(circle)}if (!e.poi.location && !e.poi.location) {ElMessage({message: '当前所选择的地区没用经纬度!!!',})}that.placeSearch.setCity(e.poi.adcode); // 获取选择的名称的编码that.placeSearch.search(e.poi.name); //关键字查询查询}}

八、创建点标记

  createMarker() {let that = this;that.MarkerObj = new that.AMapObj.Marker({position: JSON.parse(DianShili.longitudeAdnLatitude),icon: new that.AMapObj.Icon({image: "/img/muBiaoDian/energyCard.png",size: new that.AMapObj.Size(40, 40),imageSize: new that.AMapObj.Size(40, 40), //图标大小}),anchor: "bottom-center",offset: new that.AMapObj.Pixel(-18, 40),draggable: true,cursor: "move",});//  为生成的实例添加 名称that.MarkerObj.setLabel({direction: "top",offset: new AMapObj.value.Pixel(-25, -20), //设置文本标注偏移量content: `<div class='info${DotIndex.value}'>${DianShili.name}</div>`, //设置文本标注内容});//  Marker 点拖拽完成后的毁掉that.MarkerObj.on("dragend", function (e) {GaoDeMuBiaoBianJi.value[DotIndex.value].longitudeAdnLatitude =JSON.stringify([e.lnglat.lng, e.lnglat.lat]);dotDialogType.value = true; // 重新打开编辑窗口that.MarkerObj.setDraggable(false); // 关闭当前点的拖拽方法that.MarkerObj.setCursor("pointer"); //});return that.MarkerObj}

九、清除的实例方法

// 清除矢量图形clearPolygon() {let that = thisthat.PolygonObj.destroy()that.MapObj.add(that.PolygonObj)}// 清除地图实例clearMap() {let that = thisthat.MapObj.destroy()}// 清除点聚合实例clearMarkerCluster() {let that = thisthat.MarkerClusterObj.setMap(null)that.MapObj.add(that.MarkerClusterObj)} 

总结

当前文章是博主在开发中常用的一些方法,单独抽出来 的一些方法便于开发阅读,希望能够帮助到您,感谢您的阅读,谢谢。

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

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

相关文章

批量导出图片,按商品货号命名图片名-Excel易用宝

我们部门有这样一份商品信息表&#xff0c;包含着商品名称&#xff0c;货号和商品对应的图片&#xff0c;现在需要将这些商品图片导出&#xff0c;并且以对应的货号命名图片发给客户。 如果通过在图片上右键“另存为图片”&#xff0c;这样一张一张图片处理效率也太低了。 Exc…

关于SpringBoot项目创建后构建总是失败的问题

第一个问题&#xff1a;IDEA创建项目总是失败 原因&#xff1a;创建项目的时候默认使用的是https://start.spring.io&#xff0c;这个是一个外国网站&#xff0c;众所周知的就是国内访问总是出现不稳定的现象&#xff0c;这就是导致项目创建失败的最终原因。 解决方法&#x…

彻底理解布隆过滤器怎么解决缓存穿透问题

一.应用场景 实际业务中使用Redis&#xff0c;都是先通过用户插入数据到Mysql中&#xff0c;然后更新缓存到Redis&#xff0c;下一次用户再查询该数据的时候就可以通过Redis来进行查询。 先看下图&#xff0c;是假设的一个用户查询的场景&#xff1a; 首先用户查询的时候会去缓…

Leetcode数学部分笔记

Leetcode数学部分笔记 1. 回文数2. 加一3. 阶乘后的零4. x 的平方根5. Pow(x, n) 1. 回文数 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数 是指正序&#xff08;从左向右&#xff09;和倒序&…

大数据技术之新能源汽车数仓【附学习资源】

第一章 新能源汽车数仓的背景与意义 1.1 新能源汽车产业的爆发式增长 新能源汽车产业近年来呈现出爆发式增长&#xff0c;主要得益于全球范围内对环境保护和能源转型的高度重视。随着全球多个国家和地区对碳排放进行严格控制&#xff0c;政策层面的支持为新能源汽车的普及提供…

Nature:ChatGPT助力学术写作的方法

随着生成式AI技术的飞速发展&#xff0c;它在科研中的潜力也逐渐被探索和实践。在Nature最近的一篇文章里&#xff0c;Dritjon Gruda 副教授提到&#xff0c;生成式AI不仅在论文写作和编辑中扮演着越来越重要的角色&#xff0c;帮助科研人员提高工作效率&#xff0c;还在同行评…

分布式 分布式事务 总结

前言 相关系列 《分布式 & 目录》《分布式 & 分布式事务 & 总结》《分布式 & 分布式事务 & 问题》 分布式事务 所谓分布式事务是指操作范围笼罩多个不同节点的事务。例如对于订单节点&库存节点而言&#xff0c;一次完整的交易需要同时调动两个节…

UnityShaderLab 实现黑白着色器效果

实现思路&#xff1a;取屏幕像素的RGB值&#xff0c;将三个通道的值相加&#xff0c;除以一个大于值使颜色值在0-1内&#xff0c;再乘上一个强度值调节黑白强度。 在URP中实现需要开启Opaque Texture ShaderGraph实现&#xff1a; ShaderLab实现&#xff1a; Shader "Bl…

机器人的动力学前馈控制

机器人前馈技术可加快伺服驱动器内部的误差收敛速度&#xff0c;进而改善机器人的动态响应特性&#xff0c;解决机器人在运动过程中的抖动问题&#xff0c;提升机器人系统的精度和效率。 对于关节型机器人而言&#xff0c;在理想的刚性连接下&#xff0c;若给定每个关节所需要的…

Java基础——多线程基础

一、线程介绍 程序&#xff1a;是为完成特定任务&#xff0c;用某种语言编写的一组指令的集合。简单地说&#xff0c;就是我们写的代码进程&#xff1a; 进程是指运行中的程序&#xff0c;比如我们使用qq&#xff0c;就启动了一个进程。操作系统会为该进程分配内存空间。当我们…

在本地运行大语言模型

1&#xff0c;打开下面网站下载&#xff0c;软件 lm studio 2&#xff0c; 设置模型下载路径 3&#xff0c;没有魔法条件的人&#xff0c;去镜像网站下载模型的镜像文件 、 4&#xff0c;

JUC:Synchronized和锁升级

1. 面试题 谈谈你对Synchronized的理解Sychronized的锁升级你聊聊Synchronized实现原理&#xff0c;monitor对象什么时候生成的&#xff1f;知道monitor的monitorenter和monitorexit这两个是怎么保证同步的嘛&#xff1f;或者说这两个操作计算机底层是如何执行的偏向锁和轻量级…

网络知识:IP数据报知识详解

目录 一、IP数据报概念 二、IPV4数据报报头组成 三、IPV6数据报报头组成 今天给大家分享IP数据库相关的知识,希望对大家进一步了解IP协议提供一些帮助! 一、IP数据报概念 TCP/IP协议的网际层接收到传输层传递过来的数据单元,封装成向下(OSI模型的数据链路层、TCP/IP协…

消息中间件-Kafka2-3.9.0源码构建

消息中间件-Kafka2-3.9.0源码构建 1、软件环境 JDK Version 1.8Scala Version 2.12.0Kafka-3.9.0 源码包 下载地址&#xff1a;https://downloads.apache.org/kafka/3.9.0/kafka-3.9.0-src.tgzGradle Version > 8.8Apache Zookeeper 3.7.0 2、源码编译 打开源码根目录修改…

详解:HTTP/HTTPS协议

HTTP协议 一.HTTP是什么 HTTP&#xff0c;全称超文本传输协议&#xff0c;是一种用于分布式、协作式、超媒体信息系统的应用层协议。HTTP往往是基于传输层TCP协议实现的&#xff0c;采用的一问一答的模式&#xff0c;即发一个请求&#xff0c;返回一个响应。 Q&#xff1a;什…

vue中pdf.js的使用,包括pdf显示,跳转指定页面,高亮关键词

目录 一、下载pdf.js 二、引入到本地的项目中 三、实现预览pdf 四、跳转到指定页面 五、利用pdf里面的find查找关键词并可以监听updatefindcontrolstate统计个数 六、修改页面大小为实际大小 七、每次加载pdf都是在第一页 八、修改pdf滚动方式为横向 九、清除pdf缓存 十、pdf.j…

题海拾贝:力扣 231. 2 的幂

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《题海拾贝》、《数据结构与算法之美》 欢迎点赞&#xff0c;关注&#xff01; 目录 …

多级IIR滤波效果(BIQUAD),system verilog验证

MATLAB生成IIR系数 采用率1k&#xff0c;截止频率30hz&#xff0c;Matlab生成6阶对应的biquad3级系数 Verilog测试代码 // fs1khz,fc30hz initial beginreal Sig_Orig, Noise_white, Mix_sig;real fs 1000;Int T 1; //周期int N T*fs; //1s的采样点数// 数组声明…

【实战教程】使用YOLO和EasyOCR实现视频车牌检测与识别【附源码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

word poi-tl 图表功能增强,插入图表折线图、柱状图、饼状图

目录 问题解决问题poi-tl介绍 功能实现引入依赖功能介绍 功能实例饼图模版代码效果图 雷达图&#xff08;模版同饼图&#xff09;代码效果图 柱状图&#xff08;模版同饼图&#xff09;代码效果图 附加CustomCharts 工具类CustomChartSingleSeriesRenderData 数据对象CustomCha…