首页 > 其他分享 >APP端地图模块

APP端地图模块

时间:2024-10-17 16:19:37浏览次数:9  
标签:const 当前 APP 位置 地图 value 获取 模块 气泡

需求:在uniapp中写一个页面,实现在页面中全屏展示地图模块,使用高德地图API获取当前位置的经纬度坐标,将经纬度度坐标转换为当前位置的中文名,将获取的经纬度展示在map组件中,并且在当前位置上显示标记图,标记当前的位置,在页面中显示出来,点击标记图片会弹出详细信息的气泡,在气泡中展示当前位置的中文名称,在地图控件的右下角中设置一个刷新按钮,实现刷新地图位置的功能。

实现:首先需要你自己去高德开放平台上注册,然后获取一个属于自己的key。

然后要在HBuilder编辑器,在自己的项目中的manifest.json的APP模块配置勾选上定位功能,将从高德开放平台上获取的key跟用户名在当中进行填写。这样子,我们demo的前置条件就准备好咯,接下来就是写代码部分了。

vue3中的script代码部分如下:

<script setup>
	import {onMounted, ref} from 'vue'
	// 初始化经度
	const longitude = ref(0)
	// 初始化维度
	const latitude =ref(0)
	// 初始化标记点
	const markers = ref([])
	// 新增状态来控制气泡显示
	const mcallout = ref(false)
	
	// 获取当前屏幕的宽度和高度,将获取到的值在style中进行赋值
	const {windowWidth,windowHeight,appName} = uni.getSystemInfoSync()
	
	// 编写一个方法,获取当前位置的经纬度信息,并且将其渲染到map组件中,通过图片在当前位置表示定位到当前
	const getCurrentLocation = async () =>{
		try{
			// 获取当前的地理位置,使用国测局坐标系
			const res = await uni.getLocation({
				type:'gcj02'
			})
			// 将获取到的经纬度的进行赋值
			longitude.value = res.longitude
			latitude.value = res.latitude
			// 获取中文的位置名称
			const locationName = await getLocationName(res.longitude,res.latitude)
			// 将获取到的经纬度信息及中文位置名称渲染到markers中
			 markers.value = [{
			      id: 1,
			      longitude: res.longitude,
			      latitude: res.latitude,
			      iconPath: '../../static/images/ma.jpg',
			      width: 30,
			      height: 30,
			      callout: {
				    content: locationName || '当前位置', // 如果没有地址,显示默认文本
			        // 点击显示当前地址详细信息,控制气泡是否显示
					display: mcallout.value ?  'ALWAYS' : 'BYCLICK',
			        padding: 10,
			        borderRadius: 5,
			        bgColor: '#ffffff',
			        color: '#000000',
			      }
			    }]
		}catch(error){
			console.log('获取位置失败',error)
		}
	}
		
		// 使用高德地图API获取当前中文地址
		const getLocationName = async (longitude,latitude) =>{
			// 高德地图key
			const key = '你自己获取的key'
			// 高德地图逆地理编码
			const url = `https://restapi.amap.com/v3/geocode/regeo?output=json&location=${longitude},${latitude}&key=${key}`
				return new Promise((resolve, reject) => {
						// 发送网络请求
						uni.request({
							url: url,
							method: 'GET',
							success: (response) => {
								if (response.data.regeocode) {
									// 解析并返回地址
									resolve(response.data.regeocode.formatted_address)
								} else {
									//返回空字符串
									resolve('')
								}
							},
							fail: (error) => {
								console.log('获取位置失败', error)
								// 拒绝promise
								reject('')
							}
						})
					})
		}
		
		// 更新气泡的状态
		const onCallout = () =>{
			// 切换气泡显示状态
			mcallout.value = !mcallout.value
			// 更新markers以反映当前气泡的状态
			updateCallout()
		}
		// 更新气泡的信息
		const updateCallout = ()=>{
			// 根据气泡状态更新气泡显示方式
			markers.value[0].callout.display = mcallout.value ?  'ALWAYS' : 'BYCLICK'
		}
		
		// 点击图片进行刷新
		const refresh = () => {
		    // 如果不是当前定位的位置时,则重新定位到当前位置 
			// 如果在当前位置,且点击了图标,在气泡中显示当前位置的中文名称
			// 则对气泡进行隐藏,恢复到初始页面,只在当前定位显示图标
			getCurrentLocation()
			// 隐藏气泡
			mcallout.value = false
			// 更新气泡信息
			updateCallout()
		}
		
		onMounted(()=>{
			getCurrentLocation()
		})
		
</script>

map组件中的写法如下:

<view class="">
		<map class="map" 
		:longitude="longitude" 
		:latitude="latitude" 
		:style="'height:'+windowHeight*2+'rpx;'"
		:markers="markers"
		@markertap="onCallout"
		>
		<cover-image
		class="images"
		src="../../static/images/图片1.png"
		@click="refresh"
		></cover-image>
		</map>
	</view>

因为我用的是用uniapp的nvue开发,在nvue页面中,全屏显示用100vh跟百分比是不生效的,所以我们可以用另外一种写法,即获取当前屏幕的宽度跟高度,然后在style中进行赋值,就可以实现全屏显示啦。代码部分如下:

// 获取当前屏幕的宽度和高度,将获取到的值在style中进行赋值
	const {windowWidth,windowHeight,appName} = uni.getSystemInfoSync()
   :style="'height:'+windowHeight*2+'rpx;'"

实现效果:

测试:在HBuider编辑器中,选择浏览器运行展示不出当前的页面,可以在电脑中,下载一个手机模拟器,进行测试,在手机模拟器中,不能选择用x86的,因为高德地图在上面会显示成黑色的,看不出效果,可以用数据线,将手机与电脑进行连接,用真机进行测试,我就是用的真机进行测试的哦

谢谢观看。

标签:const,当前,APP,位置,地图,value,获取,模块,气泡
From: https://blog.csdn.net/weixin_62523623/article/details/143019958

相关文章

  • uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款
    uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款等功能,界面漂亮颜值高,视频商城小工具等,蚂蚁森林种树养鸡农场偷菜样样齐用于视频,商城,直播,聊天等sumer-alipay介绍uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝......
  • uniapp精仿微信源码,基于SumerUI和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视
    uniapp精仿微信源码,基于SumerUI和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视频商城小工具等,朋友圈视频号即时聊天用于视频,商城,直播,聊天,等等场景,源码分享sumer-weixin介绍uniapp精仿微信,基于SumerUI3.0和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视频......
  • 记一次复现实战去付费-虚拟定位App孙悟空
    这个APP需要通过直接去输入卡号,通过卡号付费实现虚拟定位的操作,同时虚拟定位的功能是在java层的静态代码块中实现的,所以直接去HOOK掉对应的检测卡密的过程就可以了分析:JEB实现反编译过程,通过搜索字符串('登录'),发现可以直接去查看到对应的函数位置publicvoidrun()......
  • python+flask框架的党建appapp8(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着信息技术的飞速发展,党建工作也逐渐向数字化、智能化方向转型。关于党建信息化的研究,现有研究主要以传统党建模式与信息技术的融合为主......
  • Vue快速嵌入百度地图,避坑提效指南
    Vue快速嵌入百度地图,避坑提效指南在Vue项目中引用百度地图并没有高德地图那么方便,但是项目要用,这里分享下找到的方法,方便使用到的时候能快速接入,避雷避坑!新建bmap.js文件exportdefault{init:function(){constAK="这里是你申请的百度AK";cons......
  • 智慧养老认证 app:开启便捷养老新时代
    在当今数字化高速发展的时代,智慧养老认证app应运而生,为老年人的生活带来了全新的变革与便利。它犹如一把钥匙,开启了便捷养老的新时代大门。然而,如同任何新兴事物一样,智慧养老认证app在发展过程中也面临着一些问题与挑战。一、可能面临的问题技术接受度问题:许多老年人对新技......
  • Vue2 - 详细实现安装引入百度地图并查询展示周边交通/教育/医疗/商场/生活/娱乐等POI
    前言Vue3版本,请访问在vue2|nuxt2项目开发中,详解高德地图根据当前定位获取周边附近的商圈,vue2高德地图获取周边商圈并将这些地址位置列出来供用户点击跳转和选择,获取当前位置或指定区域周边的交通出行、学校教育、医院诊所、商场购物、生活娱乐、旅游景点、酒店民宿......
  • 获取街道、镇级的地图geoJson数据方法
    获取geoJson数据①、第一种方法(不可获取街道、镇级数据)可以直接获取全国、各省、各市以及个县级市详细地图信息的geoJson数据阿里云数据可视化平台http://datav.aliyun.com/portal/school/atlas/area_selector注意:目前平台还拿不到街道、镇的区域数据。②、第二种方法(可获取街......
  • APP举报
    ......
  • orchard core 2.02 的模块 学习1 实践:创建阿里云sms模块
    1、手动创建2、命令行从模板创建手动创建就是复制一个官方的任意模块。这个不细说。2、我是从命令行创建的。首先要安装orchardcore的模板dotnetnewinstallOrchardCore.ProjectTemplates::2.0.2参考:https://docs.orchardcore.net/en/latest/getting-started/templates......