一种智能导游系统中GPS定位导航数据的提取方法与流程

文档序号:12359829阅读:284来源:国知局
一种智能导游系统中GPS定位导航数据的提取方法与流程

本发明涉及GPS定位技术领域,具体是一种智能导游系统中GPS定位导航数据的提取方法。



背景技术:

随着人们生活水平的日益提高,旅游在人们的生活中的地位已经越来越重要。在人们越来越热衷于旅游的同时,一些不可忽略的问题凸现出来,传统的人工导游已经不能满足游客的需求了。这就需要一种能够提供更加方便,更加贴心的智能导游。它可以向游客提供基本的导游解说,位置动态显示,景点预览,目的地最优路径规划,团队信息交互及集合等。在整个系统中最重要的一步是定位导航数据的提取。



技术实现要素:

针对现有技术存在的问题,本发明提供一种智能导游系统中GPS定位导航数据的提取方法。

本发明的技术方案是:

一种智能导游系统中GPS定位导航数据的提取方法,包括以下步骤:

步骤1:定义GPS定位导航数据格式:采用NEMA0183格式,主要由帧头、帧尾和帧内数据组成;根据数据帧的不同,帧头也不相同;

GPS,即Global Positioning System;

步骤2:GPS定位导航数据的接收:通过RS-232串口将定位信息从GPS接收机获取,包括经纬度、海拔高度;

步骤2-1:串口初始化操作;

步骤2-2:GPS定位导航数据的接收:采用轮询串口方式或事件触发方式对GPS定位信息进行接收;

步骤3:GPS定位导航数据的处理;

步骤3-1:从串口接收到的数据并将被放置于缓存;

步骤3-2:开辟一个缓冲区,调用ReadFile函数将串口缓存中的GPS定位导航数据读到该缓冲区中;

步骤3-3:对所述缓冲区中的数据进行处理:调用strstr函数在缓冲区中寻找数据帧的位置:如果找到,则返回数据帧的首地址,并赋给字符串指针变量dwFind-Address;如果没找到,则返回0。

所述步骤2-1串口初始化操作的具体步骤如下:

步骤2-1-1:使用Win32 API函数CreateFile打开串口;

步骤2-1-2:进行串口配置;

步骤2-1-3:进行超时参数的设置;

步骤2-1-4:进行串口缓冲区的设置。

所述步骤2-1-2进行串口配置过程中,先用GetCommState检索端口的当前设置修改其中的部分字段,然后再用函数SetCommState进行端口设定。

有益效果:

本发明方法首先分析了GPS导航数据的格式及在智能导游系统中需要的关键数据。然后提取GPS导航数据的串口操作及缓冲区的设置。最后给出了GPS串口通信及其定位导航数据提取模块的实现方法,为智能导游系统的GPS导航提供精准的数据支持。本方法可以将GPS定位导航信息从GPS接收机完整接收,通过定位参数的提取,可将其应用于其他高层应用决策如智能导游系统及各种导航定位系统等。

附图说明

图1是本发明具体实施方式的缓冲区大小影响提取定位数据命中率的情况;

图2是本发明具体实施方式的智能导游系统中GPS定位导航数据的提取方法流程图。

具体实施方式

下面结合附图对本发明的具体实施方式做详细说明。

一种智能导游系统中GPS定位导航数据的提取方法,包括以下步骤:

步骤1:定义GPS定位导航数据格式:采用NEMA0183格式,主要由帧头、帧尾和帧内数据组成;根据数据帧的不同,帧头也不相同;

GPS利用导航卫星进行测时和测距,以构成全球定位系统。这一系统由空间星座、地面监控系统、用户接收机三大部分组成。用户通过接收机接收GPS卫星信号,经信号处理而获得三维位置、航向和时间等信息,进而实现利用GPS进行导航和定位的目的。

GPS定位导航数据格式常采用NEMA0183格式,数据内容较少,因此多用RS-232串口将定位信息从GPS接收机传送到数据处理模块中进行信息提取处理。GPS定位导航数据主要由帧头、帧尾和帧内数据组成。根据数据帧的不同,帧头也不相同,主要有"$GPGGA"、"$GPGSA"、"$ GPGSV"以及"$GPRMC"等。在智能导游系统中,定位数据主要有经纬度、海拔高度等。这些数据可以从"$GPGGA"帧中获取得到,该帧的结构及各字段标记如下: $GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh

本方法所需要的数据是"$GPGGA"的<2>、<4>、<9>。<2>、<4>是定位的基本数据。<9>是相对于海平面的高度,当景区是非平坦的地域时,它可以标识游客所处位置相对于海平面的高度。

步骤2:GPS定位导航数据的接收:通过RS-232串口将定位信息从GPS接收机获取,包括经纬度、海拔高度;

步骤2-1:串口初始化操作;

由于GPS定位信息内容较少,因此多用RS-232串口将定位信(NEMA0183语句)从GPS接收机传送到计算机中进行信息提取处理。从串口读取数据有多种方法,比如直接使用 Win32 API函数对其进行编程处理。在Windows下不允许直接对硬件端口进行控制操作,所有的端口均被视为"文件",因此在对串口进行侦听之前需要通过打开文件来打开串口,并对其进行相关参数配置。串口设置一般为:1 bit开始位,8 bit数据位,1 bit结束位,没有奇偶校验,波特率参考设备说明书。

步骤2-1-1:使用Win32 API函数CreateFile打开串口;

使用Win32 API函数CreateFile打开串口。与其他对象一样,通信端口也是用句柄来标识的。CreateFile函数返回被操作的通信端口句柄,如果串口被成功打开时,则返回其句柄,否则返回INVALID_HANDLE_ VALUE。

步骤2-1-2:进行串口配置;

当调用CreateFile成功打开串口之后,接下来就要进行串口配置了。函数GetCommState和SetCommState可用于检索和设定端口设置的DCB(设备控制块)结构。该结构中BaudRate、ByteSize、StopBits和Parity为串口波特率、数据位数、停止位和奇偶校验控制等信息。可先用GetCommState检索端口的当前设置修改其中的部分字段,然后再用函数SetCommState进行端口设定。

步骤2-1-3:进行超时参数的设置;

成功设置完端口参数后,就要进行超时参数的设置。通过GetCommTime-outs函数得到系统默认的超时参数,进行适当配置,然后用SetCommTime-outs函数进行重设超时参数。

步骤2-1-4:进行串口缓冲区的设置。

串口初始化,还要进行串口缓冲区的设置。调用SetupComm(HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue)函数,其中第一个参数是打开串口的句柄,第二个参数是输入缓冲区大小,第三个是输出缓冲区大小。

步骤2-2:GPS定位导航数据的接收:采用轮询串口方式或事件触发方式对GPS定位信息进行接收;

在成功打开并设置串口后,可采用轮询串口方式或事件触发方式对GPS数据进行接收处理。采用事件触发方式效率比较高,调用SetCommMask函数设置串口事件。本实施方式设为EV_RXCHAR事件触发方式,当串口有字符到达时就会启动ReadFile函数完成对GPS定位信息的接收。ReadFile函数负责将串口缓冲区中的数据读到缓存。

经过多次实验统计,发现在处理接收GPS定位数据时有一种更合适的方法:将缓冲区lpBuffer的大小和读到缓冲区的字节数目设为相同的固定值。这个值的大小影响直接影响了内存的占用率,间接影响了提取定位数据的命中率。

当程序刚开始运行时,由于GPS模块正在初始化,还不会有数据发送到串口上,所以当采用后新方法时,到缓冲区读数据会读不到结果;当采用普通方法时,COMSTAT的属性cbInQue值为0,所以在缓冲区中不会读空。随着时间增加,GPS设备已经完全初始化,采用新方法就几乎不会出现到缓冲区中读空的现象;由于硬件设备或一些不可预测的原因,会导致出错率增加,但是只能增加到某个值。

如果将第二个参数lpBuffer缓冲区设得足够大,将会提高提取定位数据的命中率,使得每次总能在缓冲区中寻找到所需定位数据,但是这同样会浪费内存。如果将lpBuffer缓冲区设得非常小,虽然节省了内存,但是却降低了提取定位数据的命中率,使得每次在缓冲区中找不到所需定位数据的概率大大增加。图1说明了缓冲区大小影响提取定位数据命中率的情况,Y轴综合考虑提取定位数据的命中率和内存占用率,X轴代表lpBuffer缓冲区的大小。通过我们多次实验统计,得出当缓冲区的大小越接近482字节时,提取定位数据的命中率越高。但是考虑到计算机的二进制特性,所以将缓冲区的大小设为512字节。

步骤3:GPS定位导航数据的处理;

从串口接收到的数据并将被放置于缓存, 在没有进一步处理之前缓存中是一长串字节流, 这些信息在没有经过分类提取之前是无法加以利用的。因此, 必须通过将各个字段的信息从缓存字节流中提取出来,将其转化成有实际意义的, 可供高层决策使用的定位信息数据。 本方法所需要的经纬度、海拔高度信息可以从“$GPGGA”结构帧中获得。考虑到“$GPGGA”结构帧中,海拔高度之前的数据格式长度是固定的,本文提出一种新的提取经纬度和海拔高度的方法。这种提取方法效率比较高并且简洁。

步骤3-1:从串口接收到的数据并将被放置于缓存;

步骤3-2:开辟一个缓冲区,调用ReadFile函数将串口缓存中的GPS定位导航数据读到该缓冲区中;

步骤3-3:对所述缓冲区中的数据进行处理:调用strstr函数在缓冲区中寻找数据帧的位置:如果找到,则返回数据帧的首地址,并赋给字符串指针变量dwFind-Address;如果没找到,则返回0。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1