【小程序】微信小程序获取用户位置,经纬度及逆地址解析


前言

在针对小程序埋点时,需要获取到用户的位置,uniapp有自带获取位置的方法uni.getLocation其中可以获取到经纬度,以及中文地址address,但是中文地址仅APP端支持,小程序是用不了的。现在只能拿到经纬度,再通过经纬度逆地址解析,得到中文地址。


提示:以下是本篇文章正文内容,下面案例可供参考

一、获取经纬度

获取经纬度的方法有很多:

  1. uniapp可以通过uni.getLocation获取
  2. wx.getLocation获取
  3. 三方api/sdk获取

1,需要在app.json里面声明你所需要用的接口

在uniapp的manifest.json源码视图里面进行声明

如果不声明是无法正常使用接口的,更多接口声明可以查看微信官方规则

"requiredPrivateInfos": [
	    "getLocation"
	  ],

注意:如果小程序上线,需要提前申请开通使用接口的权限且只针对部分主体提供使用权限,否则审核不会通过 微信官方申请

2,注意保护用户的隐私,需要经过用户授权之后才可以获取用户位置,如果用户拒绝了也是无法获取到的。
在app.json里面配置获取用户定位权限的提示:

"permission": {
    
    
	    "scope.userLocation": {
    
    
	      "desc": "你的位置信息将用于小程序位置接口的效果展示" // 定位
	    }
	  },

3,判断用户是否已经授权定位,如果没有授权则弹出获取定位权限的提示,可通过wx.getSetting拿到用户的授权信息,没有授权弹出授权请求,用户可拒绝,若之前用户已经授权则不会弹出请求,直接返回success

/**
 * 获取定位授权
 * author: xjw
 */
	wx.getSetting({
    
    
		success(res) {
    
    
			if (!res.authSetting['scope.userLocation']) {
    
    
				wx.authorize({
    
    
					scope: 'scope.userLocation',
					success() {
    
    
						// 用户已授权位置权限
						// 可以继续访问位置信息
					},
					fail() {
    
    
						// 用户拒绝了位置权限
						// 可以相应地处理拒绝情况
						console.log("用户拒绝了位置权限")
					},
				});
			} else {
    
    
				// 用户已经授权了位置权限
				// 可以继续访问位置信息
				console.log("用户已经授权了位置权限")
			}
		},
	});
}

4,获取经纬度
通过wx.getLocation拿到用户的经纬度

wx.getLocation({
    
    
	type: 'wgs84',
	success: function(res) {
    
    
		console.log('用户已授权位置权限,经纬度:' + res.longitude, res.latitude);
	},
	fail: function() {
    
    
		console.log("获取地理位置失败")
	}
})

二、逆地址解析

小程序wx.getLocation只能获取经纬度, 这时候想要具体地址就需要借助第三方API(逆地址解析) 我这边第三方以腾讯位置服务举例

1.申请API Key

现在先注册腾讯地图,获取key
https://lbs.qq.com/dev/console/key/manage
在这里插入图片描述

2.使用WebService API

获取到api密钥之后就可以使用API了

wx.request({
    
    
		url: 'https://apis.map.qq.com/ws/geocoder/v1/',
		data: {
    
    
			location: `${
      
      latitude},${
      
      longitude}`,
			key: 'API_KEY',
			get_poi: 0,
			output: 'json'
		},
		success(res) {
    
    
			var address = res.data.result.address;
		},
		fail(error) {
    
    
			console.error('逆地理编码失败:', error);
		}
	});

该处使用的url网络请求的数据。接收参数经纬度
返回的res.data.result.address中就有解析出来的中文地址


猜你喜欢

转载自blog.csdn.net/m0_71621983/article/details/132210196