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

uni-app使用北斗卫星实现离线定位

权限配置

仍然采用 HTML5+ 的定位方法,首先需要打开定位权限:

// manifest.json/* 模块配置 */ "modules" : { "Geolocation" : {}, // 启用定位模块}, /* 应用发布信息 */ "distribute" : { /* android打包配置 */ "android" : { "permissions" : [ "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>", "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>", ] }, /* SDK配置 */ "sdkConfigs" : { "geolocation" : { "system" : { "__platform__" : [ "android" ] } } } },

这里仅设置了安卓代码,IOS系统需要增加额外的配置。

实现

Trae提醒我这里需要注意,Android 6.0(API 23)及以上版本需要动态申请权限,不能只靠 manifest 声明,否则仍然存在拿不到权限的可能。

// 鉴权 getLocationSafely(onSuccess, onError) { let that = this; // 1. 先检查系统定位是否开启(Android 特有)plus.geolocation.getCurrentPosition(() => { console.log('定位服务已经开启'); uni.showToast({ title: '定位服务已经开启', icon: 'none', duration: 3000 }); }, // 这里只是触发系统检测,不处理成功 (e) => { if (e.code === 4) { // code=4 表示“位置服务未开启” uni.showModal({ title: '定位服务未开启', content: '请前往系统设置开启位置信息,才能获取当前位置', showCancel: true, confirmText: '去设置', success: (res) => { if (res.confirm) { // 跳转到系统定位设置页(仅 Android 有效) plus.runtime.openURL('package:com.android.settings'); } } }); onError?.(new Error('系统定位未开启')); return; } }, { timeout: 3000 } ); }, // 也可以使用 uni-app 的官方API进行鉴权uni.authorize({scope: 'scope.userLocation', success() { // 用户同意,可以调用定位 uni.getLocation({ ... }) }, fail() { // 用户拒绝,提示去设置开启 uni.showModal({ title: '定位权限被禁用', content: '请在设置中开启位置权限', showCancel: false }); } });

除却上面的权限原因导致的定位不到,Trae给出的提示还有需要关注:

  • 定位功能是否已经开启
  • 省电策略是否已经关闭(部分设备省电模式下会限制定位)
  • 一定!一定!一定!要到室外测试

测试的时候可以采用两两对照的方式测试:室外vs室内飞行模式vs有网GPS 开启vs关闭,测试上述九种状态的组合。

// 定位方法 function startBeidouLocation() { // TODO 此处可以先检查定位服务是否开启 plus.geolocation.getCurrentPosition( function(position) { console.log('✅ 定位成功'); console.log('纬度:', position.coords.latitude); console.log('经度:', position.coords.longitude); console.log('来源:', position.coords.source); // 可能显示 gps/beidou/gnss uni.showToast({ title: `定位成功: ${position.coords.latitude.toFixed(5)}, ${position.coords.longitude.toFixed(5)}`, icon: 'none' }); }, function(error) { console.error('❌ 定位失败', error.code, error.message); let msg = ''; switch (error.code) { case 1: msg = '用户拒绝授权'; break; case 2: msg = '位置不可用(可能未搜星)'; break; case 3: msg = '定位超时'; break; default: msg = '未知错误'; } uni.showToast({ title: '定位失败: ' + msg, icon: 'none' }); }, { enableHighAccuracy: true, // 此处必须为 true,才能触发 GNSS(含北斗)timeout: 60000, // 给足 60 秒冷启动时间 maximumAge: 0 // 不使用缓存位置 } ); }

这里的timeout甚至可以给的再大点,使用卫星定位冷启动时间其实非常长,不过你如果不是在人迹罕至的区域,60秒基本上就够用了。

http://www.jsqmd.com/news/275500/

相关文章:

  • Java中构建前端可视化维度指标列表:从代码实现到最佳实践
  • React 官方纪录片观后:核心原理解析与来龙去脉
  • AI法律文书准确性测试方法论
  • 跨境电商“防关联”实战指南:把风险挡在账号之外
  • 别管,咱们前端人有自己的拼夕夕~
  • 大家有空就去看这份前端宝典,真的能提高level
  • 2026年国内GEO优化服务商深度评测:数据监测能力对比分析
  • 从策划到执行一站式服务,苏州合肥江苏南京双节美陈设计公司甄选
  • 收藏!大模型技术与应用体系梳理(小白程序员入门必看)
  • WPF 事件机制与初始化流程深度解析
  • 文件重命名软件 Bulk Rename Utility v4.1绿色便携版
  • java+vue+SpringBoot学生网上选课系统(程序+数据库+报告+部署教程+答辩指导)
  • 一键永久关闭Windows自动更新,支持Win10和Win11,禁止windows11自动更新工具
  • 2026年GEO服务商选型指南:如何避开黑箱陷阱?
  • 全网最全专科生必备TOP9AI论文网站测评
  • 孤能子视角:“宇宙学“
  • 收藏!程序员转型大模型全攻略:理清思路,少走弯路
  • 孤能子视角:“1+1=2“
  • 毕业设计项目 基于LSTM的预测算法
  • springboot146基于Java Web的老年人饮食健康档案管理系统的设计与实现
  • 收藏级!24张图全景解析AI大模型应用架构设计(小白程序员必备
  • 智能体架构的五维解构:大模型、提示词、工具、Agent与MCP - 智慧园区
  • 计算机毕业设计springboot在线心理咨询平台 基于 SpringBoot 的校园网络心理支持平台 轻量级 Java 框架下的心理健康在线服务系统
  • 收藏!大语言模型(LLM)核心原理与医疗垂直领域应用全解析
  • 从 Docker OverlayFS 到 OCI 镜像格式
  • 吸附能与结合能的理解和计算
  • springboot147基于JavaEE的服饰服装商城网站的设计与实现
  • 大数据领域存算分离:推动数据创新
  • 从巨额亏损中提炼出的3条颠覆性交易心法
  • 机器学习 - 提升模型性能