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()
	})
相关推荐
wl85112 分钟前
SAP HCM 公积金超过上限后的计税方案
前端·html
二月夜4 分钟前
Vue项目打包为WAR文件部署Tomcat完整指南
前端·vue.js·tomcat
终端鹿5 分钟前
Vue3 核心 API 完结篇:toRaw / markRaw / shallowReactive / shallowRef 等进阶响应式 API 详解
前端·javascript·vue.js
bigcarp6 分钟前
edge浏览器IE模式(Internet Explorer 兼容)-tplink摄像头需要
前端·edge
27669582926 分钟前
悟空租车帮app最新登录算法
开发语言·前端·python·悟空app·租车帮·租车帮app·租车帮登录逆向
摇滚侠7 分钟前
微信小程序是前端,也需要 Java 开发的后端服务
java·前端·微信小程序
lxf_gis8 分钟前
【JavaEE】Spring Web MVC
前端·spring·java-ee
sunxunyong10 分钟前
集群增加用户&权限
前端·javascript·vue.js
吃西瓜的年年10 分钟前
react(一)
前端·react.js·前端框架
小年糕是糕手13 分钟前
【35天从0开始备战蓝桥杯 -- Day6】
开发语言·前端·网络·数据库·c++·蓝桥杯