当前位置: 首页 > news >正文

uni-app中微信小程序端使用腾讯地图API实现定位服务(超详细教程)

在目前的小程序开发中,为了更好的用户体验,以及信息推荐,我们难免要获取用户的授权拿到定位。所以在uni-app的学习中,我决定将实现的步骤详细地记录下来,希望可以帮助到更多的人!

使用到的方法及api:

实现这个功能时,最好先看一遍官方的文档

  • uni.authorize(OBJECT) 向用户发起授权请求 点击查看uni-app官方文档
  • qqmapsdk = new QQMapWX({ }) 实例化API核心类 查看微信小程序jsSDK
  • reverseGeocoder(options:Object) 逆地址解析 查看微信小程序jsSDK
  • uni.getLocation(OBJECT) 点击查看uni-app官方文档
  • vuex的使用 点击查看作者的vuex入门

获取微信小程序的AppID以及腾讯位置服务的Key

AppID

  1. 登录微信小程序公众平台 https://mp.weixin.qq.com/cgi-bin/wx
  2. 点击 开发 》开发设置 》 复制AppID在这里插入图片描述
  3. 在uni-app项目中的 manifest.json 文件中的微信小程序配置AppID
    在这里插入图片描述

Key

  1. 搜索腾讯地图api进去并登录 https://lbs.qq.com/

  2. 点击控制台 》 key与配额 》 key管理 》创建新密钥,完成如图配置
    在这里插入图片描述

  3. 下载微信小程序JavaScriptSDK 点击下载 ,也可以通过访问腾讯地图文档https://lbs.qq.com/qqmap_wx_jssdk/index.html查看教程

  4. 将下载的压缩包解压放入项目静态文件夹中
    在这里插入图片描述

  5. 复制刚刚配置的Key填入代码中

					let qqmapsdk = new QQMapWX({
					     key: 'GFHBZ-JU3CD-NEJ4S-PT3J2-JGFH6-7DBOX'
					 });

实现定位服务:

vuex配置:
store 》index.js

import Vue from 'vue'
import Vuex from 'vuex'
// 引入腾讯地图jssdk文件
import  QQMapWX from "../static/js/qqmap-wx-jssdk.min.js"

Vue.use(Vuex)

export default new Vuex.Store ({
	state: {
		// 默认城市
		city: '北京市'
	},
	mutations:{
		newCityFun (state, newCity) {
			state.city = newCity
			console.log(state.city)
		}
	},
	actions: {
		getCity(context) {
			// 向用户发起授权请求,弹框提示
			uni.authorize({
			    // 获取用户定位信息
 				scope: "scope.userLocation",
 				// 用户同意授权执行
				success(){
					// 引入腾讯地图api
					// 实例化API核心类
					let qqmapsdk = new QQMapWX({
					     // 填写自己的Key值,这个值是与AppID绑定的
					     key: 'GFHBZ-JU3CD-NEJ4S-PT3J2-JGFH6-7DBOX'
					 });
					//获取位置信息
					uni.getLocation({
					    type: 'gcj02',
					    success: function (res) {
					        console.log('当前位置的经度:' + res.longitude)
					        console.log('当前位置的纬度:' + res.latitude)
							// 逆地址解析方法
							qqmapsdk.reverseGeocoder({
								location: {
									latitude: res.latitude,
									longitude: res.longitude
								},
								success(res) {
									var newCity = ''
									console.log(res)
									// 取到用户的定位城市,赋值传递出去
									newCity = res.result.address_component.city
									context.commit('newCityFun', newCity)
								}
							})	
					    }
					})
				},
				// 若用户不同意授权,弹框提示
				fail(res){
					uni.showToast({
						icon :"none",
					    title: '注意:需要获取您的定位授权,否则部分功能将无法使用',
					    duration: 2000
					})
				}
			})
		}
	}
})

页面配置
page 》index.vue

<template>
	<view class="content">
		<image class="logo" src="/static/logo.png"></image>
		<view class="text-area">
			<text class="title">{{title}}</text>
		</view>
		<view>{{newCity}}</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: 'Hello',
			}
		},
		onLoad() {

		},
		onReady() {
			this.$store.dispatch('getCity')
		},			
		methods: {

		},
		computed: {
			newCity() {
				return this.$store.state.city
			}
		}
	}
</script>

<style>
	.content {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}

	.logo {
		height: 200rpx;
		width: 200rpx;
		margin-top: 200rpx;
		margin-left: auto;
		margin-right: auto;
		margin-bottom: 50rpx;
	}

	.text-area {
		display: flex;
		justify-content: center;
	}

	.title {
		font-size: 36rpx;
		color: #8f8f94;
	}
</style>

成功截图

弹框询问是否同意授权

在这里插入图片描述

同意授权

在这里插入图片描述

不同意授权

在这里插入图片描述

相关文章:

  • CSS 3学习——transition 过渡
  • 关于React中DOM,虚拟DOM及diff算法的理解
  • 类型签名在Javascript中的探索
  • 快速入门,理解,使用 axios请求
  • 第二章 存储,2.1 永不停止的脚步——数据库优化之路(作者:佳毅)
  • CSS实现元素水平垂直居中的几种方式
  • 年末购机推荐,首选OPPO这两款中端旗舰王者
  • js中深浅拷贝的实现方式(含图解原理)
  • Java刷题知识点之File对象常用功能:获取文件名称、获取文件路径、获取文件大小、获取文件修改时间、创建与删除、判断、重命名、查看系统根目录、容量获取、获取某个目录下内容、过滤器...
  • 查看httpd状态
  • js中如何判断引用值为数组(几种不同方式的详解)
  • 项目代码重用
  • js中数组去重的几种实现方式(区别)
  • java创建文件和目录
  • JS For循环中嵌套setTimeout()方法的理解
  • 分享一款快速APP功能测试工具
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Hexo+码云+git快速搭建免费的静态Blog
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Iterator 和 for...of 循环
  • php面试题 汇集2
  • Vue2.x学习三:事件处理生命周期钩子
  • Web设计流程优化:网页效果图设计新思路
  • 从零开始学习部署
  • 大整数乘法-表格法
  • 区块链共识机制优缺点对比都是什么
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • ()、[]、{}、(())、[[]]命令替换
  • (2020)Java后端开发----(面试题和笔试题)
  • (6)STL算法之转换
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (第一天)包装对象、作用域、创建对象
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (九)c52学习之旅-定时器
  • (七)Java对象在Hibernate持久化层的状态
  • (四)库存超卖案例实战——优化redis分布式锁
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .gitignore
  • .net 发送邮件
  • .NET 服务 ServiceController
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET值类型变量“活”在哪?
  • .ui文件相关
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [Android] Implementation vs API dependency