美文网首页
小程序:展示,获取,选择地址

小程序:展示,获取,选择地址

作者: 喵整点薯条 | 来源:发表于2018-12-26 20:56 被阅读32次

    微信小程序对于地址的三种处理。

    • wx.openLocation:展示所处地址
    • wx.getLocation():获取当前地址
    • wx.chooseLocation():打开地图选择地址

    wx.openLocation:使用微信内置地图查看位置。

    • 不需要授权。
    • 可以跳转导航APP进行导航。
    wx.openLocation({
        latitude: this.latitude,
        longitude: this.longitude,
        name: this.name,           // 名称
        address: this.address,    // 地址
        scale: 28
    });
    
    查看位置.png

    wx.getLocation() :获取当前的地理位置、速度。

    • 调用前需要用户授权 scope.userLocation
    • type 默认 wgs84 坐标,返回 gps 坐标, type 为 gcj02 返回可用于 wx.openLocation的坐标。
        wx.getLocation({
          type: 'gcj02', // 返回可以用于wx.openLocation的经纬度
          success(res) {
            const latitude = res.latitude
            const longitude = res.longitude
            wx.openLocation({
              latitude,
              longitude,
              scale: 18
            });
          }
        });
    
    第一次请求位置时会出现的弹窗.png

    最近这个接口有了新的要求,要先在 app 配置说明。

    微信客户端 7.0.0 及以上版本支持

    app的配置

    desc 会在弹窗的标题下作为说明。


    desc出现在以往的标题下作为说明.png

    详细公告:https://developers.weixin.qq.com/community/develop/doc/000ea276b44928f7e8d73d0a65b801?idescene=7&op=1

    但有时候用户拒绝了授权,这样的话,你再次进入的话就不会弹出弹窗了,如果你还想再次请求授权的话,就要用到 wx.getSetting

    wx.getSetting:获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限
    要注意是,请求过的权限,不是用户所有的权限。

    wx.getSetting({
      success(res) {
        console.log(res.authSetting);
        // 具体API的授权字段见权限页面
        // res.authSetting = {
        //   "scope.userInfo": true,
        //   "scope.userLocation": true
        // }
      }
    })
    

    既然用 wx.getSetting 获取到用户已经授权过的权限。如果用户拒绝授权,"scope.userInfo": false,若是 "scope.userInfo": true,则用户授权成功。
    而用户没有申请过位置的授权的话,则scope.userInfo 不会出现在 res 里。

    如果用户拒绝授权后,要想再次打开授权窗口,就要用到wx.openSetting
    wx.openSetting:调起客户端小程序设置界面,返回用户设置的操作结果。设置界面只会出现小程序已经向用户请求过的权限

    在用户没有申请过授权的情况下,不能调用此接口,因为授权页面不会出现你想要但用户没有申请过的授权接口。


    用户申请过的接口列表.png

    以下是申请定位功能的代码:

    wx.getSetting({
        success(res) {
            console.log('get-setting', res.authSetting);
            // 只返回用户请求过的授权
            let auth = res.authSetting;
            if (auth['scope.userLocation']) {
                // 已授权,申请定位地址
                that.getUserLocation();
            } else if (auth['scope.userLocation'] === undefined) {
                // 用户没有请求过的授权,不需要我们主动弹窗,微信会提供弹窗
                that.getUserLocation();
            } else if (!auth['scope.userLocation']) {
                // 没有授权过,需要用户重新授权
                // 这个弹窗是为了实现点击,不然openSetting会失败
                wx.showModal({
                    title: '是否授权当前位置?',
                    content: '需要获取您的地理位置,请确认授权,否则定位功能将无法使用',
                    success: res => {
                        if (res.confirm) {
                            wx.openSetting({
                                success(res) {
                                    console.log('open-setting-suc', res.authSetting);
                                    let setting = res.authSetting;
                                    if (!setting['scope.userLocation']) {
                                        wx.showToast({
                                            title: '地址授权失败,定位功能无法使用',
                                            icon: 'none',
                                        });
                                    } else {
                                        // 地址授权成功,申请定位地址
                                        that.getUserLocation();
                                    }
                                },
                                fail(err) {
                                    // 需要点击,有时候没有点击,是无法触发openSetting
                                    console.log('open-setting-fail',err);
                                }
                            });
                        }
                    }
                });
            } 
        }
    });
    
    async getUserLocation () {
        let res = await wepy.getLocation();
        this.longitude = res.longitude;
        this.latitude = res.latitude;
        this.$apply();
    } 
    

    wx.chooseLocation:打开地图选择位置。

    • 调用前需要用户授权 scope.userLocation。
    • wx.getLocation()的权限字段一样,都是scope.userLocation
    • 返回位置名称,详细地址,gcj02 坐标。
    • wx.getLocation() 的代码大同小异

    wx.chooseLocation需要用户授权成功后才能调用成功。

    以用户当前位置为中心的地图,也可以搜索具体地点

    具体授权表:


    在wx.getSetting的返回可见请求过的权限.png

    授权具体做法:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html

    相关文章

      网友评论

          本文标题:小程序:展示,获取,选择地址

          本文链接:https://www.haomeiwen.com/subject/vqaclqtx.html