Advertisement

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

阅读量:

本总结讨论了GPS卫星数量的计算方法及其实现原理:
内置GPS设备:

  • 使用LocationManager.addGpsStatusListener()监听卫星状态。
  • 在GpsStatus变化时调用回调函数fetchCurGpsStatus()。
  • 通过遍历所有可搜索卫星并统计已校准卫星数(fixedSatellites)来判断定位质量。
  • 当fixedSatellites < 3时认为定位失败。
    外接GPS设备(蓝牙GPS):
  • 根据标准NMEA格式的GPGGA/GPGSV数据解析追踪到的卫星数量。
  • GPGGA中包含“Number of satellites being tracked”。
  • GPGSV中包含“Number of satellites in view”,表示可搜索到的所有卫星数(all)。
    该总结涵盖了两种数据源的计算方式及其核心逻辑。

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

卫星数量基于 gps定位数据生成。gpS数据类型分为内置型与外设型两类。

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

启动内置GPS服务时,使用LocationManager注册GPs状态监听器,并在状态变化回调函数中统计可用卫星数。

mGpsStatusCallback = new GpsStatus.Listener() {

@Override

public void onGpsStatusChanged(int event) {

if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {

//卫星状态改变

fetchCurGpsStatus();

}

}

};

mService := (LocationManager) getContext().getSystemService(Context.TYPE_LOCATION_SERVICE);

mService.addGpsStatusListener(mGpsStatusCallback);

必须确保在不再需要的时候及时取消注册的监听设置,并且在禁止内置的gps定位服务时也要相应地取消相应的监听配置。

mService.removeGpsStatusListener(mGpsStatusCallback);

卫星状态改变时,首先获取GpsStatus,通过如下方式处理:

利用GpsStatus进行查询以获得(GpsSatellite)卫星对象列表,并该列表涵盖了实时可搜索的所有卫星信息。

在GpsSatellite对象中存在mUsedInFix字段用于判断卫星是否参与定位校准。对所列卫星进行遍历,并统计其中已被成功定位的卫星数量fixedSatellites;随后向系统发送消息以通知卫星总数发生了变化。

在卫星定位系统中遵循卫星数量最低要求的基础上, 确定fixedSatellites的数量是否满足至少三颗以上的标准; 若固定卫星数量少于该标准, 则会导致定位结果无效

大致代码如下:

private void fetchCurGpsStatus() {

GpsStatus mStatus = mService.getGpsStatus(null);

//获取卫星颗数的默认最大值

int maxSatellites = mStatus.getMaxSatellites();

//创建一个迭代器保存所有卫星

Iterator 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)

在NMEA标准中,GPS接收机处理GPGGA格式的数据时会记录所追踪卫星的数量信息作为重要观测数据。

/* $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 Data

123519 Fix taken at 12:35:19 UTC

4807.038,N Latitude 48 deg 07.038' N

01131.000,E Longitude 11 deg 31.000' E

1 Fix quality:

08 Number of satellites being tracked

0.9 Horizontal dilution of position

545.4,M Altitude, Meters, above mean sea level

46.9,M Height of geoid (mean sea level) above WGS84

ellipsoid

(empty field) time in seconds since last DGPS update

(empty field) DGPS station ID number

*47 the checksum data, always begins with *

在GPGSV数据格式中包含有能观测到的卫星数量(所有可及的卫星数),这是总的所有卫星数量。

/* $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 view

2 Number of sentences for full data

1 sentence 1 of 2

08 Number of satellites in view

01 Satellite PRN number

40 Elevation, degrees

083 Azimuth, degrees

46 SNR - higher is better

for 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.

全部评论 (0)

还没有任何评论哟~