基于MaPX的校园导航系统设计
扫描二维码
随时随地手机看文章
引言
随着GIS步入产业化阶段,其二次集成开发的应用领域不断扩大,其中GIS组件与面向对象可视化编程语言集成二次开发模式正成为主流,具有既能充分利用GIS组件对空间数据库的管理、分析功能。又可以利用可视化编程语言具有的高效、方便等优点。结合学校规模和招生人数的不断扩大的背景,新校园对新生入学时的陌生会带来很多的不便,制作一个校园电子地图并且在外接GPS情况下实时显示目标在电子地图的位置就变得很有意义。
1 系统开发理论基础
1.1 GIS
GIS又称为“地理信息系统”。它是在计算机硬件、软件系统支持下.对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、存储、管理、运算、分析、显示和描述的技术系统。GIS处理、管理的对象是多种地理空间实体数据及其关系,包括空间定位数据、图形数据、遥感图像数据、属性数据等。用于分析和处理在一定地理区域内分布的各种现象和过程,解决复杂的规划、决策和管理问题。
1.2 Maplnfo
Maplnfo地理信息系统是美国Maplnfo公司的桌面地理信息系统软件,是一种数据可视化、信息地图化的桌面解决方案。它不仅具有矢量化、编辑、查询、统计分析、绘制专题地图和报表制作等功能,还为用户提供了一系列强大的二次开发功能。Maplnfo提供了配套的开发工具。如MapBasic5.O和MapX4。在Maplnfo地理信息系统中.空间数据与属性数据是分开存储的。属性数据以数据库的形式存储为一张表,而空间数据则以.Maplnfo自己定义的格式保存于文件之中。两者之间通过一定的索引机制联系起来。Maplnfo是按照图层来管理地理的,每个图层均由以下四个基本的文件构成:属性数据表结构文件(.TAB)、属性数据文件(.DAT)、交叉索引文件(.ID)和空间数据文件(.MAP)。
1.3 MapX
Map是Maplnfo公司提供的用来开发地理信息系统的32位OCX控件。它使用与Maplnfo Professional一致的地图数据格式,并实现了大多数Maplnfo Professional的功能。在VB.Delphi,PowerBuilder,VC等可视化开发环境中。只需在设计阶段将MapX控件放入窗体中.并对其进行编程。设置属性或调用方法或相应事件,即可实现数据可视化,专题分析,地理查询,地理编码等丰富的地图信息系统功能。
2 校园导航系统框图及各模块的实现
该系统将目标用一个图元对象来代表,通过使用GPS(全球卫星定位)和多线程技术实时接收并处理NMEA 0183格式的GPS定位数据并且将经纬度数据提取出来赋值给由Maplnfo制作的电子地图中的动态图层上的目标图元,通过定时器更新目标位置,实现在电子地图上的实时定位,当到达某一地点时播报语音提示命令。该系统还具有电子地图的放大、缩小、漫游、增加图元等电子地图的基本功能。该系统结构框图如下:
2.1 电子地图制作与显示
在Maplnfo软件平台上载入中北大学jpg格式的校园图,并把实地采集的经纬度信息录入校园图中从而完成电子图的配准。按照高校特点将电子地图分为道路层、教学实验楼、学生公寓楼、教师公寓楼、商业服务建筑、文娱体育设施等图层。运行MapX下的Geoset.Manager应用程序,新建一个名为NUC的Geoset文件,将上述图层添加进去,组成一个后缀为gst的地图文件:NUC.gst,通过MapX控件将校园图嵌入到系统界面中,从而完成了电子地图的绘制和显示。
2.2 电子地图基本功能实现
电子地图基本功能包括选择、标注、缩小、放大、漫游等。采用MapX可以很容易的实现这些功能,下面以缩小功能为例,简单介绍一下程序里如何实现地图缩小。
添加一个新的Toolbar资源。输人标题“IDR_TOOL_BARMAP”。在“IDR_TOOLBARMAP”下添加按钮,在其上绘制缩小图形来表示“缩小”,其ID为ID_MAP_TOOL_ZOOMOUT。打开类向导.选择视图类CMapXView.为菜单项ID_MAP_TOOL_ZOOMOUT添加COOMMAND消息映射函数OnMapToolZoomout(),并编辑代码如下:
编译运行程序.点击缩小按钮,在电子地图上单击鼠标就会实现电子地图的缩小功能。可用相同方法实现其他标准工具的功能。
2.3 GPS数据的接收和处理
此模块完成了从串口读取数据,并对数据按照GPS所遵循的NMEA0183协议进行处理,得出经纬度坐标等信息的功能。此模块包括两个部分串口通信和数据处理。
由于GPS模块每一秒更新一次数据,当上空有4颗卫星时串口会源源不断的接收到定位数据.为了在对串口实时监控的同时还可以在前台进行一些其他的操作。采用基于多线程的CSerialPort类的串口通信方法可以很好的解决这一问题。
此模块的工作流程可分为以下几步:(1)利用CSerial-Port的InitPort()初始化串口配置。(2)如果配置成功用StartMonitoring()打开串口并创建监视串口的线程。(3)在相应的类里添加响应WM_COMM_RXCHAR消息的消息处理函数,并且在其中做接收字符处理。(4)添加定时器.在OnTimer中处理NMEA 0183格式的GPS定位数据.将提取到的纬度数据保存到相应类上的成员变量中。
2.4 目标定位和播报
该模块从GPS数据处理模块中得到经纬度坐标等信息,并且把它赋值给目标图元,通过定时器更新图元位置从而完成实时定位。
由于程序实时接收定位数据来更新图元的位置.就需要程序频繁的刷新整个图层,就会影响效率。动态图层的目的是为了加速图层的刷新率从而提高效率,设置动态图层后。每次刷新都只刷新动态图层,这样就很好的解决了这个问题。示例代码如下:
程序最后运行界面如下:
3 结束语
本文在GIS二次开发日新月益的背景下.结合校园实际特点开发了基于MapX的校园导航系统。经过调试,程序运行稳定,实现了电子地图放大、缩小、漫游等功能。程序由Mi-crosoft Visual C++6.0编译、在Windows XP下运行通过。