uni-app中使用腾讯地图sdk(解析经纬度)获取用户所在位置信息

前言: 技术选定

在这里插入图片描述

具体步骤:

1. 注册开发者账号、申请密钥、开通webserviceAPI服务、下载小程序SDK、微信后台配置请求request域名。

在这里插入图片描述

( 请按官方完成以上操作:https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/jsSdkOverview )
注意点:
下载微信的sdk,考虑网络问题(点击没反应),直接F12 找到那串地址copy到地址栏,进行回车;
SDK那串地址:( http://3gimg.qq.com/lightmap/xcx/jssdk/qqmap-wx-jssdk1.2.zip )
微信公众平台中配置request请求域名,注意找对位置及域名直接分号隔开,添加成功后微信开发者工具刷新;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. copy解压后的 qqmap-wx-jssdk.js文件放到项目中,然后在页面引入使用
[ uni-app中我们使用 qqmap-wx-jssdk.js 这个文件就好(另一个.min.js不管)]

在这里插入图片描述

3.上代码
1.uni.getLocation方法 负责获取用户所在经纬度;
2.使用腾讯sdk 的reverseGeocoder方法解析经纬度–拿到用户省市区街道信息;
<template>

</template>

<script>
	//引入腾旭地图sdk
	import QQMapWX from '../../untils/qqmap-wx-jssdk.js'
	import app from '../../App.vue'
	export default {
		data() {
			return {
				title: 'Hello index'
			}
		},
		onLoad() {
			//拿地址
			this.getMapAddress();
		},
		methods: {
			getMapAddress() {
				const tMap = new QQMapWX({
					key: '4DABZ-MTZ2R-PZLW2-WX6FG-W5IXE-APFAF' //开发者密钥
				});
				//使用 uni.getLocation获取用户所在经纬度
				uni.getLocation({
					type: 'wgs84',
					geocode: true,
					success: (res) => {
						console.log("获取经纬度成功");
						this.latitude = res.latitude;
						this.longitude = res.longitude;
					},
					fail: () => {
						console.log("获取经纬度失败");
					},
					complete: () => {
						// 使用腾讯sdk的reverseGeocoder方法 解析经纬度
						tMap.reverseGeocoder({
							location: {
								latitude: this.latitude,
								longitude: this.longitude
							},
							success: function(res) {
								console.log("解析地址成功", res);
								console.log("当前地址:", res.result.address);
								//保存缓存
								uni.setStorage({
									key:'local',
									data:res.result.address,
									success() {
										console.log("用户地址信息已缓存")
									}
								})
							},
							fail: function(res) {
								uni.showToast({
									title: '定位失败',
									duration: 2000,
									icon: "none"
								})
								console.log(res);
							},
							complete: function(res) { //无论成功失败都会执行
								wx.switchTab({
									url: '../appointment/appointment'
								})
							}
						})
					}
				})
			}
		}
	}
</script>

<style>

</style>

点击获取弹框提示信息:
在这里插入图片描述

解决方法:
在xhbuilder中的manifest.json文件中添加如下代码:(这里的提示信息,用于微信获取位置弹框中----自定义的描述文字)
 "permission" : {
	    "scope.userLocation" : {
	        "desc" : "你的位置信息将用于小程序定位" //
	    }
	}

在这里插入图片描述

在这里插入图片描述

如下图:现在应该知道那串—描述文字的作用了吧。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

后语:uni-app中使用腾讯位置服务实现小程序地图选点功能
请看:https://blog.youkuaiyun.com/qq_41930094/article/details/110949997
### 使用 Uni-app 结合 Vue3 和 TypeScript 开发微信小程序并集成腾讯地图获取当前位置 #### 实现概述 Uni-app 支持使用 Vue3 和 TypeScript 来开发跨平台应用程序[^2]。为了在微信小程序中实现定位功能,可以通过 `uni.getLocation` 方法获取用户的地理位置信息[^1]。同时,借助腾讯地图 SDK 提供的功能,可以进一步增强地理信息服务。 以下是完整的代码示例以及说明: --- #### 配置项目环境 确保 HBuilderX 中已启用 TypeScript 支持,并安装必要的依赖项。可以在项目的根目录下运行以下命令以初始化 Vue3 和 TypeScript 环境: ```bash npm install @vue/runtime-core typescript --save-dev ``` --- #### 获取当前地理位置 通过 `uni.getLocation` 接口获取设备的经纬度坐标。此接口返回的结果可以直接传递给腾讯地图服务进行处理。 ##### 示例代码 ```typescript <template> <view class="content"> <button type="primary" @click="getLocation">获取位置</button> <text>经度:{{ longitude }}</text> <text>纬度:{{ latitude }}</text> </view> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; export default defineComponent({ setup() { const longitude = ref<string | null>(null); const latitude = ref<string | null>(null); const getLocation = () => { uni.getLocation({ type: 'wgs84', // 返回 GPS 坐标 success(res) { console.log('成功获取位置:', res); longitude.value = `${res.longitude}`; latitude.value = `${res.latitude}`; }, fail(err) { console.error('获取位置失败:', err); } }); }; return { longitude, latitude, getLocation }; } }); </script> <style scoped> .content { padding: 20px; } </style> ``` 上述代码实现了点击按钮后调用 `uni.getLocation` 并显示经纬度的功能。 --- #### 集成腾讯地图 API使用腾讯地图的服务,需先申请腾讯云账号并开通 LBS 地理信息系统服务,获得对应的密钥(Key)。随后,在前端引入腾讯地图的小程序 SDK 或者直接发起网络请求访问其 RESTful API[^3]。 ##### 请求腾讯地图逆地址解析 假设已经获得了用户经纬度 `(longitude, latitude)`,可通过腾讯地图的逆地址解析接口查询具体的位置名称。 ###### 示例代码 ```typescript const getTencentMapAddress = (latitude: string, longitude: string): Promise<any> => { return new Promise((resolve, reject) => { const key = 'YOUR_TENCENT_MAP_KEY'; // 替换为您的腾讯地图 Key const url = `https://apis.map.qq.com/ws/geocoder/v1/?location=${latitude},${longitude}&key=${key}`; uni.request({ url, method: 'GET', success(res) { if (res.statusCode === 200 && res.data.status === 0) { resolve(res.data.result.address); // 解析后的地址 } else { reject(new Error(`腾讯地图API错误: ${JSON.stringify(res.data)}`)); } }, fail(err) { reject(new Error(`网络请求失败: ${err.message}`)); } }); }); }; // 调用方法 getTencentMapAddress(latitude.value!, longitude.value!) .then(address => { console.log('当前位置:', address); }) .catch(error => { console.error('无法获取地址:', error.message); }); ``` 以上代码展示了如何利用腾讯地图 API经纬度转化为具体的地址描述。 --- #### 注意事项 1. **权限声明** 在 `manifest.json` 文件中的 `permissions` 字段添加 `scope.userLocation`,以便能够正常调用定位功能。 2. **HTTPS 请求限制** 微信小程序仅支持 HTTPS 协议下的外部资源加载,因此务必确认腾讯地图 API 的 URL 符合安全规范。 3. **错误处理机制** 对于可能发生的异常情况(如用户拒绝授权、无网络连接等),应当设计友好的提示语句提升用户体验。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值