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

简介: 最近在做获取用户当前定位信息的时候,发现uniapp官方提供的兼容性并不是特别好,光注意事项都是密密麻麻一大堆,在实际使用场景下,效果并不理想,也不是很稳定。于是便重新封装了一下腾讯地图的一些东西,提高了下兼容度!下边我会把我用的封装思路逻辑给大家一一讲解。完整代码可私信我我发给你以上便是基于uni-app框架开发,使用Promise进行异步请求和结果返回,封装的H5获取当前详细定位信息组件希望大家一起交流。

前言

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

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

在这里插入图片描述

效果预览

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

兼容性说明

在这里插入图片描述

准备工作

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

    逻辑思路:

  3. 判断环境并获取定位权限
  4. 创建腾讯地图定位实例,用于后续方法调用
  5. 封装getLocation获取位置信息的方法
  6. 提供watchPosition监听位置和clearWatch停止监听的方法
  7. 所有方法都通过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获取当前详细定位信息组件希望大家一起交流。

启发来源于何木木大佬

目录
相关文章
|
2月前
|
移动开发 Android开发 容器
uniapp中使用videojs构建H5直播播放器
【10月更文挑战第14天】这两天在开发H5直播带货功能模块,使用原生的video播放器播放不了m3u8的流地址,于是找了videojs,参考了网上的一些资料研究了一下,感觉还不错,videojs播放m3u8流地址还挺稳定的,下面就简单记录一下uniapp里面使用方式
|
2月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
340 3
|
2月前
|
Web App开发 移动开发 前端开发
uniapp环境H5运行及发行(入门必学)
uniapp环境H5运行及发行(入门必学)
251 5
|
2月前
|
移动开发 小程序 数据可视化
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
51 2
|
4月前
|
移动开发 JavaScript 前端开发
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
这篇文章介绍了在UniApp H5项目中处理跨域问题的两种方法:通过修改manifest.json文件配置h5设置,或在项目根目录创建vue.config.js文件进行代理配置,并提供了具体的配置代码示例。
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
|
4月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
116 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
4月前
|
移动开发 开发框架 JavaScript
在UniApp的H5项目中,生成二维码和扫描二维码的操作处理
在UniApp的H5项目中,生成二维码和扫描二维码的操作处理
|
4月前
|
移动开发 JavaScript 前端开发
【绝技揭秘】从零到英雄:解锁UniApp H5项目中的二维码生成与扫描秘籍,让你的应用瞬间变身扫码达人!
【8月更文挑战第20天】二维码在移动应用中无处不在。本文详述了在UniApp H5项目中实现二维码生成与扫描的方法。通过对比插件`uni-app-qrcode`和JavaScript库`qrcode-generator`生成二维码的方式,以及使用插件`@juggle/resize-observer`和HTML5的MediaDevices API进行扫描的技术方案,帮助开发者挑选最佳实践。无论是插件的便捷性还是原生JavaScript的灵活性,都能满足不同项目需求。
141 0
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的电影信息推荐APP的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的电影信息推荐APP的详细设计和实现(源码+lw+部署文档+讲解等)
|
4月前
|
移动开发 前端开发 JavaScript
UniApp H5项目大揭秘:高效生成与扫描二维码的终极策略,让你的应用脱颖而出!
【8月更文挑战第3天】UniApp让开发者能以Vue.js构建跨平台应用。在H5项目中,通过第三方库如qrcodejs2可轻松生成二维码,代码简洁易集成;或用Canvas API获得更高灵活性。扫描方面,H5+ API适合App环境,而纯H5项目则需前端库加后端服务配合。不同方法各有优势,应按需选择以优化体验。
319 0