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


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 相关文章推荐
编写Js代码要注意的几条规则
Sep 10 Javascript
Node.js开发指南中的简单实例(mysql版)
Sep 17 Javascript
jquery按回车提交数据的代码示例
Nov 05 Javascript
javascript实现的闭包简单实例
Jul 17 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
Aug 23 Javascript
AngularJS实现Input格式化的方法
Nov 07 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
Jan 11 Javascript
利用transition实现文字上下抖动的效果
Jan 21 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
Feb 19 Javascript
Angular4自制一个市县二级联动组件示例
Nov 21 Javascript
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
前端JavaScript大管家 package.json
Nov 02 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开源建站平台小结
2010/04/22 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
Javascript的一种模块模式
2008/03/22 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
nodejs导出excel的方法
2015/06/30 NodeJs
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
node express使用HTML模板的方法示例
2019/08/22 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
2020/07/20 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
2020/07/31 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
Python实现单词翻译功能
2017/06/06 Python
Python操作SQLite数据库的方法详解
2017/06/16 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
Python中is和==的区别详解
2018/11/15 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
python操作链表的示例代码
2020/09/27 Python
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
单位在职证明范本
2014/01/09 职场文书
校园十大歌手策划书
2014/02/01 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
本科毕业生自荐信
2014/06/02 职场文书
大学生个人求职信例文
2014/07/07 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
python实现简易名片管理系统
2021/04/11 Python