大家都知道,小程序中有一个wx.getLocation的方法可以来获取用户坐标,但实际使用使用并没有这么简单。我们还要考虑到用户授权的问题。
我们可以通过wx.getSetting方法,来获取到用户的授权配置信息。从结果中找出关于位置定位的当前值:res.authSetting['scope.userLocation']。这个值可能有三种情况:
1、undefined,第一次请求权限,还没有值
2、true,之前同意过了
3、false,之前拒绝了
只有在值为true时,我们才可以直接调用wx.getLocation获得结果。
值为undefined时,就比较复杂,我们只能先调用wx.getLocation,系统会对用户进行询问,看用户是同意还是不同意。
最麻烦的是值为false时,我们需要弹出权限设置界面,让用户来调整的他设置,即就之前的拒绝状态,调整为同意。当然用户也有可能继续拒绝,那就没办法了。一旦用户点了同意,那就可以调用wx.getLocation了。
下面可以看一下我封闭的一个getLocation的Promise:
/**
* 获取定位
* resolve(res)的结果
* {
accuracy: 65,
errMsg: "getLocation:ok",
horizontalAccuracy: 65,
latitude: 32.05838,
longitude: 118.79647,
speed: -1,
verticalAccuracy: 65
}
*/
, getLocation: function(){
return new Promise(function (resolve, reject) {
//1、授权
wx.getSetting({
success: (res) => {
// res.authSetting['scope.userLocation']
// undefined 初始化进入该页面
// false 非初始化进入该页面,且未授权
// true 地理位置授权
if (res.authSetting['scope.userLocation'] != undefined
&& res.authSetting['scope.userLocation'] != true) {
wx.showModal({
title: '请求授权当前位置',
content: '需要获取您的地理位置,请确认授权',
success: function (res) {
if (res.cancel) {
reject('用户拒绝授权')
} else if (res.confirm) {
wx.openSetting({
success: function (auth) {
if (auth.authSetting["scope.userLocation"] == true) {
//再次授权,调用wx.getLocation的API
getZuobiao()
} else {
reject('用户授权失败')
}
}
})
}
}
})
} else if (res.authSetting['scope.userLocation'] == undefined) {
getZuobiao()
}
else {
getZuobiao()
}
}
})
//2、获取坐标
var getZuobiao = function () {
wx.getLocation({
type: 'wgs84',
success: function (res) {
resolve(res)
},
fail: function (res) {
reject(res.errMsg)
}
})
}
})//eof-Promise
关于小程序获取用户定位坐标的经度和纬度,本文就介绍这么多,希望对大家有所帮助。