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


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 相关文章推荐
javascript 表单规则集合对象
Jul 21 Javascript
extjs 学习笔记(三) 最基本的grid
Oct 15 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
Apr 27 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
May 14 Javascript
javascript动态判断html元素并执行不同的操作
Jun 16 Javascript
9个让JavaScript调试更简单的Console命令
Nov 14 Javascript
百度搜索框智能提示案例jsonp
Nov 28 Javascript
微信分享调用jssdk实例
Jun 08 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
Jun 08 Javascript
微信小程序动画(Animation)的实现及执行步骤
Oct 28 Javascript
Vue.js轮播图走马灯代码实例(全)
May 08 Javascript
微信小程序云开发实现云数据库读写权限
May 17 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封装好的人民币数值转中文大写类
2015/12/20 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
2019/03/25 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
DOM下的节点属性和操作小结
2009/05/14 Javascript
EXT中xtype的含义分析
2010/01/07 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
2016/08/24 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
小程序tab页无法传递参数的方法
2018/08/03 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
laypage.js分页插件使用方法详解
2019/07/27 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
Python切片知识解析
2016/03/06 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
Python3 replace()函数使用方法
2018/03/19 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
python web框架中实现原生分页
2019/09/08 Python
python读写文件write和flush的实现方式
2020/02/21 Python
python连接mysql有哪些方法
2020/06/24 Python
工作证明范本(2篇)
2014/09/14 职场文书
纪念9.18事变演讲稿
2014/09/14 职场文书
合伙购房协议样本
2014/10/06 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript