当前位置: 首页 > news >正文

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.cityif(!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.coordsgetAddressInfo({  }).then(res=> {let city = res.data.cityif(!city) {city = '北京'}// store.commit('getlocation', city)Vue.prototype.$cityName = city// 挂载页面})
}
function errorCallback(error) {var err = error.codeswitch(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协议下无法正常定位

相关文章:

  • Technology Strategy Pattern 学习笔记2-Creating the Strategy-World Context
  • 【系统架构设计】架构核心知识:4 系统可靠性分析与设计
  • 华为机试练习题:HJ11 数字颠倒
  • 【MongoDB】索引 - 单字段索引
  • 记一次经典SQL双写绕过题目[极客大挑战 2019]BabySQL 1
  • 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python 计算机竞赛
  • react 实现chatGPT的打印机效果 兼容富文本,附git地址
  • 【系统架构设计】计算机公共基础知识: 6 知识产权与标准化
  • Android ViewGroup 浅析一
  • Redis7--基础篇2(Redis的十大数据类型及常用命令)
  • freertos任务参数
  • 【计算机组成】实模式/保护模式下地址分段(基段地址+偏移地址)的原因
  • 找到【SVM】中最优的惩罚项系数C
  • Python中CAN通讯学习
  • Appium 移动端自动化测试,触摸(TouchAction) 与多点触控(MultiAction)
  • 分享的文章《人生如棋》
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 2017-09-12 前端日报
  • ERLANG 网工修炼笔记 ---- UDP
  • Hibernate最全面试题
  • JavaScript新鲜事·第5期
  • Python3爬取英雄联盟英雄皮肤大图
  • React-flux杂记
  • 大快搜索数据爬虫技术实例安装教学篇
  • 检测对象或数组
  • 前端相关框架总和
  • 事件委托的小应用
  • 自定义函数
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 说说我为什么看好Spring Cloud Alibaba
  • #pragma once
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (Note)C++中的继承方式
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (九)信息融合方式简介
  • (算法)Game
  • (译) 函数式 JS #1:简介
  • (转)h264中avc和flv数据的解析
  • (转)LINQ之路
  • (转载)利用webkit抓取动态网页和链接
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖