小程序获取用户定位坐标的经度和纬度及权限问题


关键词

小程序 定位 坐标 经度 纬度 权限

摘要

本文介绍在小程序如何获取用户定位坐标的经度和纬度,包括用户授权等一些内容。

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



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

 

要饭二维码

洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:115085382!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D

« 微信小程序获取获取unionId的两种方法 微信小程序加载时先获取session_key登录状态 »