当前位置: 首页 > news >正文

vue3.x项目使用高德地图JS API 2.0

该篇文章主要讲述项目中某个需求中对高德地图JS API的相关使用,截取部分代码用作API使用示例,代码并不完整,可酌情参考

vue3.x项目使用高德地图JS API 2.0

1.API加载函数

// 需先安装依赖包:npm i @amap/amap-jsapi-loader --saveimport AMapLoader from '@amap/amap-jsapi-loader'const load = (options?: {plugins?: Array<string>AMapUI?: {plugins?: Array<string>}
}) => {if (!window._AMapSecurityConfig) {window._AMapSecurityConfig = {securityJsCode: "「你申请的安全密钥」"}}return AMapLoader.load({key: '', // 申请好的Web端开发者Key,首次调用 load 时必填version: '2.0',plugins: options?.plugins || [],AMapUI: {version: '1.1',plugins: options?.AMapUI?.plugins || []}})
}export default {load
}

2.初始化地图

<template><div class="amap" :id="mapId"></div>
</template>import AMapLoader from '@/util/AMap'let AMap = null
let map = null
let listMarkers = [] // 用于存储标记点
const mapId = ref(Date.now().toString())
const location = reactive({latitude: '',longitude: ''
})AMap = await AMapLoader.load()
map = new AMap.Map(mapId.value, {center: [location.longitude, location.latitude], // 地图中心点zoom: 20 // 缩放比例
})

3.引入地图插件

// 引入插件定位控件
AMap.plugin('AMap.Geolocation', function () {const Geolocation = new AMap.Geolocation({offset: [24, 240],showCircle: false})map.addControl(Geolocation)
})

4.自定义标记点

自定义图标图片locationImage引入方式:

  1. 网络地址:locationImage = 'https://image.com/image'
  2. 本地地址:locationImage = require('./image')
  3. base64编码:locationImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUg....'
const locationIcon = new AMap.Icon({size: [58, 64],image: locationImage,imageSize: [58, 64]
})
const marker = new AMap.Marker({position: [location.longitude, location.latitude],icon: locationIcon
})
marker.setMap(map)

5.标记绑定自定义点击事件

// 在创建标记时绑定自定义事件
const createMarkers = (data) => {const markers = []data.forEach((item, index) => {const marker = new AMap.Marker({position: [item.longitude, item.latitude],icon: markerIcon})marker.on('click', function () {changeMarker(item, marker, index)})markers.push(marker)marker.setMap(map)})listMarkers = markers
}

6.切换选中标记点图标

// 点击时判断点击标记点是否为选中标记点,从而切换标记点图标
const changeMarker = (item, marker, index) => {if (selectMarker && selectMarker._amap_id !== marker._amap_id) selectMarker.setIcon(markerIcon)marker.setIcon(storeIcon)selectMarker = marker
}

7.打开信息窗体(自定义显示内容)

// 根据选中标记点,在标记点上方显示标记点信息窗体
const changeMarker = (item, marker, index) => {const infoWindow = new AMap.InfoWindow({isCustom: true,content: `<div style="background-color: #fff;padding: 6px;position: relative">${item.customername}<div style="width: 0;height: 0;border-left: 5px solid transparent;border-right: 5px solid transparent;border-top: 5px solid #fff;position: absolute;bottom: -5px;left: 50%;transform: translateX(-50%);"></div></div>`,offset: new AMap.Pixel(32, 0)})openInfoWindow = infoWindowopenInfoWindow.open(map, [item.longitude, item.latitude])
}

8.计算距离

// 使用高德地图API计算经纬度距离
const calculateDistance = (target) => {const start = [location.longitude, location.latitude]const end = [target.longitude, target.latitude]const distance = AMap.GeometryUtil.distance(start, end)return distance.toFixed(2)
}

9.关闭窗体以及移除标记点

const resetMap = () => {if (openInfoWindow) openInfoWindow.close()listMarkers.forEach((item) => {item.remove()})
}

10.销毁

onBeforeUnmount(() => {if (map) {map.destroy()map = null}AMap && (AMap = null)
})

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何使用 Vidu Studio 根据照片和提示词生成视频
  • 深入剖析 MQTT 协议:物联网通信的核心力量
  • 【服务器第一期】Xshell、Xftp下载及连接
  • 无人机巡检:突破传统局限,引领智能监测新时代
  • Js中call、apply和bind的区别
  • LibSVM介绍及使用
  • OpenAI gym: How to get complete list of ATARI environments
  • 快人一步迅为LPDDR5版本瑞芯微RK3588核心板升级了
  • k8s环境搭建(续)
  • Typora调整图片大小的两种方式:zoom或width/height
  • docker_持久化存储
  • 2024年06月中国电子学会青少年软件编程(图形化)等级考试试卷(二级)答案 + 解析
  • 工商银行银企直联接口清单
  • Linux开发工具的使用
  • 深度解读MySQL意向锁的工作原理机制与应用场景
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Android交互
  • Apache Spark Streaming 使用实例
  • canvas 高仿 Apple Watch 表盘
  • Create React App 使用
  • Git同步原始仓库到Fork仓库中
  • Git学习与使用心得(1)—— 初始化
  • java正则表式的使用
  • js面向对象
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • PAT A1017 优先队列
  • SpringBoot几种定时任务的实现方式
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 编写符合Python风格的对象
  • 初识 webpack
  • 给初学者:JavaScript 中数组操作注意点
  • 盘点那些不知名却常用的 Git 操作
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (4.10~4.16)
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计大学生兼职系统
  • (五)MySQL的备份及恢复
  • (一)认识微服务
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .NET WPF 抖动动画
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .Net接口调试与案例
  • .Net中wcf服务生成及调用
  • .NET中的十进制浮点类型,徐汇区网站设计
  • @ConfigurationProperties注解对数据的自动封装
  • [20171106]配置客户端连接注意.txt
  • [AI Embedchain] 开始使用 - 全栈