焦点期刊
在线客服

著作编辑 著作编辑

投稿邮箱: 941198995@qq.com

VB语言下GPS导航数据的提取并在MapX控件中显示的实现

时间:2014-09-25 22:31:52 阅读量:0次 所属分类:电子论文

摘 要:本文针对导航系统设计和开发过程中涉及到的GPS导航数据和MapX控件进行了介绍,并提出了利用VB语言进行定位信息的提取和在MapX控件中显示的方法。

  摘 要:本文针对导航系统设计和开发过程中涉及到的GPS导航数据和MapX控件进行了介绍,并提出了利用VB语言进行定位信息的提取和在MapX控件中显示的方法。

  关键词 :NMEA-0183;MapX;串口通讯;导航系统

  1前言

  随着社会经济的不断进步,科学水平的飞速发展,人们对类似车载GPS定位系统的位置服务也越来越关注。GPS定位系统接收GPS卫星信号,并将解算的位置通过接口显示在电子地图上,就可以实现位置显示的基本定位功能。在本文中,我们将探讨如何在VB语言条件下,通过MapX控件来提取和显示GPS定位信息,从而为进一步的GPS定位服务提供一个基础平台。

  2 GPS导航数据格式与MapX控件介绍

  2.1GPS导航数据格式

  GPS导航数据主要是NMEA协议的数据,目前主要较新版本为 NMEA-0183,它是美国国家海洋电子协会为统一海洋导航规范而制定的统一标准,该格式标准已经成为国际通用的一种格式[1]。NMEA-0183格式数据串的所有数据都采用SASCII文本字符表示,数据传输以“$”开头,后面是语句头。语句头由五个字母组成,分两部分,前两个字母表示“系统ID”,即表示该语句是属于何种系统或设备,后三个字母表示“语句ID”,表示该语句是关于何方面的数据。语句头后是数据体,包含不同的数据体字段,语句末尾为校验码 (可选),以回车换行符结束,也就是ACSII字符“回车”(十六进制的0D)和“换行”(十六进制的0A)。每行语句最多包含82个字符(包括回车换行符和“$”符号)。数据字段以逗号分隔识别,空字段保留逗号。

  2.2 MapX控件

  MapX控件是MapInfo公司提供的具有强大地图分析功能的Activex控件产品,由于它是一种基于Windows操作系统的标准控件,因而能支持绝大多数标准的可视化开发环境,如 Visual Basic等。利用MapX控件能够简单快速地在软件中嵌入地图化功能,增强软件的空间分析能力,实现大部分地图编辑和空间分析的功能。

  MapX为开发人员提供了一个快速、易用、功能强大的地图化组件。在VB等可视化开发环境中,只需要在设计阶段将MapX控件放入窗体中,并对其进行编程、设置属性、调用方法或相应事件,即可实现数据可视化、专题分析、地理查询、地理编码等各种丰富的地图信息系统功能。对MapX编程,不需要有任何MapBasic的知识,而且大多数任务可以通过简单的设置MapX控件的属性来完成。

  3 GPS导航数据的提取

  3.1 RS-232通信

  RS-232串行通讯分为同步和异步两种模式,目前使用的仪器绝大部分都使用异步传输。RS-232也有相关的电气标准定义,在ITU(国际电信联盟)咨询机构CCITT(国际电话与电报顾问委员会)公布了RS-232标准之后,由EIA(电子工业联合会)制订。RS-232串口通讯的方法主要有以下几种方法[2]:

  (1)通过调用API函数实现串口通讯;

  (2)利用Windows读写端口函数;

  (3)利用第三方提供或自己编写的通信类;

  (4)通过Windows串口通信组件,实现串口调用。

  其中方法(4)较简单稳定,只需对串口进行简单配置,并且不需要了解其控件的内部源码,可以快速稳定的实现通讯及数据的提取。因此,本文采用最后一种方法。

  在进行通讯之前,首先需要设置串口通讯的接口参数,包括设置通信连接端口号,该端口号在MSComm控件的Commport属性中设置(计算机一般只包括com1和com2两个端口,可通过计算机的设备管理器查看);初始化信息,该信息主要是通信的波特率、奇偶校验检查方式、数据位数和停止位,可在控件的Settings属性中设置(格式是“BBBB,P,D,S”,分别是波特率,奇偶校验,数据位数,停止位数);引发接收事件的字节数,亦即控件的RThreshold属性,该属性设置和返回引发接收事件的字节数;串行端口读入的字符串长度或者字节数,可在控件的InputLen属性中设置,Visual Basic 程序可使用控件的Input命令将存放在输入缓冲区的字符读入,但如果要指定所读入的字符长度则需设置本属性。

  3.2数据接收

  通过上述属性的设置,便可进行串口的通讯和数据的接收。MSComm控件的PortOpen属性用于设置通行端口的连接状态,将其设为TRUE以打开串行端口,接收数据流,运行完毕后将其关闭(在Visual Basic的设计中,端口会在程序结束时自动关闭)程序代码如下:

  If MSComm1.PortOpen = FALSE Then

  MSComm1.PortOpen = TURE

  End If

  则数据开始流入到接收缓冲区中,并引发OnComm()事件。不同的情况,引发的事件也不相同,当事件参数为ComEvReceive时,表明接收到Rthreshold字符,然后通过Input方法将缓冲区内的数据读出。在读出过程中,系统会自动将缓冲区内的数据删除。

  Private Sub MSComm1_OnComm()

  Dim S As String

  Select Case MSComm1.CommEvent

  Case ComEvReceive ’接收到 Rthreshold字符

  S = MSComm1.Input ’从缓冲区内读出InputLen设定字符数的数据

  GetGPSChar S ’获取完整的数据语句函数

  End Select

  End Sub

  GetGPSChar(Data As String)函数用来获取完整的语句,通过检查接收数据的回车换行符来判断数据是否为同一语句的数据,由于数据是连续的。因此,回车换行可以作为本完整语句的起始和下一完整语句的开始标志。

  虽然串行传输时有奇偶校验,但是奇偶校验只是针对一个字节而言,对于大数据量的传输时,有时为了保证语句的完整性和正确性,则必须通过最后的检验码进行校验,校验的算法是以数据头“$”和“*”之间的所有字节求异或值,将该值与*后处的值进行比较,如果相同,则说明语句完整,否则抛弃该语句,重新读取新的语句,直到获得新的完整语句为止。

  至此,已获得完整的语句,然后通过程序将语句中各个字段的信息从中提取出来。在该步骤之中,可以利用VB的Split()函数。该函数返回一个下标从零开始的一维数组,它可以根据用户自己定义的间隔符号提取语句中的数据,并自动生成一个字符串数组。

  4 在MapX中显示位置

  利用点图元来表示位置信息,点图元在电子地图中的位置就是从GPS 数据中提取到的经纬度数据信息,然后按照一定频率来刷新所在的图层, 就实现车辆等的实时定位信息了[3]。但是在刷新图元的同时将刷新该图层上的所有图元, 速度比较慢。为此,可以将GPS 的点图元置于一个单独的图层中。并利用MapX的动态图层AnimationLayer来快速刷新显示GPS定位信息,将这个图层赋予动态图层的属性,该图层就成为动态图层,并且自动位于所有图层的最上方,设GPS点图元位于名称为GPSLayer的图层上,该图层转化为动态图层的代码如下:

  Set Map1.Layers.AnimationLayer = Map1.Layers("GPSlayer") '将轨迹图层设为动态图层(加快刷新速度)

  具体的实现步骤如下;

  在VB中创建项目后,在窗体中添加MapX控件,名称设置为Map1,按照GPS位置,添加代表车辆的符号,代码如下:

  Dim mobileftr As New MapXLib.Feature

  Dim mobileobj As MapXLib.Feature

  mobileftr.Attach Map1

  mobileftr.Type = miFeatureTypeSymbol '定义点图元类型

  mobileftr.Style = Map1.DefaultStyle '暂时定为为默认样式

  mobileftr.Point.Set GPSlongS, GPSlatS '重新为GPS点位置

  mobileftr.Update

  Set mobileobj = Map1.Layers("GPSlayer").AddFeature(mobileftr) '将点图元增加到动态图层实时的显示车辆在地图中的位置:

  mobileftr.Point.Set GPSlongS, GPSlatS '重新为GPS点位置

  Map1.Layers("GPSlayer").Refresh '刷新地图的动态图层

  如果当位置到达地图窗口的边缘时,可以把位置设置成窗口的中心:

  Map1.CenterX = mobileftr.Point.X

  Map1.CenterY = mobileftr.Point.Y

  至此,便实现了GPS位置信息在MapX中的显示。

  5 结语

  通过本文的设计方法可以快速稳定的实现GPS导航数据提取和串口通讯及并较好的显示在MapX控件中,并可将其应用于其他高层应用决策系统中,例如各种汽车监控,远洋捕捞和海洋勘探系统等。该系统在Window XP操作系统下,使用VB 6.0语言实现,经试验效果明显,并应用于实际的软件工程之中。

  参考文献

  [1] 北京合众思壮科技有限责任公司技术部 GARMIN GPS OEM 产品说明书.

  [2] 范逸之,陈立元. Visual Basic与RS-232串行通信控制 清华大学出版社.

  [3] 徐和平,徐德军,钟美;基于电子地图的GPS车辆导航系统研究[J];地理空间信息;2005年04期.


本文链接:https://www.133lw.com/lunwen/dzlw/6759.html