卫星数量有两种:卫星总数(all),和已校准卫星数(fixed);

卫星数量来源于gps定位数据,gps数据来源又有两种:内置gps和外接gps设备。

一、内置gps数据来源的计算方式

  1. 开始启用内置gps时,通过LocationManager.addGpsStatusListener()api,监听gps状态,在监听的回调中计算卫星数量,代码:

    mGpsStatusCallback = new GpsStatus.Listener() {@Overridepublic void onGpsStatusChanged(int event) {if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {//卫星状态改变fetchCurGpsStatus();}}
    };
    mService = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
    mService.addGpsStatusListener(mGpsStatusCallback);
    
  2. 注册监听永远要记得在不再需要时解除监听,当关闭内置gps时,移除监听:

    mService.removeGpsStatusListener(mGpsStatusCallback);
    
  3. 卫星状态改变时,首先获取GpsStatus,通过如下方式处理:

    1,通过GpsStatus获取到卫星对象(GpsSatellite)列表,包含了当前能搜到的所有卫星;

    2,GpsSatellite对象中有mUsedInFix字段标记其是否是参与定位校准。遍历上述列表,统计已校准的卫星数fixedSatellites,发布消息,通知卫星数量改变;

    3,基于3卫星定位的最低要求,判断fixedSatellites是否是3颗以上,如果不是,那么认为当前定位失败。

    大致代码如下:

    private void fetchCurGpsStatus() {GpsStatus mStatus = mService.getGpsStatus(null);//获取卫星颗数的默认最大值int maxSatellites = mStatus.getMaxSatellites();//创建一个迭代器保存所有卫星Iterator<GpsSatellite> iters = mStatus.getSatellites().iterator();//卫星数int count = 0;if (iters != null) {while (iters.hasNext() && count <= maxSatellites) {GpsSatellite s = iters.next();if (s.usedInFix()) {count++;}}}if (count < 3) {//定位失败} else {//定位成功}
    }
    

二、外接gps设备据来源的计算方式(蓝牙gps)

  1. 标准nmea格式的gps数据中GPGGA格式的数据会包含Number of satellites being tracked(追踪到的卫星数量)即为目标数据(fixed)。

    /* $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47 */Where:GGA          Global Positioning System Fix Data123519       Fix taken at 12:35:19 UTC4807.038,N   Latitude 48 deg 07.038' N01131.000,E  Longitude 11 deg 31.000' E1            Fix quality: 08           Number of satellites being tracked0.9          Horizontal dilution of position545.4,M      Altitude, Meters, above mean sea level46.9,M       Height of geoid (mean sea level) above WGS84ellipsoid(empty field) time in seconds since last DGPS update(empty field) DGPS station ID number*47          the checksum data, always begins with *
    
  2. GPGSV格式的数据中会包含Number of satellites in view(所有可及的卫星数),是可搜到的所有卫星数(all)。

    /* $GPGSV,2,1,08,01,40,083,46,02,17,308,41,12,07,344,39,14,22,228,45*75 */
    Where:GSV          Satellites in view2            Number of sentences for full data1            sentence 1 of 208           Number of satellites in view01           Satellite PRN number40           Elevation, degrees083          Azimuth, degrees46           SNR - higher is betterfor up to 4 satellites per sentence*75          the checksum data, always begins with *
    Sometimes got $GPGSV,1,1,00*75 when just started
    or inside building.
    

Gps开发实战——卫星数量获取相关推荐

  1. android gps 卫星数据格式,Gps开发实战——卫星数量获取

    卫星数量有两种:卫星总数(all),和已校准卫星数(fixed): 卫星数量来源于gps定位数据,gps数据来源又有两种:内置gps和外接gps设备. 一.内置gps数据来源的计算方式 开始启用内置g ...

  2. 2021年Java开发实战!mysql获取数据库名称

    1. 一致性(Consistency) 一致性(Consistency)是指多副本(Replications)问题中的数据一致性.可以分为强一致性.顺序一致性与弱一致性. 1.1 强一致性(Stric ...

  3. gps android 卫星位置,Android手机GPS获取卫星数量不正确问题

    最近做一个功能,需要发送自己的坐标给别人追踪,但是我发现有时候,GPS信号弱或者没有信号的时候,发送的值就很可能不对,也无法实现这个功能 所以我想判断一下当前能搜到几颗卫星,如果搜到4颗以上才允许启动 ...

  4. android过滤数字,android – GPS卫星数量和位置过滤

    根据可用的位置字段,浮动精度似乎是确定GPS位置有多好的主要字段,而不考虑时间戳.我想知道从NMEA数据(我认为是$GPGGA)或通过LocationManager.getGpsStatus解析卫星数 ...

  5. flutter 获取android 还是ios_Flutter完整开发实战详解(二十、 Android PlatformView 和键盘问题)...

    作为系列文章的第二十篇,本篇将结合官方的技术文档科普 Android 上 PlatformView 的实现逻辑,并且解释为什么在 Android 上 PlatformView 的键盘总是有问题. 为什 ...

  6. 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...

  7. 分布式系统开发实战:分布式存储,分布式存储常用技术

    分布式存储 互联网每天产生数以亿计的数据,这些数据如何能够被正确地存储.解析.利用,是摆在每个数据公司面前的挑战.传统的关系型数据库,对于处理大规模的数据显得力不从心,由此以NoSQL为代表的分布式存 ...

  8. 《Linux嵌入式实时应用开发实战(原书第3版)》——3.5 Linux文件系统

    本节书摘来自华章计算机<Linux嵌入式实时应用开发实战(原书第3版)>一书中的第3章,第3.5节,作者:(美)Doug Abbott 更多章节内容可以访问云栖社区"华章计算机& ...

  9. ASP.NET MVC5微信公众平台整合开发实战教程

    <ASP.NET MVC5&微信公众平台整合开发实战(响应式布局.JQuery Mobile,Windows Azure.微信核心开发)> 课程讲师:57Code 课程分类:ASP ...

  10. iOS cocos2d 2游戏开发实战(第3版)---你的第一个游戏!

    2019独角兽企业重金招聘Python工程师标准>>> 随着苹果公司不断地创新与发展,新的iPhone 5.iPad 4以及iPad mini产品相继问世,包括iOS与Xcode在内 ...

最新文章

  1. 使用mysql_使用MySQL
  2. libreadline.so.6: undefined symbol
  3. C# winform 后台控制删除动态生成的控件
  4. 白话Elasticsearch48-深入聚合数据分析之 Percentiles Aggregation-percentiles百分比算法以及网站访问时延统计及Percentiles优化
  5. [模版] 网络流最大流、费用流
  6. 防盗链与token运用
  7. 如何在SQL Server中比较表
  8. 线程开启方法之一——异步委托
  9. mimics软件怎么恢复原来默认的窗口设置
  10. 国内比较常见的工厂管理系统有哪些?
  11. 关于如何设计网站首页
  12. C++算法和数据结构之《二叉树》
  13. 《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf
  14. 弓形锯床主传动及工作机构设计
  15. 淘宝再次升级!这次的关键词是啥
  16. 【CrackMe 实战】逆向破解实战之 001 Acid burn.exe
  17. mysql查男女比例百分比_sql server 计算男女比例 百分比
  18. GCTA学习3 | GCTA的两篇NG:fast-LMM和fast-GLMM
  19. Spire.PDF for Java 4.8.7 Crack
  20. 【考研英语语法】介词短语

热门文章

  1. 【FastDFS-V5.11】Linux下FastDFS+Nginx实现分布式图片服务器搭建详细教程(单机模式)
  2. 电脑播放SACD-ISO/DSD/DFF音乐
  3. 海康摄像头rtsp流格式
  4. 龙芯ejtag 单步调试pmon
  5. 手机html5编辑器哪个好,3款容易上手的HTML5编辑工具推荐~
  6. 【速看】拼多多云服务平台流程信息流出
  7. 【z变换】2. z变换的性质
  8. js调用数科阅读器_js调用后台,后台调用前台等方法总结
  9. 惠普暗影精灵2 Mojave(几乎完美黑苹果)
  10. 雷达点云地图数据处理