大家都知道,小程序中有一个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

关于小程序获取用户定位坐标的经度和纬度,本文就介绍这么多,希望对大家有所帮助。

03-14 09:16