vue3+uniapp中使用高德地图实现撒点效果

前言:

vue3+uniapp中使用高德地图实现撒点效果

实现效果:

操作步骤:

1、引入高德插件,并生成js配置插件,详情步骤请点我

import amapFile from '../../libs/amap-wx.js'

2、页面上配置我们的map标签

复制代码
<template>
	<!-- 地图控件 -->
	<view>
		<map 
			id="map" 
			:longitude="mapObj.longitude" 
			:latitude="mapObj.latitude" 
			:scale="mapObj.scale" 
			:markers="mapObj.markers"
			@markertap="markertap"
			@click="mapClick"
		></map>
	</view>
</template>

3、js部分,定义我们相关变量

javascript 复制代码
let mapObj = reactive({
		longitude:116.481028, //经度
		latitude:39.989643, //维度
		scale:17, //地图默认缩放等级
		markers: [], //点位数据
	})

	let locationListener = ref('')
	let initMap = function(){
		const myAmapFun = new amapFile.AMapWX({
			key: 'bb****', // 你的高德地图API Key
		});
		console.log('myAmapFun',myAmapFun)
		
	}



	onShow(()=>{
		initMap()
		initMapWZ()
	})

4、获取我们当前位置

javascript 复制代码
// 获取当前位置信息
	let initMapWZ = function(){
		console.log('init')
		// uni.getLocation uniapp官网提供的获取定位的方法,调用过多会导致无法使用,需要使用监听方法
		uni.getLocation({
			type: 'gcj02', //国测局坐标 gcj02,要使用地图map必须使用这个
			success: res=> {
				getNowDWBackFun(res)
			},
			fail:err=>{
				//getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化
				console.log(err)
				startLocationWatch()
			},
			complete:()=>{
				console.log('complete')
			}
		})
	}

5、更新我们当前实时位置

javascript 复制代码
let startLocationWatch = ()=> {
	  // 1. 检查权限
	  uni.authorize({
	    scope: 'scope.userLocation',
	    success: () => {
	      // 2. 开启位置更新
	      uni.startLocationUpdate({
	        success: () => {
	          // 3. 监听位置变化
	          locationListener = uni.onLocationChange((res) => {
	            // 在此更新地图或处理位置数据
				getNowDWBackFun(res)
	          })
	        },
	        fail: (err) => {
	          console.error('启动位置更新失败:', err)
	        }
	      })
	    },
	    fail: () => {
	      uni.showModal({
	        title: '权限提示',
	        content: '需要位置权限以持续获取位置',
	        success: (res) => {
	          if (res.confirm) uni.openSetting()
	        }
	      })
	    }
	  })
	}

6、将我们当前位置,用图片展示在地图上

javascript 复制代码
// 拿到当前最新位置以后的回调方法
	let getNowDWBackFun = res=>{
		console.log('当前位置的经度:' + res.longitude);
		console.log('当前位置的纬度:' + res.latitude);
		mapObj.longitude = res.longitude
		mapObj.latitude = res.latitude
		mapObj.markers = [{
			id: 1,
			longitude:res.longitude,
			latitude: res.latitude,
			iconPath: '../../static/now.png',
			title: '当前位置',
			width:25,
			height:25
		}]
	}

7、当我们的界面关闭时候,停止我们的实时更新位置方法

javascript 复制代码
// 停止监听
	let stopLocationWatch = ()=>{
	  if (locationListener.value) {
	    uni.stopLocationUpdate() // 停止位置更新
	  }
	}

	onHide(()=>{
		stopLocationWatch()
	})
相关推荐
小灰灰搞电子6 小时前
Rust+Slint 实现温度计源码分享
前端·rust·slint
计算机魔术师7 小时前
面壁智能 OpenBMB 推出 MathForm,面向 Lean 4 数学自动形式化的开源框架、数据集与模型
前端
NeilCarmack7 小时前
Deepseek-harness增加桌面版端序列:第 2 讲 · spawn Electron:当前进程如何“交棒“
前端·javascript·electron
上海魁鲸科技有限公司8 小时前
APS高级排产系统到底有什么用?一文讲清功能、选型与落地建议
前端·microsoft·excel
陈随易8 小时前
Bun v1.4 更新总结:把浏览器、图片、定时任务和工程工具都装进一个运行时
前端·后端·程序员
东风破_9 小时前
TypeScript 高级类型进阶:keyof、Exclude、Record 与类型组合思想
前端·后端·typescript
DS随心转插件10 小时前
Grok生成的html怎么导出——AI导出鸭:大模型结构化输出的“最后一公里”工程化解构
前端·人工智能·ai·html·豆包·deepseek·ai导出鸭
এ慕ོ冬℘゜10 小时前
使用 jQuery 动态渲染表格与状态切换
前端·javascript·jquery
人间凡尔赛10 小时前
2026 前端必修:4 个让 CSS 脱胎换骨的现代新特性(附实战代码)
前端·css
用户21816970493010 小时前
Flutter (二十) 轮播图
前端