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

news/2024/11/2 9:30: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 = locationthis.getLocationl();uni.hideLoading()}, err => {uni.hideLoading()if (err.code === 1) {uni.showModal({title: '获取定位权限失败',content: '你拒绝了位置授权服务。请允许当前页面获取定位授权,后刷新页面。'})} else {uni.showModal({title: '获取定位权限失败',content: '请确定手机定位已打开,并且当前浏览器允许获取定位,开启后请刷新页面。'})}})})},methods: {// 获取精准定位getLocationl() {let that = thisif (!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;//市区codethat.valiFormData.areaNumName = res.city;//市区})},}

总结

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

启发来源于何木木大佬


http://www.ppmy.cn/news/81831.html

相关文章

MyBatis环境搭建+第一个MyBatis程序

目录 1.MyBatis是什么&#xff1f; 2.MyBatis开发环境搭建 3.我的第一个MyBatis程序 1.MyBatis是什么&#xff1f; MyBatis是一款数据库框架&#xff0c;是一款优秀的持久层框架&#xff0c;它不仅支持用户自定义SQL和存储过程&#xff0c;而且还具有高级映射功能。简单来说…

solr快速上手:核心概念及solr-admin界面介绍(二)

0. 引言 上一节&#xff0c;我们简单介绍了solr并演示了单节点solr的安装流程&#xff0c;本章&#xff0c;我们继续讲解solr的核心概念 solr快速上手&#xff1a;solr简介及安装&#xff08;一&#xff09; 1. 核心概念 核心&#xff08;索引/表&#xff09; 在es中有索引…

2.2.2 部署Master节点、添加Node节点

2.2.2 部署Master节点 1.安装docker、kubeadm、kubelet、kubectl 前面我们已经完成了虚拟机中系统的初始化&#xff0c;下面我们就在我们所有的节点上安装docker、kubeadm、kubelet、kubectl。 Kubernetes默认CRI&#xff08;容器运行时&#xff09;为Docker&#xff0c;因此…

Vivado综合属性系列之八 DIRECT_ENABLE DIRECT_RESET

目录 一、前言 二、DIRECT_ENABLE、DIRECT_RESET ​ ​2.1 属性说明 ​ ​2.2 工程代码 ​ ​2.3 综合结果 一、前言 在Vivado 2019之前的版本中&#xff0c;对于设计中触发器的使能端口和复位端口是会自动接地&#xff0c;如果需要接设计端口&#xff0c;如果要直连…

CANopenNode Master 配置

文章目录 CANopenNode 简介CANopenNode 主栈SDO ClientPDO 通讯参数RPDO 通讯参数RPDO 通信参数设置实例TPDO 通讯参数TPDO 通信参数设置实例 PDO 映射参数RPDO 映射参数设置实例TPDO 映射参数设置实例 CANopenNode 简介 CANopenNode 是一个开源的免费的开源 CANopen 协议栈。…

CMS 8bit单片机C语言编写指南

0 Preface/Foreword 单片机包含两部分&#xff1a;程序内存&#xff08;Program memory space&#xff09;和数据存储器(Ram memory space)。 CMS单片机堆栈深度受限&#xff0c;随具体的芯片而固定。 1 CMS C程序框架及数据类型 1.1 源程序基本框架 Example: 1.2 CMS C中变…

混合属性mix-blend-mode不生效

下面的ABCDE是混合图层&#xff0c;box是他们的父级&#xff0c;一般浏览器支持都没什问题需要注意的是&#xff0c;确保父元素不是透明的&#xff0c; 我使用的时候发现给父元素rgba设置透明度这种方式没啥作用&#xff0c;还得是纯色&#xff0c;没去深究&#xff0c;设置纯色…

Gateway服务网关入门

Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。…