码农知识堂 - 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协议下无法正常定位

  • 相关阅读:
    得帆云iPaaS白皮书|WMS集成,打造高效规范的仓储管理业务生态
    Spring整合mybatis
    通过snmp获取设备每个接口的配置IP地址,网段信息和VLAN接口号
    基于PHP+MySQL大学生心理健康管理系统的设计与实现
    NVIDIA控制面板进行设置时提示“无法应用选定的设置到您的电脑”的解决办法(更新显卡驱动的方法)
    数据库基础面试——优化问题
    【博学谷学习记录】超强总结,用心分享|Hive表生成函数
    【STM32】IIC(Inter Integrated Cirruit--集成电路总线)
    【SSM框架】Mybatis详解10(源码自取)之入参、返回值map
    封装了一个简单的C++ HDF5工具库,实现常用数据类型的读写
  • 原文地址:https://blog.csdn.net/q_qman/article/details/134215646
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号