1、空间定位系统实验报告姓名:喻富炜班级:0421202学号:2012211640实验要求:1、查找 GPS 的 NMEA 协议相关资料。2、根据 GPS_DATAS.TXT 文件中的数据,编写程序分析出 gps数据提供的信息:卫星颗数、经度、纬度、高度、航向角、速度等。一、 解题分析:(1)分析 GPS_DATAS.TXT$GPGGA,025620.00,2602.33721,N,11911.49176,E,2,04,1.63,13.5,M,9.9,M,0000*5D$GPRMC,025620.20,A,2602.33722,N,11911.49176,E,0.100,281211,D*79$G
2、PGGA,025620.20,2602.33722,N,11911.49176,E,2,04,1.63,13.3,M,9.9,M,0000*5A$GPRMC,025620.40,A,2602.33723,N,11911.49174,E,0.098,281211,D*7CGPGGA 是 GPS 固定数据输出语句 $GPGGA,025620.00,2602.33721,N,11911.49176,E,2,04,1.63,13.5,M,9.9,M,0000*5D其标准格式为:GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)hh(
3、CR)(LF) 各部分所对应的含义为: (1)定位 UTC 时间:02 时 56 分 20 秒 (2)纬度(格式 ddmm.mmmm:即 dd 度,mm.mmmm 分); (3)N/S(北纬或南纬):北纬 26 度 02.33721 分; (4)经度(格式 dddmm.mmmm:即 ddd 度,mm.mmmm 分); (5)E/W(东经或西经):东经 119 度 11.49176 分; (6)质量因子(0=没有定位,1=实时 GPS,2=差分 GPS):2=差分 GPS; (7)可使用的卫星数(08):可使用的卫星数=04; (8)水平精度因子(1.099.9);水平精度因子=1.63; (9
4、)天线高程(海平面,9999.999999.9,单位:m);天线高程=13.5m); (10)大地椭球面相对海平面的高度(999.99999.9,单位:m):9.9m; (11)差分 GPS 数据年龄,实时 GPS 时无:无; (12)差分基准站号(00001023),实时 GPS 时无:无; 。 $GPRMC,025620.20,A,2602.33722,N,11911.49176,E,0.100,281211,D*79其 标 准 格 式$GPRMC,*hh 定 位 UTC 时 间 , 02 时 56 分 10 秒 (时 分 秒 .毫 秒 )格式 定 位 状 态 , A=有 效 定 位 ,
5、V=无 效 定 位 纬 度 ( 格 式 ddmm.mmmm: 即 dd 度 , mm.mmmm 分 ) ;N/S( 北 纬 或 南 纬 ) : 北 纬 26 度 2.33722 分 ; 经 度 ( 格 式 ddmm.mmmm: 即 dd 度 , mm.mmmm 分 ) ; E/W(东 经 或 西 经 ):东 经 119 度 11.49176 分 ;地 面 速 率 0.100; 地 面 航 向 (000.0359.9 度 , 以 正 北 为 参 考 基 准 , 前面 的 0 也 将 被 传 输 ) 无 ;UTC 日 期 , ddmmyy(日 月 年 )格 式 即 11 年 12 月28 日 ;磁
6、 偏 角 (000.0180.0 度 , 前 面 的 0 也 将 被 传 输 ) 无 ; 磁 偏 角 方 向 , E(东 )或 W(西 ) 无 ;模 式 指 示 (仅 NMEA0183 3.00 版 本 输 出 , A=自 主 定位 , D=差 分 , E=估 算 , N=数 据 无 效 ) 二、任务分析 根据 GPS_DATAS.TXT 文件中的数据,编写程序分析出 gps 数据,输出屏幕显示并写入文档保存。实现过程:读入 GPS_DATAS.TXT 将按照遇到, 字符便拆分的原则,将各项信息存放于一二维字符串数组中,再根据各部分的含义检索该二维数组,并存放于不同字符串。最后根据显示习惯将字
7、符串输出并写入文件。三、源程序清单 #include #include char GPSDATA500;FILE *fp1;void main() void rx_gga(int n);void rx_rmc(int n);FILE *fp;int i=0,len;if(fp=fopen(“c:aGPSDATAS.TXT“,“r“)=NULL)printf(“cant open the filen“);exit(0);for(;(GPSDATAi+=fgetc(fp)!=EOF;)putchar(GPSDATAi-1); len=i;/*read the data into array GPS
8、DATA */for(i=0;ilen;i+) if(GPSDATAi=Gif(GPSDATAi=R fclose(fp);getch();void rx_gga(int n) int i,j,k;char *p=GPSDATA;char ch1414= 0;char chhour5=0;/*定义小时*/char chmin5=0;/*定义分钟*/char chsec8=0;/*定义秒*/char wdu10=0,wfen10=0;/*定义纬度 和分*/char jdu10=0,jfen10=0;/*定义经度 和分*/char dingwei14=0;/*质量因子*/char weixings
9、u8=0;/*可使用的卫星数*/char suiping8=0;/*水平精度因子*/char tianxian10=0;/*天线高程*/char haiba10=0;/*大地椭球面相对海平面的高度*/char gpsage8=0;/*差分 GPS 数据年龄*/char gpsnumber8=0;/*差分基准站号*/char dongxi10=0,nanbei10=0 ;/*定义东西经度 南北纬*/for(k=0;k14;k+)for(n=n+1,j=0;n500;n+) if(GPSDATAn!=,) chkj=*(p+n);j+; elsebreak; /*整体解析 HHMMSS*/for(
10、j=0,i=0;j2;j+,i+)chhourj=ch0i;for(j=0;j2;i+,j+)chminj=ch0i;for(j=0;j5;i+,j+)chsecj=ch0i; /*进一步解析 HHMMSS 中的HH,MM,SS*/for(j=0,i=0;j2;j+,i+)wduj=ch1i;for(j=0;j8;i+,j+)wfenj=ch1i; /*进一步解析纬度(格式ddmm.mmmm:即 dd 度,mm.mmmm 分)的 dd,mm.mmmm*/for(j=0,i=0;j2;j+,i+)jduj=ch3i;for(j=0;j8;i+,j+)jfenj=ch3i; /*进一步解析经度(格式ddmm.mmmm:即 dd 度,mm.mmmm 分)*/for(i=j=0;j8;i+,j+)nanbeij=ch2i;for(i=j=0;j8;i+,j+)dongxij=ch4i;if(int)(ch50)=48) strcpy(dingwei,“NO POINT“);