微信小程序获取当前位置和城市名


Posted in Javascript onNovember 13, 2019

   1, 获取当前地理位置,首先要拿到用户的授权wx.openSetting;

    2,微信的getLocation接口,获取当前用户的地理位置(微信返回的是经纬度,速度等参数);

    3,微信没有将经纬度直接转换为地理位置,借用腾讯位置服务中关于微信小程序的地理转换JS SDK 的API(返回信息中包括国家,省,市,区,经纬度等地理位置)
步骤描述清楚以后,下面就开始按步骤操作了;(本文仅仅讲述如何获取用户地理位置的授权)

图示为获取用户地理位置授权弹窗

微信小程序获取当前位置和城市名

在用户首次进入某页面(需要地理位置授权)时候,在页面进行onLoad,onShow时候,进行调用wx.getLocation要求用户进行授权;以后每次进入该页面时,通过wx.getSetting接口,返回用户授权具体信息。

wx.getSetting接口具体API地址链接为点击打开链接

微信小程序获取当前位置和城市名

 上图中scope.userLocation就是地理授权的标志;

当该标志是underfind,表示用户初次进入该页面,当该标志是false,表示用户初次进入该页面拒绝了地理授权,应进行重新要求获取授权。

wx.getSetting({
   success: (res) => {
    console.log(JSON.stringify(res))
    // res.authSetting['scope.userLocation'] == undefined  表示 初始化进入该页面
    // res.authSetting['scope.userLocation'] == false  表示 非初始化进入该页面,且未授权
    // res.authSetting['scope.userLocation'] == true  表示 地理位置授权
    if (res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true) {
     wx.showModal({
      title: '请求授权当前位置',
      content: '需要获取您的地理位置,请确认授权',
      success: function (res) {
       if (res.cancel) {
        wx.showToast({
         title: '拒绝授权',
         icon: 'none',
         duration: 1000
        })
       } else if (res.confirm) {
        wx.openSetting({
         success: function (dataAu) {
          if (dataAu.authSetting["scope.userLocation"] == true) {
           wx.showToast({
            title: '授权成功',
            icon: 'success',
            duration: 1000
           })
           //再次授权,调用wx.getLocation的API
          } else {
           wx.showToast({
            title: '授权失败',
            icon: 'none',
            duration: 1000
           })
          }
         }
        })
       }
      }
     })
    } else if (res.authSetting['scope.userLocation'] == undefined) {
     //调用wx.getLocation的API
    }
    else {
     //调用wx.getLocation的API
    }
   }
  })

在拿到用户授权以后,使用微信的API获取当前位置的经纬度微信获取位置API

微信小程序获取当前位置和城市名

这里,我们进行使用的是腾讯位置服务;专为小程序开发者提供LBS数据服务工具包,可以在小程序中调用腾讯位置服务的POI检索、关键词输入提示、地址解析、逆地址解析、行政区划和距离计算等数据。 

    1,得到开发者秘钥

    2,下载微信小程序javaScriptSDK,

    3,安全域名设置,在“设置” -> “开发设置”中设置request合法域名,添加http://api.map.qq.com

在文件中引入对应的javaScriptSDK文件

var QQMapWX = require('../../../utils/qqmap-wx-jssdk.js');
var qqmapsdk;

在文件中进行js调用

微信小程序获取当前位置和城市名

 最后的结果就是可以获得自己所在城市的具体位置了

微信小程序获取当前位置和城市名

index.js部分的代码

//index.js
//获取应用实例
const app = getApp();
var QQMapWX = require('../../../utils/qqmap-wx-jssdk.js');
var qqmapsdk;
Page({
 data: {
  province: '',
  city: '',
  latitude: '',
  longitude: ''
 },
 onLoad: function () {
  qqmapsdk = new QQMapWX({
   key: 'XXXX-XXXX-XXXX-XXXX' //这里自己的key秘钥进行填充
  });
 },
 onShow: function () {
  let vm = this;
  vm.getUserLocation();
 },
 getUserLocation: function () {
  let vm = this;
  wx.getSetting({
   success: (res) => {
    console.log(JSON.stringify(res))
    // res.authSetting['scope.userLocation'] == undefined  表示 初始化进入该页面
    // res.authSetting['scope.userLocation'] == false  表示 非初始化进入该页面,且未授权
    // res.authSetting['scope.userLocation'] == true  表示 地理位置授权
    if (res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true) {
     wx.showModal({
      title: '请求授权当前位置',
      content: '需要获取您的地理位置,请确认授权',
      success: function (res) {
       if (res.cancel) {
        wx.showToast({
         title: '拒绝授权',
         icon: 'none',
         duration: 1000
        })
       } else if (res.confirm) {
        wx.openSetting({
         success: function (dataAu) {
          if (dataAu.authSetting["scope.userLocation"] == true) {
           wx.showToast({
            title: '授权成功',
            icon: 'success',
            duration: 1000
           })
           //再次授权,调用wx.getLocation的API
           vm.getLocation();
          } else {
           wx.showToast({
            title: '授权失败',
            icon: 'none',
            duration: 1000
           })
          }
         }
        })
       }
      }
     })
    } else if (res.authSetting['scope.userLocation'] == undefined) {
     //调用wx.getLocation的API
     vm.getLocation();
    }
    else {
     //调用wx.getLocation的API
     vm.getLocation();
    }
   }
  })
 },
 // 微信获得经纬度
 getLocation: function () {
  let vm = this;
  wx.getLocation({
   type: 'wgs84',
   success: function (res) {
    console.log(JSON.stringify(res))
    var latitude = res.latitude
    var longitude = res.longitude
    var speed = res.speed
    var accuracy = res.accuracy;
    vm.getLocal(latitude, longitude)
   },
   fail: function (res) {
    console.log('fail' + JSON.stringify(res))
   }
  })
 },
 // 获取当前地理位置
 getLocal: function (latitude, longitude) {
  let vm = this;
  qqmapsdk.reverseGeocoder({
   location: {
    latitude: latitude,
    longitude: longitude
   },
   success: function (res) {
    console.log(JSON.stringify(res));
    let province = res.result.ad_info.province
    let city = res.result.ad_info.city
    vm.setData({
     province: province,
     city: city,
     latitude: latitude,
     longitude: longitude
    })
   },
   fail: function (res) {
    console.log(res);
   },
   complete: function (res) {
    // console.log(res);
   }
  });
 }
})

页面展示部分的代码

<!--index.wxml-->
<view class="retailStore">
  <view class="cnaps borderBottom">
  <text>所在城市</text>
  <input class='m-bbt' placeholder-class='plhStyle' type='number' maxlength='50' placeholder='' bindinput="bindKeyInput" value='{{province}} {{city}}' disabled></input>
 </view>
</view>

总结

以上所述是小编给大家介绍的微信小程序获取当前位置和城市名,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
xss文件页面内容读取(解决)
Nov 28 Javascript
jquery获得页面元素的坐标值实现思路及代码
Apr 15 Javascript
javascript自定义的addClass()方法
May 28 Javascript
Node.js文件操作详解
Aug 16 Javascript
JavaScript中的Truthy和Falsy介绍
Jan 01 Javascript
纯javascript实现简单下拉刷新功能
Mar 13 Javascript
express文件上传中间件Multer详解
Oct 24 Javascript
Angular的$http与$location
Dec 26 Javascript
详解webpack介绍&amp;安装&amp;常用命令
Jun 29 Javascript
Vue CL3 配置路径别名详解
May 30 Javascript
实现一个 Vue 吸顶锚点组件方法
Jul 10 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
Aug 07 Javascript
使用Promise封装小程序wx.request的实现方法
Nov 13 #Javascript
微信小程序wx.request的简单封装
Nov 13 #Javascript
vue使用prop可以渲染但是打印台报错的解决方式
Nov 13 #Javascript
highcharts.js数据绑定方式代码实例
Nov 13 #Javascript
vue prop属性传值与传引用示例
Nov 13 #Javascript
Vue 使用Props属性实现父子组件的动态传值详解
Nov 13 #Javascript
浅谈vue 锚点指令v-anchor的使用
Nov 13 #Javascript
You might like
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
php页码形式分页函数支持静态化地址及ajax分页
2014/03/28 PHP
初识php MVC
2014/09/10 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
js左侧多级菜单动态的解决方案
2010/02/01 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
Python 访问限制 private public的详细介绍
2018/10/16 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
2021/03/04 Python
艺术系应届生的自我评价
2013/10/19 职场文书
大学生年度自我鉴定
2013/10/31 职场文书
个人简历自荐信
2013/12/05 职场文书
厂长助理岗位职责
2013/12/27 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
会计专业大学生职业生涯规划书
2014/02/11 职场文书
读书小明星事迹材料
2014/05/03 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
公司人力资源管理制度
2015/08/05 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL