码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • uniapp中地图定位功能实现的几种方案


    1.uniapp自带uni.getLocation

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

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

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

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

    2.百度map

    创建BMap.js

    1. export default {
    2. init() {
    3. const BMap_URL = `https://api.map.baidu.com/api?ak=${ baiduAk }&s=1&callback=onBMapCallback`
    4. return new Promise((reslove, reject)=> {
    5. if(typeof BMap !== 'undefined') {
    6. reslove(BMap)
    7. }
    8. window.onBMapCallback = function() {
    9. reslove(BMap)
    10. }
    11. let scriptNode = document.createElement('script')
    12. scriptNode.setAttribute('type', 'text/javascript')
    13. scriptNode.setAttribute('src', BMap_URL)
    14. document.body,appendChild(scriptNode)
    15. })
    16. }
    17. }

    引入使用:

    1. import map from '@/pages/plugins/BMap.js'
    2. map.init().then(BMap=> {
    3. const locationCity = new BMap.Geolocation()
    4. locationCity.getCurrentPosition((options)=> {
    5. let city = options.address.city
    6. if(!city) {
    7. city = '北京'
    8. }
    9. // store.commit('getlocation', city)
    10. Vue.prototype.$cityName = city
    11. // 挂载页面
    12. }).catch((e)=> {
    13. })
    14. })

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

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

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

    1. if(navigator.geolocation) {
    2. let options = {
    3. enableHighAccuracy: true, // 默认false, 为true时使用精准定位
    4. timeout: 5000, // 获取位置最长等待时间,默认不限时间
    5. maximumAge: 21600000, // 重复获取位置时,多长时间再次获取定位, 这里设置成6h 21600000
    6. }
    7. navigator.geolocation.getCurrentPosition(sucCallback, errorCallback, options)
    8. }
    9. function sucCallback(position) {
    10. var cords = position.coords
    11. getAddressInfo({ }).then(res=> {
    12. let city = res.data.city
    13. if(!city) {
    14. city = '北京'
    15. }
    16. // store.commit('getlocation', city)
    17. Vue.prototype.$cityName = city
    18. // 挂载页面
    19. })
    20. }
    21. function errorCallback(error) {
    22. var err = error.code
    23. switch(err) {
    24. case 0:
    25. alert('未识别到位置信息')
    26. break;
    27. case 1:
    28. alert('您拒绝了定位权限')
    29. break;
    30. case 2:
    31. alert('地理位置获取失败')
    32. break;
    33. case 3:
    34. alert('定位超市')
    35. break;
    36. default:
    37. //
    38. }
    39. // store.commit('getlocation', '北京')
    40. Vue.prototype.$cityName = '北京'
    41. // 挂载页面
    42. }

    优点:性能好加载快

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

  • 相关阅读:
    【数据结构】一文了解链表【思路+例题学习】
    mysql实战操作总结
    vue3 插值表达式
    【数据结构】深度剖析最优建堆及堆的经典应用 - 堆排列与topk问题
    安全入门day01
    (Matlab)遗传算法优化的BP神经网络实现回归预测
    MVC Controlle View Model之间新建类
    【小月电子】XILINX FPGA开发板(XLOGIC_V1)系统学习教程-LESSON8 LCD1602液晶显示
    数据库事务的四种隔离级别
    2023 年 亚太赛 APMCM ABC题 国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析
  • 原文地址:https://blog.csdn.net/q_qman/article/details/134215646
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号