C#编写gps定位信息接收

上传人:mg****2 文档编号:122240922 上传时间:2020-03-03 格式:DOC 页数:10 大小:47.50KB
返回 下载 相关 举报
C#编写gps定位信息接收_第1页
第1页 / 共10页
C#编写gps定位信息接收_第2页
第2页 / 共10页
C#编写gps定位信息接收_第3页
第3页 / 共10页
C#编写gps定位信息接收_第4页
第4页 / 共10页
C#编写gps定位信息接收_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《C#编写gps定位信息接收》由会员分享,可在线阅读,更多相关《C#编写gps定位信息接收(10页珍藏版)》请在金锄头文库上搜索。

1、-定位信息的接收通常GPS定位信息接收系统主要由GPS接收天线、变频器、信号通道、微处理器、存储器以及电源等部分组成。由于GPS定位信息内容较少,因此多用RS-232串口将定位信息(NEMA0183语句)从GPS接收机传送到计算机中进行信息提取处理。从串口读取数据有多种方法,在此直接使用 Win32 API函数对其进行编程处理。在Windows下不允许直接对硬件端口进行控制操作,所有的端口均被视为文件,因此在对串口进行侦听之前需要通过打开文件来打开串口,并对其进行相关参数配置: m_hCom=CreateFile(COM1,GENERIC_READ|GENERIC_WRITE,0,NULL,O

2、PEN_EXISTING, FILE_FLAG_OVERLAPPED,NULL); file:/以异步方式打开COM1口 SetCommMask(m_hCom,EV_RXCHAR);file:/添加或修改Windows所报告的事件列表 SetupComm(m_hCom,READBUFLEN/*读缓冲*/,WRITEBUFLEN/*写缓冲*/); / 初始化通讯设备参数 / 清除缓冲信息 PurgeComm(m_hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR) ; / 对异步I/O进行设置 CommTimeOuts.Rea

3、dIntervalTimeout = MAXDWORD;file:/接收两连续字节的最大时间间隔 CommTimeOuts.ReadTotalTimeoutMultiplier=0;file:/接收每字节的平均允许时间 CommTimeOuts.ReadTotalTimeoutConstant=0;file:/接收时间常数 SetCommTimeouts(m_hCom,&CommTimeOuts) ; file:/获取并设置串口 GetCommState(m_hCom,&dcb); dcb.BaudRate=CBR_4800; dcb.ByteSize= 8; dcb.Parity=ODDPA

4、RITY; dcb.StopBits=ONESTOPBIT ; SetCommState(m_hCom,&dcb); 在成功打开并设置通讯口后,可采取轮询串口和事件触发两种方式对数据进行接收处理,本文在此采取效率比较高的事件触发方式进行接收处理,通过等待EV_RXCHAR事件的发生来启动ReadFile函数完成对GPS定位信息的接收: while(true) WaitCommEvent (m_hCom,&dwEvtMask,NULL); if (dwEvtMask&EV_RXCHAR = EV_RXCHAR) if(ComStat.cbInQue0) ReadFile(m_hCom,m_rea

5、dbuf,ComStat.cbInQue,&nLength,&olRead); 提取定位数据 GPS接收机只要处于工作状态就会源源不断地把接收并计算出的GPS导航定位信息通过串口传送到计算机中。前面的代码只负责从串口接收数据并将其放置于缓存,在没有进一步处理之前缓存中是一长串字节流,这些信息在没有经过分类提取之前是无法加以利用的。因此,必须通过程序将各个字段的信息从缓存字节流中提取出来,将其转化成有实际意义的,可供高层决策使用的定位信息数据。同其他通讯协议类似,对GPS进行信息提取必须首先明确其帧结构,然后才能根据其结构完成对各定位信息的提取。对于本文所使用的GARMIN GPS天线板,其发送

6、到计算机的数据主要由帧头、帧尾和帧内数据组成,根据数据帧的不同,帧头也不相同,主要有$GPGGA、$GPGSA、$GPGSV以及$GPRMC等。这些帧头标识了后续帧内数据的组成结构,各帧均以回车符和换行符作为帧尾标识一帧的结束。对于通常的情况,我们所关心的定位数据如经纬度、速度、时间等均可以从$GPRMC帧中获取得到,该帧的结构及各字段释义如下: $GPRMC,*hh 当前位置的格林尼治时间,格式为hhmmss 状态, A 为有效位置, V为非有效接收警告,即当前天线视野上方的卫星个数少于3颗。 纬度, 格式为ddmm.mmmm 标明南北半球, N 为北半球、S为南半球 径度,格式为dddmm

7、.mmmm 标明东西半球,E为东半球、W为西半球 地面上的速度,范围为0.0到999.9 方位角,范围为000.0到 359.9 度 日期, 格式为ddmmyy 地磁变化,从000.0到 180.0 度 地磁变化方向,为E 或 W 至于其他几种帧格式,除了特殊用途外,平时并不常用,虽然接收机也在源源不断地向主机发送各种数据帧,但在处理时一般先通过对帧头的判断而只对$GPRMC帧进行数据的提取处理。如果情况特殊,需要从其他帧获取数据,处理方法与之也是完全类似的。由于帧内各数据段由逗号分割,因此在处理缓存数据时一般是通过搜寻ASCII码$来判断是否是帧头,在对帧头的类别进行识别后再通过对所经历逗号

8、个数的计数来判断出当前正在处理的是哪一种定位导航参数,并作出相应的处理。下面就是对缓存Data中的数据进行解帧处理的主要代码,本文在此只关心时间(日期和时间)和地理坐标(经、纬度): for(int i=0;iDATALENGTH;I+) if(Datai=$) file:/帧头,SectionID为逗号计数器 SectionID=0; if(Datai=10) file:/帧尾 if(Datai=,) file:/逗号计数 SectionID+; else switch(SectionID) case 1: file:/提取出时间 m_sTime+=Datai; break; case 2:

9、 file:/判断数据是否可信(当GPS天线能接收到有3颗GPS卫星时为A,可信) if(Datai=A) GPSParamm_nNumber.m_bValid=true; break; case 3: file:/提取出纬度 m_sPositionY+=Datai; break; case 5: file:/提取出经度 m_sPositionX+=Datai; break; case 9: file:/提取出日期 m_sDate+=Datai; break; default: break; 现在已将所需信息提取到内存,即时间、日期以及经纬度分别保存在CString型变量 m_sTime、m_

10、Data、m_sPositionY和m_sPositionX中。在实际应用中往往要根据需要对其做进一步的运算处理,比如从GPS接收机中获得的时间信息为格林尼治时间,因此需要在获取时间上加8小时才为我国标准时间。而且GPS使用的WGS84坐标系也与我国采用的坐标系不同,有时也要对此加以变换。而这些变换运算必须通过数值运算完成,因此需要将前面获取的字符型变量转化为数值型变量,这部分工作可放在检测到帧尾完成: :strcpy(buf,m_sTime); str.Format(%c%c,buf0,buf1); GPSParamm_nNumber.m_nHour=(atoi(str)+8)%24; fi

11、le:/提取出小时并转化为24小时制北京时间 file:/buf第2、3字节为分钟,4、5字节为秒,提取方法同上 :strcpy(buf,m_sDate); str.Format(%c%c,buf0,buf1); file:/提取出月份 file:/buf第2、3字节为天,4、5字节为年,提取方法同上 :strcpy(buf,m_sPositionY); str.Format(%c%c,buf0,buf1); PositionValue=atoi(str); str.Format(%c%c%c%c%c%c%c,buf2,buf3,buf4,buf5,buf6,buf7,buf8); GPSPa

12、ramm_nNumber.m_dPositionY=PositionValue*60+atof(str); file:/提取出纬度 :strcpy(buf,m_sPositionX); if(m_sPositionX.GetLength()=10) file:/经度超过90度(如东经125度) str.Format(%c%c%c,buf0,buf1,buf2); PositionValue=atoi(str); str.Format(%c%c%c%c%c%c%c,buf3,buf4,buf5,buf6,buf7,buf8,buf9); GPSParamm_nNumber.m_dPositionX=PositionValue*60+atof(str); file:/提取出经度(单位为分) if(m_sPositionX.GetLength()=9) file:/经度未超过90度(如东经89度) file:/处理方法同上,只是buf的第0、1字节为度数,29为分数。 到此为止,已将时间和经纬度信息提取到GPS结构数组GPSParam中的各个变量中去,后续的处理和高层决策可根据该结构中存储的数据作出相应的处理。 摘要本文介绍了一个基于Java的GPS 接收机解析器。这个Java类通过

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号