微信小程序中使用 wx.getLocation获取当前详细位置并计算距离

news2024/10/5 13:51:17

文章目录

    • 前言
    • 1,wx.getLocation()
    • 2,获取详细地址
    • 3,计算距离
    • 4,报错信息: getLocation:fail 频繁调用会增加电量损耗
    • 5,报错信息: 请求源未被授权

前言

wx.getLocation只能够获取经纬度,不能够拿到详细地址;如果你的项目刚好也使用腾讯地图的api,那么可以通过腾讯地图的逆解析就能拿到详细地址了;

1,wx.getLocation()

先介绍一下wx.getLocation()方法的使用; 此方法可以获取当前的经纬度和速度、高度;官网链接

想要使用这个方法,先需要在小程序后台 《开发管理-接口设置》中开通接口权限,需要审核通过才能使用:

在这里插入图片描述

注意:自 2022 年 7 月 14 日后发布的小程序,若使用该接口,需要在 app.json 中进行声明,否则将无法正常使用该接口;如下:
app.json

 "requiredPrivateInfos": ["getLocation", "chooseLocation", "chooseAddress"],

开始使用:

wx.getLocation({
    type: 'gcj02', // 比较精确
    success: (res) => {
     console.log(res);
    }
  })

那么此接口只能获取到当前的经纬度 并不是当前的省市区街道等地址;下面我们会配合使用腾讯地图的api进行地址的逆解析获取详细地址;

2,获取详细地址

第一步:在腾讯位置服务注册获取key或公司里面已经获取过key: 腾讯地图官方链接

第二步:就是在小程序的《开发管理-域名服务器》中的request合法域名中添加一行:https://apis.map.qq.com

在这里插入图片描述
第三步:在app.json中添加:

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

第四步:我是在onLoad生命周期加载的代码,你可以根据具体情况把下面代码复制到其他相应位置;

先下载jssdk文件解压后放到相应位置

// 引入SDK核心类
let QQMap = require("../../utils/qqmap-wx-jssdk.min"); 
let QQMapSdk;
Page({
    
/**
 * 页面的初始数据
 */
data: {
  currentLat:"",
  currentLon:"",
},
})
  	/**
   * 生命周期函数--监听页面加载
   */
  	onLoad(query){
   		this.getLoaction()
	}
	// 获取位置的方法
	 getLoaction() {
        // 1.先开始定位
        wx.getLocation({
          type: 'gcj02', // 比较精确
          success: (res) => {
            // 2,地址逆解析  根据经纬度获取实际地址
            QQMapSdk.reverseGeocoder({
              location: {
                latitude: res.latitude,
                longitude: res.longitude
              },
              success: (data) => {
                console.log("当前地址信息:", data);
                // 存储 详细地址 和当前获取的经纬度
                let address = data.result.address + data.result.formatted_addresses.recommend;
                this.setData({
                  currentLoaction: address,
                  currentLat: data.result.location.lat,
                  currentLon: data.result.location.lng
                })
            
              },
              fail: (error) => {
                console.error("err:", error)
              },
            })
          }
        })
      }

3,计算距离

可以使用 calculateDistance 方法计算两地经纬度之间的距离;

   // 计算两个经纬度的直线距离 https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/methodCalculatedistance
     calculateDistanceFun(){
        QQMapSdk.calculateDistance({
            mode: 'straight',//直线距离
            // 起点坐标
            from: {
              latitude: this.data.latlon.lat,
              longitude: this.data.latlon.lon
            },
            // 终点坐标 to是当前位置 注意是一个数组
            to: [{
              latitude: data.result.location.lat,
              longitude: data.result.location.lng
            }],
            success: (calc) => {
              // 计算结果输出为米
              let distance = calc.result.elements[0].distance;
              console.log("计算距离为:", distance + '米');
            },
            // 失败的情况
            fail: (error) => {
              console.error('error:', error);
            },
          })
     }

4,报错信息: getLocation:fail 频繁调用会增加电量损耗

如果出现以下报错信息说明:

在这里插入图片描述

我们在调用wx.getLocation()方法的回调里面又直接调用了腾讯地图的reverseGeocoder方法(腾讯地图api也可能也调用了wx.getLocation()方法 导致间隔不够30秒报频繁调用)

解决方法:调用 reverseGeocoder方法时 传入经纬度即可,什么都不传就会报这个错误;

 		qqmapsdk.reverseGeocoder({
 			//传入当前的经纬度
              location: {
                latitude: res.latitude,
                longitude: res.longitude
              },
              success: (data) => {
              },
              fail: (error) => {
                console.error("err:", error)
              },
            })

5,报错信息: 请求源未被授权

出现这个报错说明 你引用的key值 没有授权你当前电脑的ip地址;

在这里插入图片描述


解决方法:

需要在腾讯地图的后台配置一下你的ip;并把允许在小程序中使用勾选上;
在这里插入图片描述
WebServiceAPI Key配置中的授权IP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/443965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java Maven 的理解

一、maven项目产生的原因 当开发两个Java项目,姑且把它们称为A、B,其中A项目中的一些功能依赖于B项目中的某些类,那么如何维系这种依赖关系的呢? 答:可以将B项目打成jar包,然后在A项目的Library下导入B的ja…

保姆级教程|昨晚撸了一个ChatGPT群聊机器人

前言 近期ChatGPT可以说是太火了,问答、写论文、写诗、写代码,只要输入精确的prompt,他的表现总是让人惊喜。本着打不过就加入的原则。要是把ChatGPT拉入群聊中,会是怎样一番场景?说做就做,花了1个晚上捣鼓…

ChatGPT与文心一言对比思考

ChatGPT与文心一言对比思考 1. 目前在国内比较广泛被认知的ai模型有什么 我目前通过各种渠道注册到的账号有3个,按照了解到然后注册的顺序分别是 ChatGPTnewbing文心一言 3种ai的注册渠道 ChatGPT注册: 科学上网注册寻找外网手机号发送短信 newbing注册: 科学上网注册微软账…

政企数智办公巡展回顾 | 通信赋能传统行业数智化转型的应用实践

在宏观政策引导、技术革新与企业内部数字化改革需求的共同驱使下,数智办公已经成为各行各业转型升级的必由之路。关注【融云 RongCloud】,了解协同办公平台更多干货。 近期,“连接无界 智赋未来” 融云 2023 政企数智办公巡展在北京、杭州相…

【Java】EnumSet的使用

一、什么是EnumSet? EnumSet是用于枚举类的专用Set集合。 它实现了Set接口并且继承AbstractSet。 当计划使用EnumSet时,必须考虑以下几点: 1、它只能包含枚举值,并且所有值必须属于同一个枚举。 2、它不允许添加 null,在尝试这样做时会抛出NullPointerException。 3、它不…

【SpringCloud AlibabaSentinel实现熔断与限流】

本笔记内容为尚硅谷SpringCloud AlibabaSentinel部分 目录 一、Sentinel 1、官网 2、Sentinel是什么 3、下载 4、特性 5、使用 二、安装Sentinel控制台 1、sentinel组件由2部分构成 2、安装步骤 1.下载 2.运行命令 3.访问sentinel管理界面 三、初始化演示工程 …

KVM虚拟机的磁盘无损扩容方法-qcow2格式的

起因:我的KVM主机上安装了基于Debian11的 虚拟机母鸡,其他虚拟机都由此克隆而来。因为最初只配置了8G的虚拟硬盘,因此在需要占用比较大的空间的应用时,就比较麻烦。度娘等中文搜索结果没找到答案,只能google了。 这里…

JVM系统优化实践(16):线上GC案例(一)

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~ 列举几个实际使用案例说一下GC的问题。一个高峰期每秒10万QPS的社交APP,个人主页模块是流量最大的那个,而一次个人主页的查询&#xff0c…

python文本自动伪原创-ai一键伪原创

chatgpt批量伪原创的优势 ChatGPT是一个由OpenAI开发的强大的自然语言处理模型,它具有批量伪原创的优势,以下是这些优势: 模型能够处理大量的数据:ChatGPT通过训练大规模的语言模型来生成伪原创文本。这个模型拥有一个庞大的语料…

MySQL:varchar与date类型互转,对接java数据类型String和Date

目录 问题现象: 问题分析: varchar 转 date : date 转 varchar: 解决方法: varchar 转 date : date 转 varchar: 问题现象: 今天在项目中遇到一个问题: 现象&…

将DataTable中的数据保存到Excel (二) 使用NPOI

文章目录 背景1 NPOI 简介2 使用NPOI2.1 创建一个简单的工作簿2.2 简单的读取内容2.3 将DataTable数据导出到Excel(NPOI)2.4 Excel(NPOI)导入到DataTable 3 NPOI 总结 背景 前面写过一篇DataTable导出到Excel的文章,使用的是Office COM组件进行导入导出&#xff0c…

第五章 法律规范

目录 第一节 法律规则 一、法律规范与法律规则的概念辨析二、法律规则的逻辑结构 (一)假定:(二)行为模式:(三)法律后果: 三、法律规则与法律条文的关系 (想法…

【vue2】使用vue-admin-template动态添加路由的思路/addRoutes的使用

😉博主:初映CY的前说(前端领域) ,📒本文核心:用原生js实现省市区联动 【前言】在通用的后台管理项目的开发中,不仅仅是会涉及到对表单数据等的增删改查操作还会涉及到一些关于权限管理的问题。我们将基于一个RBAC的思维…

FPGA设计实战演练.高级技巧篇-----读书笔记

第一章 从PCB开始研究FPGA设计问题 一、PCB布线 1、要求 对所有器件进行电源滤波,均匀分配电源,降低系统噪声。 匹配信号线,减小信号反射。 降低并行走线之间的串扰。 减小地反弹效应。 进行阻抗匹配。 2、微带传输布局,走…

全景丨0基础学习VR全景制作,平台篇第六章:全局功能-开场提示

大家好欢迎观看蛙色平台使用教程 编辑器功能位置 1、功能说明 开场提示是指VR漫游作品加载好以后,进入到全景里面时,优先展示的图像。 PC端/移动端,均可设置起到指引用户的作用。 2、功能要用在哪? (1)场…

无人机影像处理流程

无人机由于其方便快捷,精度高等特点已经广泛应用于农田尺度的作物生长监测。尤其是近年来大疆推出了两个多光谱无人机,价格也相较便宜。但目前无人机的使用实际上需要进一步处理才能获取得到农田的基本信息,主要包括影像的校正和图像拼接&…

FME教程:GIS建筑面转CAD格式JMD,还原房屋建筑结构、层数、地物样式,shp转CAD,GIS转dwg

GIS数据转CAD数据,是经常遇到的需求,但是CAD数据形式与GIS相差甚远,因此GIS转CAD后,要还原图形样式和地物属性便成为了一个难点。 今天介绍使用FME进行shp格式房屋面数据转dwg格式的JMD图层的方法。实现房屋的地物样式、结构、层…

Android studio Activity启动模式

1.四种启动模式: 1).standard(标准模式) 特点:1.Activity的默认启动模式 2.每启动一个Activity就会在栈顶创建一个新的实例。例如:闹钟程序 缺点:当Activity已经位于栈顶时…

C#模拟实现输出进销存管理系统中的每月销售明细(实验五)

实验五:模拟实现输出进销存管理系统中的每月销售明细 任务要求: 运行程序,输入要查询的月份,如果输入的月份正确,则显示本月商品销售明细;如果输入的月份不存在,则提示“该月没有销售数据或者…

什么是企业数智化的创新加速器?

数智商业创新,使得企业的发展模式有了一个更大的跃升。在数智化转型热潮中,打造数据驱动的智慧企业,实现商业创新与转型升级,构建企业新的竞争优势成为这一阶段企业管理者的核心诉求。围绕这一核心诉求,企业关键要考虑…