【uniapp小程序实战】—— 使用腾讯地图获取定位

news/2024/7/20 2:25:15 标签: 小程序, uni-app, 微信小程序

文章目录

  • 🍍前言
  • 🍋正文
    • 1、首先看官网
      • uni.getLocation(OBJECT)
        • #注意
    • 2、腾讯位置服务平台申请密钥和下载SDK
      • 2.1 申请开发者秘钥
      • 2.2 开通webserviceAPI服务
      • 2.3 下载微信小程序JavaScriptSDK
      • 2.4 安全域名设置
    • 3、配置manifest.json文件
    • 4、示例代码展示
      • 4.1 引用下载好的SDK
      • 4.2 获取定位函数示例
      • 4.3 调用函数
      • 4.4 页面渲染
    • 5、效果展示
  • 🎃专栏分享:

🍍前言

本篇文章分享一下我在实际开发小程序时遇到的需要获取用户当前位置的问题,在小程序开发过程中经常使用到的获取定位功能。uniapp官方也提供了相应的API供我们使用。
官网地址:uni.getLocation(OBJECT))

🍋正文

1、首先看官网

uni.getLocation(OBJECT)

获取当前的地理位置、速度。

OBJECT 参数说明

参数名类型必填说明平台差异说明
typeString默认为 wgs84 返回 gps 坐标,gcj02 返回国测局坐标,可用于 uni.openLocation 和 map 组件坐标,App 和 H5 需配置定位 SDK 信息才可支持 gcj02。
altitudeBoolean传入 true 会返回高度信息,由于获取高度需要较高精确度,会减慢接口返回速度字节跳动小程序、飞书小程序、支付宝小程序不支持
geocodeBoolean默认false,是否解析地址信息仅App平台支持(安卓需指定 type 为 gcj02 并配置三方定位SDK)
highAccuracyExpireTimeNumber高精度定位超时时间(ms),指定时间内返回最高精度,该值3000ms以上高精度定位才有效果App (3.2.11+)、H5 (3.2.11+)、微信小程序 (基础库 2.9.0+)
timeoutString默认为 5,定位超时时间,单位秒仅飞书小程序支持
cacheTimeoutNumber定位缓存超时时间,单位秒;每次定位缓存当前定位数据,并记下时间戳,当下次调用在cacheTimeout之内时,返回缓存数据仅飞书小程序、支付宝小程序支持
accuracyString默认为 high,指定期望精度,支持 high,best。当指定 high 时,期望精度值为100m,当指定 best 时期望精度值为20m。当定位得到的精度不符合条件时,在timeout之前会继续定位,尝试拿到符合要求的定位结果仅飞书小程序支持
isHighAccuracyBoolean开启高精度定位App (3.4.0+)、H5 (3.4.0+)、微信小程序 (基础库 2.9.0+)
successFunction接口调用成功的回调函数,返回内容详见返回参数说明。
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明

参数说明
latitude纬度,浮点数,范围为-90~90,负数表示南纬
longitude经度,浮点数,范围为-180~180,负数表示西经
speed速度,浮点数,单位m/s
accuracy位置的精确度
altitude高度,单位 m
verticalAccuracy垂直精度,单位 m(Android 无法获取,返回 0)
horizontalAccuracy水平精度,单位 m
address地址信息(仅App端支持,需配置geocode为true)

address 地址信息说明

属性类型描述说明
countryString国家如“中国”,如果无法获取此信息则返回undefined
provinceString省份名称如“北京市”,如果无法获取此信息则返回undefined
cityString城市名称如“北京市”,如果无法获取此信息则返回undefined
districtString区(县)名称如“朝阳区”,如果无法获取此信息则返回undefined
streetString街道信息如“酒仙桥路”,如果无法获取此信息则返回undefined
streetNumString获取街道门牌号信息如“3号”,如果无法获取此信息则返回undefined
poiNameStringPOI信息如“电子城.国际电子总部”,如果无法获取此信息则返回undefined
postalCodeString邮政编码如“100016”,如果无法获取此信息则返回undefined
cityCodeString城市代码如“010”,如果无法获取此信息则返回undefined

示例

uni.getLocation({
	type: 'wgs84',
	success: function (res) {
		console.log('当前位置的经度:' + res.longitude);
		console.log('当前位置的纬度:' + res.latitude);
	}
});

#注意


补充: 以上内容为 官方文档 搬运过来的,详情可点击链接跳转至官网。

我们本次开发的是小程序,需要注意的是,我们本次小程序获取定位使用的是腾讯位置服务,所以需要申请腾讯位置服务的SDK。

2、腾讯位置服务平台申请密钥和下载SDK

申请步骤:详细文档
在这里插入图片描述

2.1 申请开发者秘钥

点击文档中的申请秘钥链接,跳转至腾讯位置服务平台,如下图所示申请即可。(没有账号的先注册账号
在这里插入图片描述

2.2 开通webserviceAPI服务

开通webserviceAPI服务:控制台 ->应用管理 -> 我的应用 ->添加key-> 勾选WebServiceAPI -> 保存
(小程序SDK需要用到webserviceAPI的部分服务,所以使用该功能的KEY需要具备相应的权限)

1、申请Key
在这里插入图片描述
2、复制申请好的Key值等待使用

2.3 下载微信小程序JavaScriptSDK

微信小程序JavaScriptSDK下载地址(点击文字即可跳转)
在这里插入图片描述

下载好解压完成后,我们一般放在根目录下面的common目录下(如下图)
在这里插入图片描述

2.4 安全域名设置

安全域名设置,在小程序管理后台 -> 开发 -> 开发管理 -> 开发设置 -> “服务器域名” 中设置request合法域名,添加https://apis.map.qq.com

在这里插入图片描述

到这里终于算是申请完了,在配置一下就好了。

3、配置manifest.json文件

在这里插入图片描述
在这里插入图片描述

 "permission" : {
	 "scope.userLocation" : {
	     "desc" : "为了您更好的体验,请确认获取您的位置"
	 }
}	
 "requiredPrivateInfos": ["getLocation", "chooseLocation"]

4、示例代码展示

4.1 引用下载好的SDK

这里我放到了common目录下:

import QQMapWX from "../../common/qqmap-wx-jssdk.js"

4.2 获取定位函数示例

methods: {
	//获取位置信息
  async getLocationInfo() {
    return new Promise((resolve) => {
      //位置信息默认数据
      let location = {
        longitude: 0,
        latitude: 0,
        province: "",
        city: "",
        area: "",
        street: "",
        address: "",
      };
      uni.getLocation({
        type: "gcj02",
        success(res) {
          location.longitude = res.longitude;
          location.latitude = res.latitude;
          // 腾讯地图Api
          const qqmapsdk = new QQMapWX({
            key: 'XXXXXXXXXXXXXXXXXXXXXXXX'  //这里填写自己申请的key
          });
          qqmapsdk.reverseGeocoder({
            location,
            success(response) {
              let info = response.result;
        	  console.log(info);
              location.province = info.address_component.province;
              location.city = info.address_component.city;
              location.area = info.address_component.district;
              location.street = info.address_component.street;
              location.address = info.address;
              resolve(location);
            },
          });
        },
        fail(err) {
			console.log(err)
          resolve(location);
        },
      });
    });
  }
 }

4.3 调用函数

函数调用可以自己去选择在页面加载的时候加载,或者有一个触发条件。(我是用的页面加载,所以放在了onload方法中)。

async onLoad() {
	const location = await this.getLocationInfo();
	this.position = location.address
},

注意:这里使用的this.position,是在data中定义的,代码示例中没有写。需要自己在data方法中定一个position变量

4.4 页面渲染

<view style="margin-top: 40rpx;margin-left: 16rpx;color:red;">
	当前定位:{{position}}
</view>

5、效果展示

在这里插入图片描述

到这里就结束啦!想要的获取用户位置信息的功能就实现啦。

🎃专栏分享:

小程序项目实战专栏:《uniapp小程序开发》
前端面试专栏地址:《面试必看》


名言警句:说能做的,做说过的 \textcolor{red} {名言警句:说能做的,做说过的} 名言警句:说能做的,做说过的

原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下

👍 点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!


http://www.niftyadmin.cn/n/149255.html

相关文章

别克GL8,这样的改装太令人兴奋了

别克GL8一直深受广大爱车人士的喜爱&#xff0c;别克GL8的改装也是层出不穷&#xff0c;下面我们一起来看看这款的改装吧&#xff01;前脸换上了“雅典娜”的前脸&#xff0c;视觉效果非常棒&#xff0c;不仅在格栅的设计上极其夸张&#xff0c;它的内饰更是可完全比肩商务舱&a…

AT24C02(I2C总线)

存储器简介RAMSRAM&#xff08;静态RAM&#xff09; &#xff0c;内部的存储结构是锁存器&#xff0c;是一个D触发器&#xff0c;用电路来存储数据&#xff0c;是所有存储器中最快的一个&#xff0c;一般用于电脑CPU高速缓存&#xff0c;单片机里面也是SRAM&#xff0c;比如定义…

elasticsearch - 6.3.2 API

索引操作 //创建一个索引&#xff0c;pretty表示打印添加状态 curl -X PUT "localhost:9200/customer?pretty" //获取索引列表 curl -X GET "localhost:9200/_cat/indices?v" //向索引中添加一个文档&#xff0c;指定ID为1&#xff0c;如果索引不存在…

封装一个快速生成目录树的全局脚本

说在前面 我们在很多地方都可以看到有这样的目录树结构&#xff0c;目录树可以很好的介绍项目中各文件目录的用途&#xff0c;帮助读者了解整个项目结构。由于自己在项目中需要用到这个目录树来进行项目结构介绍&#xff0c;但是在网上简单的找了一下&#xff0c;没找到自己想要…

自驱力超强的羊驼?斯坦福微调LLaMa

大型“指令调优”语言模型在新任务上展现了Zero-shot的卓越能力&#xff0c;但严重依赖于人类编写的指令数据&#xff0c;而这些数据在数量、多样性和创造性方面都是有限的。 斯坦福科研人员引入了self-instruction框架&#xff0c;提高指令遵循能力来自我迭代进化&#xff0c;…

【测试遇坑记录总结】

测试遇坑记录总结 为啥会写此篇博客进行记录呢? 最近在公司,接手的算是一个挺齐全的SpringCloud,但是启动和测试让我差点整吐了…花了我将近二三天的时间啊!!! 废话不多说,且看正题 1.关于maven启动报错 看到这个信息,你可能嗤之以鼻,这有啥嘛,有啥子不会的嘞!!!不就是maven点…

2023年中职网络安全竞赛——文件分析破解解析教程(详细)

文件分析破解 任务环境说明: 服务器场景名:Server2005(关闭链接)服务器场景用户名:rartest通过本地PC中渗透测试平台Kali使用Nmap扫描目标靶机服务版本信息,将Telnet版本信息字符串作为Flag提交;通过本地PC中渗透测试平台Kali对服务器场景Windows进行渗透测试,使用kali…

SSM框架整合

一、先整合spring和mybatis&#xff1a; Junit测试jar&#xff08;4.12版本&#xff09; Mybatis(3.4.5) Spring相关的jar&#xff08;spring-context、spring-tx、spring-jdbc、spring-test、spring-aop、 …