yanniwang

利用ADUC7060读取GPS信息

0
阅读(2831)

一条GPGGA格式的导航电文如下所示:

$GPGGA,091047.00,3959.7618,N,11619.5350,E,1,07,2.3,60.0,M,14.2,M,,*4A

GPGGA格式中共包含15条信息,之间用逗号隔开,我们为它们一一标号为1-15如下所示:

$ GPGGA, hhmmss, XXXX.XXXX, N/S, XXXXX.XXXX, E/W,
1 2 3 4 5
X, XX, XXX, 0/-XXXX, M, 0/-XXX, M, XXX, XXXX *hh<CR><LF>
6 7 8 9 10 11 12 13 14 15
各条信息的解释如下
1:世界时(UTC):hh:时mm:分ss:秒
北京时间(东八时区)=UTC+8(小时)
2:纬度:“度度分分.分分分分”方式表示。小数点后也以分为单位
3:N:北纬S:南纬
4:经度:“度度度分分.分分分分”方式表示。小数点后也以分为单位
5:E:东经W:西经
6:GPS质量指示0:未定位1:GPS定位2:差分GPS定位
7:使用到的卫星数0~12
8:HDOP值水平方向的定位精度劣化程度系数。
3 维定位时也会输出HDOP值。但在未定位时输出“099”。
如果输出语句的经纬度输出设置精度达不到1/10000时,小数点后省略。
9:天线高度0:正数,高于海平面-:负数,低于海平面
10:天线高度单位m
11:地理高度0:正数,高于海平面-:负数,低于海平面
12:地理高度单位m
13:DGPS修正经过的时间差分数据时龄单位=秒
14:差分基准站发播的ID编号
15:校验和

 

分析可以看出,电文以“$”开始,回车符结束,各种信息间以“,”分开,根据这个规律编写了解码程序,软件流程如下图

C程序文件如下:

void ParseGPSInfo(char *lpszinBuf)

{

    int    i = 0;

    int    j = 0;

 

    int    SectionID = 0;

 

 

    for(i=0;( i<strlen(lpszinBuf));i++)

 

    {

 

       

        if(*(lpszinBuf+i)==',')

        {

            SectionID++;

            j = 0;

       

        }

 

 

         else

        {

                switch(SectionID)

                 {

               

                   case 1:

                          Time[j++] = *(lpszinBuf+i);

                          break;

                   case 2:

                          Lat[j++] = *(lpszinBuf+i);

                          break;

                   case 4:

                          llong[j++] = *(lpszinBuf+i);

                          break;

 

                   case 9:

                          Height1[j++] = *(lpszinBuf+i);

                          break;

                   case 11:

                          Height2[j++]= *(lpszinBuf+i);

                          break;

 

                  default:  break;

                 } 

         }

    }

}