微信小程序定位权限怎么打开_怎么用微信定位朋友的位置

微信小程序定位权限怎么打开_怎么用微信定位朋友的位置最近有客户提了一个需求,要求登陆考试系统的测评者记录下当时的位置。web形式的虽然可以通过IP来定位,但是IP太容易作假了,所以为了比较高的准确性,最后决定用微信小程序,虽然也有作假的可能,但比web形式要好一些。一、准备工作既然要定位,那么肯定需要找到跟地图相关的功能API,查找微信开发文档,因为我们这里只是需要记录地位功能,不需要打开地图,所以只使用wx.getLocatio…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

最近有客户提了一个需求,要求登陆考试系统的测评者记录下当时的位置。web形式的虽然可以通过IP来定位,但是IP太容易作假了,所以为了比较高的准确性,最后决定用微信小程序,虽然也有作假的可能,但比web形式要好一些。

一、 准备工作

    既然要定位,那么肯定需要找到跟地图相关的功能API,查找微信开发文档,因为我们这里只是需要记录地位功能,不需要打开地图,所以只使用wx.getLocation 即可。查看这个方法后,发现微信只是提供了定位的经纬度,居然没有提供地点的中文名称,

我们要保存地址,肯定不能只是保存经纬度,这个一般没人能看的懂吧,而坑爹的是,找了一通,我也没发现微信小程序有提供这个功能。在网上搜索了下,百度地图和高德地图由当前经纬度获取地点的API功能。考虑到上次天气预报小程序用的是高德,这次还是用高德的功能吧。使用的方式一样,要在高德开放平台建一个定位的应用,步数很简单,第一步类型里选择“导航”,第二步平台项选择“微信小程序”即可,创建好后,会得到一个应用的key。

二、创建小程序项目

    先看看小程序中的getLocation这个功能结果到底是什么

   打开index.js,将page({})中onLoad 方法中的代码改成如下

wx.getLocation({
      type: 'wgs84',
      success(res) {
        console.log("-----success location-----")
        console.log(res)

        //var latitude = res.latitude
        //var longitude = res.longitude
        // wx.openLocation({
        //   latitude,
        //   longitude,
        //   scale: 18
        // })         

      },
      fail(res) {
        console.log("-----fail location-----")
        console.log(res)      
      }
    });

Jetbrains全家桶1年46,售后保障稳定

编译后,如果是第一次使用,应该会报一个需要授权的提醒,那么先要在app.json里添加一段代码

"permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于小程序位置接口的效果展示"
    }
  }

,然后授权定位即可,授权成功后,在控制台就能看到打印的一个json字符串:

微信小程序定位权限怎么打开_怎么用微信定位朋友的位置

重要的是latitude 维度 、 longitude 经度 这2个数据 ; 其余字段的含义,可以查看文档,文档中都有详细解释。

如果把上面代码中的注释部分打开,小程序编译后显示的就是当前的地图。从地图上看,定位是不准确的,原因我没去查,我猜测就是因为通过IP去定位的,所以导致有出入,如果是在手机上查看,定位就是准确的。

微信小程序定位权限怎么打开_怎么用微信定位朋友的位置

三、结合高德地图API定位地点

    修改index.wxml文件,将定位的地点名称显示在页面上。

<view>
<text>{
  
  {address}}</text>
<view wx:for="{
  
  {arrAddress}}">
  <text>
    {
  
  {item.address}} -- {
  
  {item.name}}
  </text>
</view>
<button open-type="openSetting">打开授权设置页</button> 
</view>

第一个text标签里存放定位的地点名,循环的view标签先不要管,button是打开授权设置页用的,小程序开发工具有时候会有问题,当不是第一次使用授权时,有时候不会弹出授权的对话框,可以通过这个按钮直接打开,下面我也会讲如果自定义一个对话框提醒,然后打开授权页面。

查找高德地图提供的定位API,进入高德开放平台网站,找到“开发支持”–>”微信小程序SDK” –> “参考手册”–>”基础类”,

下面的 getPoiAround(Object)  周边POI地址,getRegeo(Object) 定位地址, 均可获取到地址,但我们只是用来地位,用第二个即可。将index.js代码更新如下

const amapFile = require('../../utils/amap-wx.js')
const app = getApp()

Page({
  data: {    
    arrAddress:[],
    address:''
  },  
  onLoad: function () {
    var $that = this;
    wx.getLocation({
      type: 'wgs84',
      success(res) {
        console.log("-----success location-----")
        console.log(res)

        var myAmapFun = new amapFile.AMapWX({ key: app.baseData.gdLocationKey });
        myAmapFun.getRegeo({
          success: function (data) {
            
            //成功回调
            console.log("data ----- ")
            console.log(data)
            
            var address = data[0].desc + "【" + data[0].name + "】"
            $that.setData({ address: address });
          },
          fail: function (info) {
            //失败回调
            console.log(info)
            msg(info.errMsg)
          }
        });      

      },
      fail(res) {
        console.log("-----fail location-----")
        console.log(res)      
      }
    });    
    
  },
  onReady:function(){
    console.log("----onReady-----") 
  }
})

编译后,在模拟器页面上就会出现定位的地点名称,同样存在误差问题,如果用手机就没有问题了。

微信小程序定位权限怎么打开_怎么用微信定位朋友的位置

其实看上面的代码,完全可以不需要用小程序的wx.getLocation  ,直接用高德的API就能定位当前地点,这里之所以还是用wx.getLocation,是为了提醒授权的原因,但是只是这样写也是有问题的,如果是非第一次授权,只会报错,不会弹出授权的提醒对话框,这里要自己写一个提醒框。

四、自定义授权地位对话框

  先将上面的代码提取到一个方法里,我这里放在了util.js中

module.exports={
  msg:msg,
  getLocation: getLocation
}
function msg(title){  
  wx.showToast({
    title: title,
    icon: "success",
    duration: 1000
  })
}
function getLocation($that) {
  var address ;
  wx.getLocation({
    type: 'wgs84',
    success(res) {
      console.log("-----success location-----")
      console.log(res)
      var myAmapFun = new amapFile.AMapWX({ key: app.baseData.gdLocationKey });
      myAmapFun.getRegeo({
        success: function (data) {
          //成功回调
          console.log("data ----- ")
          console.log(data)          
          address = data[0].desc + "【" + data[0].name+ "】"
          $that.setData({ address: address });
        },
        fail: function (info) {
          //失败回调
          console.log(info)
          msg(info.errMsg)
        }
      })
    },
    fail(res) {
      console.log("-----fail location-----")
      console.log(res)
      //settingLoaction($that)
    }
  });
}

修改index.js

const util = require('../../utils/util.js')
const app = getApp()
Page({
  data: {    
    arrAddress:[],
    address:''
  },  
  onLoad: function () {
    
    console.log("----onLoad-----")
    util.getLocation(this);
    
  }
})

编译后,模拟器中也会出现定位的地点,这时候点击模拟器中“打开授权设置页”按钮,将“使用我的地理位置”开关关闭掉,重新编译小程序,控制台就会报错,但是模拟器并不会弹出授权对话框。即使只是使用高德的API,控制台也会报错:

{errCode: “0”, errMsg: “getLocation:fail auth deny”} 提示未授权定位。

判断有没有授权其实就是通过微信小程序的获取用户的当前设置里面的“scope.userLocation” 是否为true判断。

编写判断方法

function settingLoaction($that){
  wx.getSetting({    
    success: function (res) {
      console.log("-----userLocation-----")
      console.log(res)
      if (res.authSetting['scope.userLocation'] != true) {
        wx.showModal({
          title: '授权当前位置',
          content: '需要获取您的地理位置,请确认授权,否则无法获取您所需数据',
          success: function (res) {
            if (res.cancel) {//点击取消
              msg("授权失败1!")
              getLocation($that)
            } else if (res.confirm) {//点击确定
              wx.openSetting({
                success: function (res) {
                  console.log(res)
                  if (res.authSetting['scope.userLocation'] == true) {
                    msg("授权成功1!")
                    getLocation($that)
                  } else {
                    msg("授权失败2!")
                    getLocation($that)
                  }
                }
              })
            }
          }
        });
      }
    }
  });
}

然后将上面的 getLocation($that) 方法中获取定位失败返回函数中注释掉的 settingLoaction($that) 开启即可,这时重新编译小程序,会弹出自定义的对话框。我这里写的方法是只有当用户授权了,对话框才会消失,实际用的时候,可以根据自己需要操作。

微信小程序定位权限怎么打开_怎么用微信定位朋友的位置

五、getPoiAround

  这个是高德提供的获取经纬度周边20个地址的功能,将上面的getRegeo换成这个即可,然后将值赋给前端即可

   $that.setData({ arrAddress: data.markers });

微信小程序定位权限怎么打开_怎么用微信定位朋友的位置

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/203613.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • hbase面试题整理

    hbase面试题整理一.简单介绍下Hbase(1)Hbase一个分布式的基于列式存储的数据库,基于Hadoop的hdfs存储,zookeeper进行管理。(2)Hbase适合存储半结构化或非结构化数据,对于数据结构字段不够确定或者杂乱无章很难按一个概念去抽取的数据。(3)Hbase为null的记录不会被存储.(4)基于的表包含rowkey,时间戳,和列族。新写入数据时,时间戳更新,同时可以查询到以前的版本.(5)hbase是主从架构。hmaster作为主节点,hregionserver作为从节点。..

  • 5.3 SPPNet

    5.3 SPPNet5.3SPPNet学习目标 目标 知道SPPNet与RCNN的对比特点 掌握空间金字塔池化(spatialpyramidpooling)的原理和作用 掌握SPPNet的训练过程以及测试结果对比 知道SPPNet优缺点总结 应用 无 5.3.1SPPNet介绍针对之前R-CNN的缺点,我们来看1、每个候选区域都进行了卷积操作提取特征,计算量大速度低效。2、对于卷积网络来讲都需要输入的

  • vps怎么传文件_服务器搭建vps

    vps怎么传文件_服务器搭建vpsvps搭建文件服务器内容精选换一换方法一:在VSCode上选择“文件>首选项>设置”,再选择“工作区”,并在输入框搜索“kunpeng.remote.ssh.machineinfo”,单击“在settings.json中编辑”后生成settings.json文件。如图1所示。生成settings.json文件方法二:在VSCode上选择“资源管理器”,找到“.vs例如main…

    2022年10月23日
  • c语言中uint8_uint16转uint8

    c语言中uint8_uint16转uint8C++的基础数据类型:名称字节长度取值范围bool1false,truechar1-128~127signedchar1-128~127unsignedchar10~255short(signedshort)2-215~215-1unsignedshort20~216-1int(signedin…

  • 电工电子电力拖动及自动化技术考核实训台QY-DG800D[通俗易懂]

    电工电子电力拖动及自动化技术考核实训台QY-DG800D[通俗易懂]一、产品简介QY-DG800D高性能电工电子电拖及自动化技术实训与考核装置是针对我国高等院校、职业技术教育的需求而开发的综合性实训考核装置。装置融合了电工、电子、电力拖动、PLC、变频器等实训内容,配备多块可自由组合的实训挂箱,适用各类职业院校、中专、技校电工、电子、电拖、机电一体化、自动化等专业的教学和从事相关专业的技术人员实训考核。二、产品特点装置实训屏上380V交流输出处设有单片机全程监控的一套过流保护装置,相间、线间直接短路或过载,电流超过设定值,系统即告警并切断总电源,确保设备安全.

  • linux find命令详解_linux du命令详解

    linux find命令详解_linux du命令详解find命令格式:findpath-option[-print][-exec-okcommand]{}\;find命令的参数:path:要查找的目录路径。~表示$HO

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号