基于VC++的GPS数据压缩处理研究

2012-09-26 02:27周子富朱吉胜
电子设计工程 2012年21期
关键词:经度纬度字节

周子富,朱吉胜

(1.武警工程大学 研究生大队,陕西 西安 710086;2.武警工程大学 通信工程系,陕西 西安 710086)

GPS是目前世界上应用最为广泛的卫星导航系统,其全球性、全能性和全天候性的导航定位、定时和测速优势在诸多领域中得到越来越广泛的应用。GPS已逐步演变为一种世界性的高新技术产业,越来越受到了人们的关注[1]。

在各种导航系统及大型监控系统中,为了提供历史轨迹重放等功能,往往要存储大量的定位数据,同时这些数据甚至还要通过无线通信传送,所需费用高 而且传送中会受到网络带宽的限制,很可能出现网络延迟 这就大大影响了实时定位的效果。如何处理GPS数据对系统整体功能的实现极其重要。VC++凭借其在GPS通信及数据处理程序编写方面的优势,得到广泛应用。

1 GPS数据格式

想要对GPS数据进行处理,首先需要了解GPS的数据格式。目前,大多数GPS都采用美国国家海洋电子协会(National Marine Electronics Association)制定的NMEA-0183通信标准,这种通信标准输出的数据采用ASCII码,其内容包含了纬度、经度、高度、速度、日期、时间、航向以及卫星状况等信息,规定的语句有 6种,包括 GGA、GLL、GSA、GSV、RMC和VTG[2]。对于不同的用途,选用的语句记录也不同,对于大多数的普通使用者只关心其日期和时间、经纬度、地面速度信息等,而RMC语句就包含了以上信息,所以本文只讨论RMC语句。一条RMC语句包括了以下记录:语句标识头、世界时间、定位状态、纬度、纬度方位、经度、经度方位、地面速度、地面路线、日期、磁偏角、校验和和结束标记[3],其结构及各字段含义如下:

$GPRMC,<l>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<1l>*hh

<l>UTC 时间。 格式为 hhmmss.ss。

<2>状态,A为数据有效,V为非有效。

<3>纬度。 格式为ddmm.mmmm (度、分&小数分)。

<4>标明南北半球,N为北半球、S为南半球。

<5>经度,格式为 dddmm.mmmm (度、分 &小数分)。

<6>标明东西半球,E为东半球、W为西半球。

<7>地面上的速度。范围为 0.0到999.9。

<8>方位角,范围为000.0到 359.9度。

<9>日期。 格式为 ddmmyy(日、月、年)。

<l0>地磁变化,从 000.0到 180.0度。

<ll>地磁变化方向,为E或W。

一般情况下,并不需要所有的定位数据而只需要其中的一部分,所以在存储数据之前一般先要对数据预处理。

2 GPS数据的采集及预处理

GPS数据的采集一般都是通过串口通信进行的,接收机都提供有串口接口,常用的GPS接收器一般遵循NMEA-0183协议且提供串行通信接口与计算机通信。VC++提供的串口通信编程方法有好几种,其中利用MSComm控件实现串口通信是较为方便的一种,程序员不必去学习复杂的API函数,只需对串口进行简单配置,这方面的例子相当普遍,这里不作详细介绍。GPS接收机工作时会源源不断地把接收到的GPS定位数据传送到PC机中[4]。串口通讯代码从串口接收数据并将其放置于缓存data中,等待下一步的处理。

在对GPS数据进行某种压缩处理之前,应该先对其进行预处理。GPS数据预处理是一种最直接的处理方式,也是减小数据容量的一种比较直观有效的方法。分析GPS数据,可以知道这些信息中,有很多属于冗余信息。为了方便后续压缩的进行,先对输出的信号进行压缩预处理[5],预处理之后只保留必须要的信息,步骤如下:

1)语句标识头(ID):数据出自同一GPS接收机,每个语句的标识头都一样,所以该记录段属冗余信息,完全可以去除,在解压缩时再在每个语句前加上该标识头即可。

2)世界时间(UTC):该信息段以时、分、秒、毫秒的格式指示出当时世界时间。不进行预处理。

3)定位状态(A/V):占用1个字节,不进行预处理。

4)纬度:占用9个字节,不进行预处理。

5)经度:占用10个字节,不进行预处理。

6)经度指示器(E/W):占一个字节,它指示东西经。只研究在东经的情况,所以它是冗余信息,可以去除。

7)纬度指示器(N/S):占一个字节。处理同上。

8)地面速度:占用4个字节,可以去除。

9)日期:占用6个字节,以日、月、年的格式显示。因为该系统一天启动一次,日期相同,是冗余信息。

10)地磁变化:可以去除。

11)校验和、结束符:在完成对数据的校验后,校验和便可去除。结束符由回车、换行组成,由于语句长度已知所以也可以去除。

对一组数据:

$GPRMC,032510,A,2934.0467,N,10634.3591,E,000.0,000.0,191203,001.6,w*65则经过预处理后的 GPS数据格式为:032510,A,2934.0467,10634.3591,只剩下时间、状态、纬度和经度,共29个字节。进一步处理,可以将逗号去掉,将新的 数 据 变 成 为 已 “A” 为 首 的 字 符 串A0325102934.046710634.3591,把A放在第一个字节是为了方便遍历字符,此时,剩下26个字节,与原始数据的70个字节相比减小了62%。

利用VC++编程以上预处理时一般先通过对帧头的判断来进行数据的提取处理。由于帧内各数据段由逗号分割。因此在处理缓存数据时一般是通过搜寻ASCII码“$”来判断是否是帧头。在对帧头的类别进行识别后再通过对所经历逗号个数的计数来判断出当前正在处理的是哪一种定位导航参数[6]。下面是对缓存中的数据进行参数处理的部分代码:

这样就提取出了时间、状态、经度和纬度,后续的处理只需在此基础上再进行即可。

3 GPS数据压缩

数据压缩的方法很多,总的来说可以分为无损压缩和有损压缩两大类。本文针对预处理过的GPS数据的格式特点,采用半字节的方法[7]进行编码。可以看到,预处理过的数据为A0325102934.046710634.3591,即“A时间纬度经度”的格式。为了方便检测数据的完整性和方便编程实现,这里我们在后面加入结束标识C,变成“A时间纬度经度C”的格式,则处理完的数据包括有0至9十个符号、小数点“.”以及字母“A”、“B”,共12个符号。事实上,四位二进制编码就能区分16中状态,所以用四位二进制编码来表示12个符号已经足够,而不必用八位。压缩数据编码表如下:

表1 编码表Tab.1 Code table

这种编码方式提供了16种状态,而我们只用到了12种,还冗余4种,我们还可以根据需要,利用这4种状态进行编码实现其他功能,如用来实现纠错功能等。图1是进行数据压缩的流程图。

图1 数据压缩流程图Fig.1 Flow chart of data compression

从压缩编码表可以看出,采取这种编码方式可以直接使得数据压缩了50%。对于“A0325102934.046710634.3591B”,压缩编码之后只需用108位编码表示,和预处理前的数据(70个字节,560位)相比,虽然后面加了一个结束标识符B,但总的压缩编码压缩比仍可达80%。

4 结束语

文中设计并实现了一种在数据预处理的基础上进行的GPS数据压缩算法,压缩比可达到 80%以上。本算法前期的数据预处理之后GPS定位数据中只剩下12个符号表示,一方面去掉了很大一部分冗余信息,使数据量明显减小,另一方面符号数目减少且已知,因此在编码时只需根据ASCII码值建立较小的数组。这种数据处理方式比较简单,程序量小,压缩比大,且易于实现,对解决GPS应用中数据量大而存储器资源有限的问题以及数据传输带宽等问题具有重要的实际意义。

[1]罗海英,李强,刘旭东.基于VC++的GPS状态监控与数据采集软件的设计与实现[J].测绘通报,2010(12):27-29.

LUO Hai-ying,LI Qiang,LIU Xu-dong. Desigen and implementation of GPS state monitoring and data acquisition soffware based on VC++[J].Surveying and Mapping,2010(12):27-29.

[2]马飞,诸昌钤.利用VC++实现GPS数据采集[J].计算机时代,2005(6):13-15.

MA Fei,ZHU Chang-qian.GPS data acquisition Using VC++[J].Computer Age,2005(6):13-15.

[3]赵晓炜.基于Huffman编码的GPS定位数据压缩算法及实现[D].内蒙古:内蒙古工业大学,2006.

[4]陈静,许劼,邱国廷.用VC++6.0实现计算机与GPS通信[J].北京测绘,2004(3):25-29.

CHEN Jing,XU Jie,QIU Guo-ting.Using VC++6.0 to design the GPS-computer communication[J].Beijing Surveying and Mapping,2004(3):25-29.

[5]任华新.GPS定位数据压缩算法的设计[J].长春工程学院学报,2008,9(3):74-76.

REN Hua-xin.The design of the data compression algorithm on GPS system[J].J.Changchun Inst.Tech,2008,9 (3):74-76.

[6]邱治国,王向武.VC++实现GPS全球定位系统定位数据的提取[J].科技信息,2007(3):20-21.

QIU Zhi-guo,WANG,Xiang-wu.Location data extraction of GPS globalpositioningsystem with VC++[J].Science Information,2007(3):20-21.

[7]杨宏业,张跃.GPS定位数据压缩算法的设计与实现[J].电子技术应用,2002(12):29-32.

YANG Hong-ye,ZHANG Yue.GPS positioning data compression algorithm design and implementation[J].Electronic Technology,2002(12):29-32.

[8]马兰,袁卫.基于GPS的数据采集处理系统设计[J].现代电子技术,2010(15):171-172,176.

MA Lan,YUAN Wei.Design of data acquisition system based on GPS[J].Modern Electronic Technique,2010(15):171-172,176.

猜你喜欢
经度纬度字节
No.8 字节跳动将推出独立出口电商APP
对时差计算方法的探讨
No.10 “字节跳动手机”要来了?
简谈MC7字节码
纬度
月面余经度:一个冷门概念及其使用
常用纬度差异极值符号表达式
人类进入“泽它时代”
如何计算地方时