uniapp中地图定位功能实现的几种方案

1.uniapp自带uni.getLocation

uni.getLocation(options) @getlocation | uni-app官网

实现思路:uni.getLocation获取经纬度后调用接口获取城市名

优点:方便快捷,直接调用

缺点:关闭定位后延时很久,无法控制定位延迟时间,流程卡顿。获取手机定位权限方法不支持h5

2.百度map

创建BMap.js

复制代码
export default {
    init() {
        const BMap_URL = `https://api.map.baidu.com/api?ak=${ baiduAk }&s=1&callback=onBMapCallback`
        return new Promise((reslove, reject)=> {
            if(typeof BMap !== 'undefined') {
                reslove(BMap)
            }
            window.onBMapCallback = function() {
                reslove(BMap)
            }
            let scriptNode = document.createElement('script')
            scriptNode.setAttribute('type', 'text/javascript')
            scriptNode.setAttribute('src', BMap_URL)
            document.body,appendChild(scriptNode)
        })
    }
}

引入使用:

复制代码
import map from '@/pages/plugins/BMap.js'
map.init().then(BMap=> {
    const locationCity = new BMap.Geolocation()
    locationCity.getCurrentPosition((options)=> {
        let city = options.address.city
        if(!city) {
            city = '北京'
        }
        // store.commit('getlocation', city)
        Vue.prototype.$cityName = city
        
        // 挂载页面
        
    }).catch((e)=> {
        
    })
})

优点:比较稳健,功能支持群面

缺点:dom拼接百度map降低性能,初始化时慢3秒

3.浏览器内置对象navigator.geolocation

复制代码
if(navigator.geolocation) {
    let options = {
        enableHighAccuracy: true, // 默认false, 为true时使用精准定位
        timeout: 5000, // 获取位置最长等待时间,默认不限时间
        maximumAge: 21600000, // 重复获取位置时,多长时间再次获取定位, 这里设置成6h 21600000
    }
    navigator.geolocation.getCurrentPosition(sucCallback, errorCallback, options)
}
function sucCallback(position) {
    var cords = position.coords
    getAddressInfo({  }).then(res=> {
        let city = res.data.city
        if(!city) {
            city = '北京'
        }
        // store.commit('getlocation', city)
        Vue.prototype.$cityName = city
        
        // 挂载页面
    })
}
function errorCallback(error) {
    var err = error.code
    switch(err) {
        case 0: 
            alert('未识别到位置信息')
            break;
        case 1: 
            alert('您拒绝了定位权限')
            break;
        case 2: 
            alert('地理位置获取失败')
            break;
        case 3:
            alert('定位超市')
            break;
        default:
            //
    }
    // store.commit('getlocation', '北京')
    Vue.prototype.$cityName = '北京'
        
    // 挂载页面
}

优点:性能好加载快

缺点:仅支持https协议链接,http协议下无法正常定位

相关推荐
iOS阿玮9 小时前
AppStore卡审依旧存在,预计下周将逐渐恢复常态!
uni-app·app·apple
郑州光合科技余经理11 小时前
开发实战:海外版同城o2o生活服务平台核心模块设计
开发语言·git·python·架构·uni-app·生活·智慧城市
行走的陀螺仪11 小时前
在UniApp H5中,实现路由栈的持久化
前端·javascript·uni-app·路由持久化·路由缓存策略
影子打怪11 小时前
uniapp通过plus.geolocation.watchPosition获取的坐标格式转换
uni-app
忒可君11 小时前
2026新年第一篇:uni-app + AI = 3分钟实现数据大屏
前端·vue.js·uni-app
行走的陀螺仪11 小时前
UniApp 横向可滚动 Tab 组件开发详解
uni-app·封装组件·tabs·自定义封装组件·可滚动组件tab
00后程序员张11 小时前
在 iPhone 上进行 iOS 网络抓包的实践经验
android·ios·小程序·https·uni-app·iphone·webview
2501_9159184111 小时前
介绍如何在电脑上查看 iPhone 和 iPad 的完整设备信息
android·ios·小程序·uni-app·电脑·iphone·ipad
2501_9160088912 小时前
没有 Mac 如何在 Windows 上创建 iOS 应用描述文件
android·macos·ios·小程序·uni-app·iphone·webview
Rysxt_1 天前
uni-app路由跳转完全指南:从基础到高级实践
uni-app