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

news2024/11/23 20:15:39

前言

最近在做获取用户当前定位信息的时候,发现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获取当前详细定位信息组件希望大家一起交流。

启发来源于何木木大佬

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

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

相关文章

前端web入门-CSS-day03

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 CSS 初体验 CSS 定义 CSS 引入方式 选择器 标签选择器 类选择器 id选择器 通配符选择器 画盒子 …

“智慧赋能 强链塑链”——浅谈核电行业物资供应管理优化新动能

核电备件供应链管理创新的必要性、 迫切性和重要性 核电厂对核电机组的稳定运行和核安全有着非常高的要求&#xff0c;在我国核电发展初期阶段&#xff0c;核电厂为了提高机组的安全稳定运行&#xff0c;通常都备有种类多、数量大的备品备件。经过多年的运营&#xff0c;现役…

华为、思科、Juniper 三厂商NAT配置详解

大家好&#xff0c;这里是网络技术联盟站。 本文给大家介绍华为、思科、Juniper 三大厂商NAT配置详解。 1. 华为&#xff08;Huawei&#xff09; 华为是一家全球领先的信息与通信技术解决方案供应商&#xff0c;其网络设备提供了强大的NAT功能。 下面是华为设备上的NAT配置示…

C语言——自定义数据类型

C语言自定义数据类型——结构体、共用体、枚举 目录 一、 结构体的基本用法1.1 定义1.2 定义格式1.3 结构体变量1.3.1 概念1.3.2 格式1.3.3 定义结构体变量(1) 先定义结构体&#xff0c;再定义结构体变量。(2) 定义结构体的同时&#xff0c;定义结构体变量。 1.3.4 结构体变量…

L1L2,范数损失

目录 1. L2范数&#xff08;欧氏距离&#xff09;2. L2范数损失&#xff0c;这个听的/用的少一些3-1. L2损失&#xff08;均方误差&#xff09;3-2. L1损失&#xff08;平均绝对误差&#xff09;4. L1范数L2范数在机器学习方面的区别5. 为什么L2范数可以防止过拟合? 1. L2范数…

函数式接口入门简介

这里写目录标题 引子四种函数式接口-简单Demo四种函数式接口介绍函数式接口实战-代码对比 引子 只包含一个抽象方法的接口&#xff0c;就称为函数式接口。来源&#xff1a;java.util.function 我想在方法内直接定义方法直接获得结果&#xff0c;主要是也是为了配置lambda表达…

斐波那契数列数列相关简化2

看这篇文章前先看一下第一篇文章&#xff1a; 斐波那契数列数列相关简化1_鱼跃鹰飞的博客-CSDN博客 根据第一篇文章总结如下&#xff1a; 如果某个递归&#xff0c;除了初始项之外&#xff0c;具有如下的形式 F(N) C1 * F(N) C2 * F(N-1) … Ck * F(N-k) ( C1…Ck 和k都…

泛微 E-Office文件上传漏洞复现(CVE-2023-2523、CVE-2023-2648)

0x01 产品简介 泛微E-Office是一款标准化的协同 OA 办公软件&#xff0c;泛微协同办公产品系列成员之一,实行通用化产品设计&#xff0c;充分贴合企业管理需求&#xff0c;本着简洁易用、高效智能的原则&#xff0c;为企业快速打造移动化、无纸化、数字化的办公平台。 0x02 漏…

科普拓视野,逐梦新未来——人工智能研学工作坊

随着科技的发展&#xff0c;人工智能逐渐成为世界热门技术之一&#xff0c;为更好启发服务对象想象力&#xff0c;增强其创新精神和实践能力&#xff0c;让服务对象深入感受科技的发展与魅力&#xff0c;2023年5月20日&#xff0c;在阳泉市未成年人救助保护中心的支持下&#x…

如何使用WordPress作为文档管理和文件管理

您想使用 WordPress 来管理您的文件和文档吗&#xff1f; 您可能有需要与团队其他成员共享的电子表格、图像和其他文档。通过将这些文件上传到 WordPress&#xff0c;您可以轻松地与其他人协作&#xff0c;或者只是将这些文档放在 WordPress 仪表板上&#xff0c;以便轻松访问…

从菜鸟到专家,网络安全工程师必备证书有哪些?

网络空间的竞争&#xff0c;归根结底是人才的竞争。 在2022年网络安全周上&#xff0c;《网络安全人才实战能力白皮书》正式发布。数据显示&#xff0c;到2027年&#xff0c;我国网络安全人员缺口将达327万&#xff0c;而高校人才培养规模仅为3万/年。 那么&#xff0c;如果你…

8.1.0版本ELK搭建,开启xpack认证机制

8.1.0版本ELK搭建&#xff0c;开启xpack认证机制 部署环境安排下载elk安装包服务器环境配置部署elasticsearch配置认证配置客户端加密的http通信修改elastic配置文件 部署kibana部署logstash部署httpd&#xff0c;filebeat配置kibana页面部署grafana配置grafana连接elastic 部署…

C++中的多态,以及多态的实现、以及实现多态的两个特例。

一、 多态是什么&#xff1f; 通俗点说&#xff0c;就是多种形态。具体点就是不同对象完成某种事情&#xff0c;会产生不一样的状态。 举个例子&#xff1a;就好比&#xff1a;买票的时候&#xff0c;普通人、学生、军人等等&#xff0c;他们买票有不同的结果&#xff0c;普通人…

从零搭建完整python自动化测试框架(UI自动化和接口自动化 )

目录 一、总体框架 二、PO模式、DDT数据驱动、关键字驱动 三、框架技术选择 四、框架运行结果 五、各用例对应的定义方式&#xff08;PO/DDT&#xff09; 六、API接口定义方式 七、测试执行结果 从零开始搭建项目 一、开发环境搭建 二、新建项目 三、基础功能实现 …

前两天面了个腾讯28K来的,让我见识到了测试界的天花板

马上又是一年毕业季了&#xff0c;那么去年那一批毕业的应届生怎么样了&#xff1f; 2022年堪称大学生就业最难的一年&#xff0c;应届毕业生人数是1076万。失业率超50%&#xff01; 但是我观察到一个数据&#xff0c;那就是已经就业的毕业生中&#xff0c;计算机通信等行业最…

数据结构(C语言):一元多项式的操作(链表实现)

一、题目 一元多项式的操作 设有两个一元多项式&#xff1a; p(x)p0p1xp2x2pnxn q(x)q0q1xq2x2qmxm 多项式项的系数为实数&#xff0c;指数为整数&#xff0c;设计实现一元多项式操作的程序&#xff1a; ① 多项式链表建立&#xff1a;以&#xff08;系数&#xff0c;指数…

国内最佳的客服系统Tidio替代品是什么?

许多做跨境电商的企业都知道&#xff0c;Tidio是一款不错的为电子商务量身定制的全渠道客服系统支持工具&#xff0c;但还有其他同样不错的选择。 当前许多同类型产品以迎合欧美客户居多&#xff0c;中国用户使用不惯&#xff1b;免费版体验门槛高&#xff1b;只支持海外支付方…

【链路追踪】「Go语言」OpenTelemetry实现[gin, gRPC, log, gorm, redis]的集成

文章目录 一、OpenTelemetry的前世今生OpenTracingOpenCensus大一统 二、OpenTelemetry快速体验go快速体验OpenTelemetry系统架构尾部采样 三、通过http完成span传输函数中传递span的context 四、自定义inject和extract源码五、gRPC集成自用框架集成&#xff08;无视即可&#…

最强chrome、edge的广告拦截插件

最强chrome、edge的广告拦截插件 对于浏览器的广告是非常烦人的&#xff0c;尤其是使用百度搜索引擎时&#xff0c;总会在右侧出现百度热搜这样的东西&#xff0c;有时不经意间就会被某些热搜吸引。本来想搜索一些内容&#xff0c;结果被热搜等耗费了大量时间。 有很多人推荐…

pytorch基础语法学习:数据预处理transforms模块

来源&#xff1a;投稿 作者&#xff1a;阿克西 编辑&#xff1a;学姐 建议搭配视频食用 视频链接&#xff1a;https://ai.deepshare.net/detail/p_5df0ad9a09d37_qYqVmt85/6 系列其他文章传送门&#xff1a; pytorch基础语法学习&#xff1a;数据读取机制Dataloader与Datase…