VC++实现GPS全球定位系统定位数据的提取讲课讲稿

上传人:人*** 文档编号:488112278 上传时间:2023-11-19 格式:DOC 页数:4 大小:45KB
返回 下载 相关 举报
VC++实现GPS全球定位系统定位数据的提取讲课讲稿_第1页
第1页 / 共4页
VC++实现GPS全球定位系统定位数据的提取讲课讲稿_第2页
第2页 / 共4页
VC++实现GPS全球定位系统定位数据的提取讲课讲稿_第3页
第3页 / 共4页
VC++实现GPS全球定位系统定位数据的提取讲课讲稿_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《VC++实现GPS全球定位系统定位数据的提取讲课讲稿》由会员分享,可在线阅读,更多相关《VC++实现GPS全球定位系统定位数据的提取讲课讲稿(4页珍藏版)》请在金锄头文库上搜索。

1、精品文档卫星导航技术的飞速发展已逐渐取代了无线电导航、天文导航等传统导航技术,而成为一种普遍采用的导航定位技术,并在精度、实时性、全天候等方面取得了长足进步。现不仅应用于物理勘探、电离层测量和航天器导航等诸多民用领域,在军事领域更是取得了广泛的应用- 在弹道导弹、野战指挥系统、精确弹道测量以及军用地图快速测绘等领域均大量采用了卫星导航定位技术。有鉴于卫星导航技术在民用和军事领域的重要意义,使其得到了许多国家的关注。我国也于2000 年10 月31 日和12 月21日成功发射了第一颗和第二颗导航定位试验卫星并建立了我国第一代卫星导航定位系统- 北斗导航系统 ,但由于起步晚也没有得到广泛应用。目前

2、在我国应用最多的还是美国的GPS 系统。本文就针对当前比较普及的GPS 系统,对其卫星定位信息的接收及其定位参数提取的实现方法予以介绍。定位信息的接收通常 GPS 定位信息接收系统主要由GPS 接收天线、变频器、信号通道、微处理器、存储器以及电源等部分组成。由于 GPS 定位信息内容较少,因此多用RS-232串口将定位信息( NEMA0183语句)从GPS 接收机传送到计算机中进行信息提取处理。从串口读取数据有多种方法,在此直接使用Win32 API函数对其进行编程处理。 在 Windows下不允许直接对硬件端口进行控制操作,所有的端口均被视为 文件 ,因此在对串口进行侦听之前需要通过打开文件

3、来打开串口,并对其进行相关参数配置:m_hCom=CreateFile(COM1,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL); file:/以异步方式打开COM1 口SetCommMask (m_hCom, EV_RXCHAR ) ; file:/添加或修改Windows所报告的事件列表SetupComm (m_hCom,READBUFLEN/*读缓冲 */,WRITEBUFLEN/*写缓冲 */); /初始化通讯设备参数/清除缓冲信息PurgeComm (m_hCom, PURGE_TX

4、ABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR) ;/对异步 I/O进行设置CommTimeOuts.ReadIntervalTimeout = MAXDWORD ; file:/接收两连续字节的最大时间间隔CommTimeOuts.ReadTotalTimeoutMultiplier =0; file:/接收每字节的平均允许时间CommTimeOuts.ReadTotalTimeoutConstant = 0 ; file:/接收时间常数SetCommTimeouts (m_hCom , &CommTimeOuts) ;file:/

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

6、&dwEvtMask,NULL);if (dwEvtMask&EV_RXCHAR = EV_RXCHAR)if(ComStat.cbInQue0)ReadFile(m_hCom,m_readbuf,ComStat.cbInQue,&nLength,&olRead);提取定位数据精品文档精品文档GPS 接收机只要处于工作状态就会源源不断地把接收并计算出的GPS 导航定位信息通过串口传送到计算机中。前面的代码只负责从串口接收数据并将其放置于缓存,在没有进一步处理之前缓存中是一长串字节流,这些信息在没有经过分类提取之前是无法加以利用的。因此,必须通过程序将各个字段的信息从缓存字节流中提取出来,将其转

7、化成有实际意义的,可供高层决策使用的定位信息数据。同其他通讯协议类似,对 GPS 进行信息提取必须首先明确其帧结构,然后才能根据其结构完成对各定位信息的提取。对于本文所使用的GARMIN GPS天线板,其发送到计算机的数据主要由帧头、帧尾和谑葑槌桑菔葜牟煌芬膊幌嗤饕?$GPGGA 、$GPGSA、$GPGSV以及 $GPRMC等。这些帧头标识了后续帧内数据的组成结构,各帧均以回车符和换行符作为帧尾标识一帧的结束。对于通常的情况,我们所关心的定位数据如经纬度、速度、时间等均可以从$GPRMC帧中获取得到,该帧的结构及各字段释义如下:$GPRMC,*hh当前位置的格林尼治时间,格式为hhmmss状

8、态 , A为有效位置 , V 为非有效接收警告,即当前天线视野上方的卫星个数少于3 颗。纬度 , 格式为 ddmm.mmmm标明南北半球 , N为北半球、 S 为南半球径度,格式为dddmm.mmmm标明东西半球,E 为东半球、 W 为西半球地面上的速度,范围为0.0到 999.9方位角,范围为000.0到 359.9度日期 , 格式为 ddmmyy地磁变化,从000.0到 180.0度地磁变化方向,为E 或 W至于其他几种帧格式,除了特殊用途外,平时并不常用,虽然接收机也在源源不断地向主机发送各种数据帧,但在处理时一般先通过对帧头的判断而只对$GPRMC帧进行数据的提取处理。如果情况特殊,需

9、要从其他帧获取数据,处理方法与之也是完全类似的。由于帧内各数据段由逗号分割,因此在处理缓存数据时一般是通过搜寻ASCII码$ 来判断是否是帧头,在对帧头的类别进行识别后再通过对所经历逗号个数的计数来判断出当前正在处理的是哪一种定位导航参数,并作出相应的处理。下面就是对缓存Data中的数据进行解帧处理的主要代码,本文在此只关心时间(日期和时间)和地理坐标(经、纬度):for(int i=0;iBRif(Datai=$) file:/帧头, SectionID为逗号计数器SectionID=0;if(Datai=10) file:/帧尾if(Datai=,) file:/逗号计数SectionID

10、+;else switch(SectionID)case 1: file:/提取出时间m_sTime+=Datai;break;case 2: 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;

11、break;default:break;现在已将所需信息提取到内存,即时间、日期以及经纬度分别保存在CString型变量m_sTime、m_Data、m_sPositionY和 m_sPositionX中。在实际应用中往往要根据需要对其做进一步的运算处理,比如从 GPS 接收机中获得的时间信息为格林尼治时间,因此需要在获取时间上加8 小时才为我国标准时间。而且 GPS 使用的 WGS 84 坐标系也与我国采用的坐标系不同,有时也要对此加以变换。而这些变换运算必须通过数值运算完成,因此需要将前面获取的字符型变量转化为数值型变量,这部分工作可放在检测到帧尾完成::strcpy(buf,m_sTim

12、e);str.Format(%c%c,buf0,buf1);GPSParamm_nNumber.m_nHour=(atoi(str)+8)%24; file:/提取出小时并转化为24 小时制北京时间第 2 、 3 字节为分钟, 4 、 5 字节为秒,提取方法同上:strcpy(buf,m_sDate);str.Format(%c%c,buf0,buf1); file:/提取出月份第 2 、 3 字节为天, 4 、5 字节为年,提取方法同上:strcpy(buf,m_sPositionY);str.Format(%c%c,buf0,buf1);PositionValue=atoi(str);st

13、r.Format(%c%c%c%c%c%c%c,buf2,buf3,buf4,buf5,buf6,buf7,buf8);GPSParamm_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_sPosit

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 演讲稿/致辞

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