uniapp在H5获取当前定位信息不需要SDK可直接获取城市(包括经纬度省市区和市区编码)

2023-11-03

前言

最近在做获取用户当前定位信息的时候,发现uniapp官方提供的uni.getLocation(OBJECT)兼容性并不是特别好,光注意事项都是密密麻麻一大堆,在实际使用场景下,效果并不理想,也不是很稳定。于是便重新封装了一下腾讯地图的一些东西,提高了下兼容度!下边我会把我用的封装思路逻辑给大家一一讲解。

完整代码可私信我我发给你

在这里插入图片描述

效果预览

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

兼容性说明

在这里插入图片描述

准备工作

  1. 腾讯地图key
  2. 腾讯地图js文件(可以找我要哈!!)

逻辑思路:

  1. 判断环境并获取定位权限
  2. 创建腾讯地图定位实例,用于后续方法调用
  3. 封装getLocation获取位置信息的方法
  4. 提供watchPosition监听位置和clearWatch停止监听的方法
  5. 所有方法都通过Promise形式返回,便于调用方使用。

步骤

1. 新建utils文件夹,在文件夹下装上百度js文件

在这里插入图片描述

2. 在文件components里新建组件文件getlocation.vue

在这里插入图片描述

3. 在getlocation.vue组件里封装具体逻辑代码

3.1 引入腾讯js文件 初始化 判断当前环境并且判断用户是否授权定位权限,创建腾讯地图实例,后续方便调用
            import './geolocation.min.js'
            
            init() {
				if (origin.indexOf('https') === -1) {
					uni.hideLoading()
					uni.showToast({
						title: '当前环境无法获取定位信息',
						icon: 'none',
						duration: 2000,
					});
					throw '请在 https 环境中使用本插件'
				}
				if (!navigator || !navigator.geolocation) {
					uni.hideLoading()
					uni.showToast({
						title: '当前环境无法获取定位信息',
						icon: 'none',
						duration: 2000,
					});

					throw '地理位置服务不可用'
				}

				const options = {
					enableHighAccuracy: true,
					timeout: 5000,
					maximumAge: 0
				};
				return new Promise((resolve, rejace) => {
					navigator.geolocation.getCurrentPosition((res) => {
						this.myMap = new qq.maps.Geolocation("你的key",
							"地图标点");
						resolve(this)
					}, rejace, options)
				})
			},

code 1 表示用户拒绝授权 code 3 未获取到地址信息,可能是设备没有开启定位服务或者系统没有给浏览器定位权限
【H5】 经纬度位置获取navigator.geolocation.getCurrentPosition
navigator.geolocation.getCurrentPosition(function(){
})
参数说明:

经度 : coords.longitude
纬度 : coords.latitude
准确度 : coords.accuracy
海拔 : coords.altitude
海拔准确度 : coords.altitudeAcuracy
行进方向 : coords.heading
地面速度 : coords.speed
请求的时间: new Date(position.timestamp)

3.2封装getLocation获取位置信息的方法
			getLocation() {
				return new Promise((resolve, reject) => {
					this.myMap.getLocation(res => {
						resolve(res)
					}, err => {
						reject(err)
					})
				})
			},

4.使用方法

<get_location ref='muLocation'></get_location>

import getLocation from '@/componentss/getlocation.vue'
components: {
  getLocation,
}


locationRef: null,


onLoad() {
//初始化权限,提示用户授权以及重新获取权限
			this.$nextTick(() => {
				uni.showLoading({
					title: '定位组件加载中...',
					mask: true
				})
				this.$refs.muLocation.init().then(location => {
					this.locationRef = location
					this.getLocationl();
					uni.hideLoading()
				}, err => {
					uni.hideLoading()
					if (err.code === 1) {
						uni.showModal({
							title: '获取定位权限失败',
							content: '你拒绝了位置授权服务。请允许当前页面获取定位授权,后刷新页面。'
						})
					} else {
						uni.showModal({
							title: '获取定位权限失败',
							content: '请确定手机定位已打开,并且当前浏览器允许获取定位,开启后请刷新页面。'
						})
					}
				})

			})
		},
          methods: {
            // 获取精准定位
			getLocationl() {
				let that = this
				if (!that.locationRef) return uni.showToast({
					title: '未授权位置获取',
					icon: 'none'
				})
				that.locationRef.getLocation()
					.then(res => {
				     	console.oog(res)
				     	//这里面写你自己的逻辑 res即为详细定位信息
						that.valiFormData.latitude = res.lat; //纬度
						that.valiFormData.longitude = res.lng; //经度
						that.valiFormData.areaNum = res.adcode;//市区code
						that.valiFormData.areaNumName = res.city;//市区
					})
			},
		}

总结

以上便是基于uni-app框架开发,使用Promise进行异步请求和结果返回,封装的H5获取当前详细定位信息组件希望大家一起交流。

启发来源于何木木大佬

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uniapp在H5获取当前定位信息不需要SDK可直接获取城市(包括经纬度省市区和市区编码) 的相关文章

随机推荐

  • Matlab如何打包成jar并给java使用(混合编程)

    Matlab如何打包成jar并给java使用 由于期末数字图像课程设计需求 使用matlab码好了函数可是没有界面 所以打算用jsp随便搞一搞 可是这样就要跨语言编程了 说得很高大上其实就是打成jar然后丢到项目lib包里面去 这时就需要打
  • H5——连连看小游戏实现思路及源码

    部门要求推广新产品用连连看小游戏的方式 设计那边UI还没有排期 先撸个功能demo 正好记录一下 连连看都玩过 程序的关键在于判断连续点击的两张图片是否能够消除 两个图片消除的条件有两个 图片相同 两张图之间连线的转角数不超过2 第一个条件
  • 高级纹理映射技术(6)

    高级纹理映射技术 6 对一些特殊的应用需要对纹理坐标进行处理 主要包括纹理坐标自动生成和纹理坐标变换 下图显示了纹理坐标的来源 处理过程以及到达光栅处理器的过程 纹理坐标自动生成 在Direct3D程序中 不仅可以在模型载入阶段或渲染阶段指
  • EPICS asynPortDriver中数组用法示例

    本驱动程序是继承自asynPortDriver 分别重写了用于读取32位整型数组和32位浮点型数组的 readInt32Array和readFloat32Array 1 源代码如下 arraydriver h include epicsEv
  • 30道软件测试高频面试题

    如果哪个测试经理在看我的文章 希望对面试者要微笑 不然面试结束 出门之后就一万个草泥马奔腾而过 其实面试者并不是希望你给他们什么 而是一种尊重 平等的谈话 不要高高在上感觉自己超牛逼一样 任何大牛都是从菜鸟起步的 当然 正在学习测试技术的人
  • VUE之Vxe-table动态生成多级表头

    需求 1 第一列为正常列 2 第二列开始为动态生成列 根据接口返回数据生成 3 最后一列为编辑列 实现步骤 模板中定义
  • Java 类的主动使用和被动使用

    Java程序对类的使用方式分为 主动使用和被动使用 主动使用 又分为七种情况 1 创建类的实例 2 访问某个类或者接口的静态变量 或者对该静态变量赋值 3 反射 比如 Class forName java lang String 4 初始化
  • 代码漏洞说明

    1 代码注入 命令注入 命令注入是指 在应用程序执行的命令中包含来源于不可信数据时 程序本身没有对这些不可信数据做正确 合理的验证和过滤 导致系统执行恶意命令 例1 以下代码通过Runtime exec 方法调用Windows的dir命令
  • PID简介

    一 基本定义 Sv 用户设定值 给定信号 Pv 控制对象当前状态值 反馈信号 E 偏差值 偏差信号 所以 E Sv Pv 二 PID各个控制基本分析 1 P控制 比例控制 Pout Kp Ek 假定从早上开机上电 我们每隔一秒钟就通过传感器
  • html5的session,HTML5 sessionStorage会话存储

    sessionStorage 是HTML5新增的一个会话存储对象 用于临时保存同一窗口 或标签页 的数据 在关闭窗口或标签页之后将会删除这些数据 本篇主要介绍 sessionStorage 会话存储 的使用方式 包括添加 修改 删除等操作
  • c++语言的学习——判断闰年

    判断闰年 描述 判断某年是否是闰年 输入 输入只有一行 包含一个整数a 0 lt a lt 3000 输出 一行 如果公元a年是闰年输出Y 否则输出N 样例输入 2006 样例输出 N 提示 公历纪年法中 能被4整除的大多是闰年 但能被10
  • Wireshark的两种过滤器与BPF过滤规则

    Wirshark使用的关键就在于过滤出想要的数据包 下面介绍怎么过滤 抓包过滤器 Wirshark有两种过滤器 一个是抓包过滤器 一个是显示过滤器 他们之间的区别在于抓包过滤器只抓取你设置的规则 同时丢弃其他信息 显示过滤器并不会丢弃信息
  • Qt之UDP通信

    目录 一 UDP简介 二 QUdpSocket类 三 UDP服务器 四 UDP客户端 五 代码 1 udp服务端 2 udp客户端 一 UDP简介 UDP User Datagram Protocol 即用户数据报协议 是一个轻量级的 不可
  • 如何使用Jekyll在GitHub Pages上搭建网站(个人博客)

    前言 本文很长 建议使用侧边栏进行跳转 Jekyll 是一个基于 Ruby 语言的 用于搭建静态网站的生成器 主要用于搭建博客网站 官方自己的介绍为 Jekyll is a blog aware static site generator
  • “error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed”解决方法

    使用git通过https方式从github clone git repo源码时 报错如下 1 2 3 Cloning into git fatal unable to access https github com git git git
  • 【用JS自制表格软件玩数据】8. 设计单元格中的右键菜单

    右键菜单选项的设计 效果图 基本数据 分析 功能 菜单的渲染模块 右键菜单的样式 最终结果 当写完本系列后 我会把源代码分享出来给大家 本课程也会持续更新与矫正 欢迎留言指正 效果图 基本数据 首先构建一个基本的配置数据 property
  • 【历史上的今天】1 月 9 日:iPhone 问世;iTunes 发布;激光打印机的发明者出生

    整理 王启隆 透过 历史上的今天 从过去看未来 从现在亦可以改变未来 今天是 2023 年 1 月 9 日 在 1978 年的这段时间 我国恢复了研究生制度 这一年 共录取了 10500 多名研究生 研究生教育的中断和复兴是一个漫长的过程
  • Linux中利用docker搭建深度学习环境

    写在前面 在深度学习中 避免不了在远程服务器上进行模型的训练 如果直接在服务器裸机的基础环境跑显然是不可取的 此时搭建用于模型训练的docker环境显得尤为重要 1 下载基础镜像 选择一个合适的基础镜像会给后续的操作带来极大的便利 其中uf
  • centos7安装redis

    文章目录 一 准备工作 二 安装redis 三 配置redis 四 配置redis服务 五 其他 一 准备工作 关闭防火墙等 linux时间校对 试验环境 虚拟机服务器版本 centos7 虚拟机IP地址 192 168 1 10 win端
  • uniapp在H5获取当前定位信息不需要SDK可直接获取城市(包括经纬度省市区和市区编码)

    前言 最近在做获取用户当前定位信息的时候 发现uniapp官方提供的uni getLocation OBJECT 兼容性并不是特别好 光注意事项都是密密麻麻一大堆 在实际使用场景下 效果并不理想 也不是很稳定 于是便重新封装了一下腾讯地图的