陈祥葱 焦德杰 李 浩
(1.哈尔滨市勘察测绘研究院, 黑龙江哈尔滨 150010; 2.黑龙江省城市规划勘测设计研究院, 黑龙江哈尔滨 150040)
GPS提供了覆盖全球范围、全天候、高精度的定位导航服务。目前,随着通信技术的发展和硬件成本的减低,基于GPS的跟踪定位服务逐渐由特殊领域走向普通大众,被广泛的应用于车辆管理、车辆调度、车辆防盗、人员定位等领域,成为空间位置服务的重要内容之一,并支撑着数字城管、数字城市规划监察、智能交通等数字城市管理与应用。
在现阶段进行的行业应用系统、政府信息化管理等项目中,都提出了对GPS跟踪定位的需求,要求定位服务能够与GIS、业务系统无缝结合,充分发挥其监控调度功能。但在项目实施中,由于受硬件厂家、通信协议、数据源、计算机硬件资源等因素的影响,开发的GPS定位跟踪系统均存在着移植困难、兼容性扩展性差等问题。本文通过多个项目的实际需求,采用ESRI公司提供的Arc Engine嵌入式开发组件,以模块化思想设计开发能够灵活移植,具备良好的扩展性和稳定性的GPS定位追踪系统。
系统由跟踪定位器和服务接收软件组成(见图1)。跟踪定位器实现定位信息的采集和数据传输,服务接收软件实现定位信息接收、解析、转换、展现等数据处理和服务功能。
跟踪定位器内嵌GPS定位模块和通信模块:前者通过接收GPS卫星信号实时采集目标的位置、速度、移动方向等信息,按照协议标准生成定位数据;后者实现通信功能,通过GPRS传输定位信息。目前,市场上已有很多成熟的GPS跟踪定位器,如维臣、卫通达等硬件厂商。由于硬件厂商不同,跟踪定位器使用的通信协议也存在较大差异,为满足多个项目的需求,兼容不同厂家的通信协议是软件设计的重要约束条件。
服务接收软件为服务器程序,主要功能包括接收跟踪定位器的连接请求,接收数据并获取跟踪目标位置、速度、移动方向等信息,与地理信息系统、行业应用相联系,提供跟踪定位、监控调度等服务。服务接收软件的设计开发是本文研究的主要内容。
系统采用Oracle 10g管理存储数据,其存储的数据包括系统管理参数、用户信息、系统日志信息和GPS定位数据,其核心和主体为GPS定位数据。GPS定位数据随着时间逐渐累积,可达百万条记录,会极大地影响检索效率和稳定性,是数据库设计时需解决的主要问题。
图1 系统结构
对定位数据使用频率进行了分析,将其分为两类:活跃数据和静态数据。活跃数据指使用比较频繁的数据,一般为接收时间较短的数据;反之为静态数据,为接收时间较长的历史数据。在数据库设计时,对活跃数据和静态数据分开存储,设计了活动表和静态表。活动表存储当前或近期内接收的定位数据,在达到一定条件(记录数达到20万)后将将定位数据转存至静态表;静态表存储历史定位数据,其搜索优先级按时间确定,即时效性高的数据优先搜索(图2),静态表的创建和定位数据转存通过数据库触发器实现[3]。
图2 定位数据存储
软件设计的目标是定义软件结构层次,划分软件功能模块,定义模块接口。软件的稳定性、运行效率、可扩展性和可移植性是软件设计时考虑的主要因素。
软件采用层次的结构设计,从下到上分别为数据层、服务层和表现层,各层由多个模块组成,模块间通过接口交换数据或提供服务。
(1)总体设计
总体设计的目标是明确系统的数据流和总体框架(如图3、图4所示)。
图3 数据流
图4 系统框架
(2)功能模块设计
依据功能和服务类型,为系统定义了两类模块,即基本模块和扩展模块(见图5)。
图5 功能模块结构
基本模块由通信模块、数据处理模块、数据库服务模块、日志服务模块组成,是软件核心功能模块。其中通信模块实现对网络连接建立、管理、断开、网络数据流接收及资源释放清理,内嵌定位追踪器的通信协议,能够支持多种类型、多个厂家的定位追踪器。数据库服务模块提供数据库相关服务。基于前两个模块提供的服务,扩展了数据处理模块和日志服务模块:数据处理模块内嵌坐标转换算法,完成信息提取和数据转换;日志服务主要监测系统的运行状况,及时记录各种运行参数,保障系统稳定运行。
扩展模块包括权限管理和表现层。权限管理包括用户管理、跟踪定位终端管理、用户权限管理等;表现层主要是定位信息在地图上的展示,包括位置实时跟踪、轨迹回放、道路里程统计等前台功能。如果选用了扩展模块,该软件可作为一个独立的系统使用。
(3)关键接口设计
软件设计中直接影响系统兼容性的两个重要约束条件:
①协议类型。软件支持的通信协议直接关系到硬件的兼容性,要求具备兼容新通信协议的能力。
②数据格式。跟踪定位器采集的数据是基于WGS84坐标系的,为增强对空间数据兼容性,要求能够提供基于其他坐标系的定位数据。
为了满足上述两个约束条件,在接口设计中运用桥接(Bridge)模式[4](图6),定义了协议解析接口IDataAnylyse和坐标转化抽象类CoordinateTransBase。若要求系统支持新的硬件协议和数据转换方法,只需继承上述接口,加入新的协议或数据转换算法,系统可以自动选择合适的协议或算法进行数据处理。
从开发效率、稳定性、性价比等多方面考虑,选择Visual C#为开发语言,开发环境为微软公司的Visual Studio 2005, GIS平台基于Arc Engine 9.2组件开发。数据库采用甲骨文公司的Oracle 10g,该数据库具备良好的扩展性、安全性和稳定性,支持数据库二次开发。
跟踪定位器将获得位置信息通过GPRS无线网络回传至服务器(由IP和端口号标识),网络通信模块实现定位信息的接收、处理及资源管理等,该模块的健壮性直接关系到整个系统的稳定性。
网络通信使用Socket协议,通信方式有同步阻塞和异步非阻塞两种类型。其中,同步通信在连接建立后,服务器会一直等待客户端(跟踪定位器)发送信息,为在线等待;异步通信在连接建立后马上返回,一旦有信息发送,以回调(Callback)的方式接收并解析信息,为非在线等待[7]。为了高效使用有限的资源,采用异步非阻塞通信和多线程并发处理网络事务。处理流程如图7所示。
图6 接口结构
图7 网络通信流程
三个线程并行完成网络连接建立、通信资源管理和定位数据接收,进程间通过公共内存进行数据交换。该模块以帧为单位处理数据,并解决接收过程中数据帧恢复、粘包等问题。
在系统数据处理流程中,不同环节耗时、运算速度不一致,当并发终端达到一定数量后,将会发生数据阻塞,消耗大量资源,软件无法正常的运行下去。在软件实现中,通过建立多个缓存来解决数据阻塞,协调模块间的数据处理速度不一致的情况。
经过测试,存在数据阻塞的部分包括协议解析与数据转换的数据交换、数据转换与界面展现的数据交换(参见图3)。其中,前者在并发量较大的情况下会出现数据阻塞;后者由于承担繁重的绘图工作,处理速度较慢,数据阻塞的情况比较严重。
构建缓存的思路是在两个处理过程间开辟一块公共内存来协调两个过程的数据交换。工作时,数据传递方将数据写入公共内存,而非直接传递给数据接收方;数据接收方则依据自身的运行速率,在上一个操作完成后从公共内存中读取数据,暂时无法处理的数据依然存在于公共内存中,等待下一次读取。通过公共内存的构建,可以有效的避免数据传递方与数据接收方由于运行速率不同导致的数据阻塞和丢失。
地图绘制是单线程执行,是整个系统消耗资源最多、运行最慢的部分。在Arc Engine中,显示子系统管理着地图的显示和刷新,异步显示刷新和密集的地图渲染操作能导致CPU的大量运算操作。CPU的负载能够延迟,甚至阻止地图显示刷新和用户对地图显示的交互,从而降低了系统的实时性。而Arc Engine提供的动态显示技术则提供了一种同步刷新机制,将密集的图形渲染工作负担从CPU运算转移到图形设备硬件上来,能够让许多的移动对象实现快速刷新[8]。在本系统中就采用了动态显示技术实现监控目标的实时显示刷新,可同时动态显示500个以内的目标。
高时态地图绘制是通过动态图层实现的,通过重写Arc Engine里的ILayer, IDynamicLayer, ILayerExtensions等接口,重写动态图层绘制事件,通过自定义地图刷新频率实时在地图上显示更新数据。
地图动态绘制的主要代码如下所示:
public override void DrawDynamicLayer(esriDynamicDrawPhase DynamicDrawPhase, IDisplay Display,IDynamicDisplay DynamicDisplay)
{
m_dynamicProperties.SetScale(esriDynamicSymbolType.esriDSymbolText, 1.0f, 1.0f);
m_dynamicProperties.SetColor(esriDynamicSymbolType.esriDSymbolText, 1.0f, 1.0f, 1.0f, 1.0f);
m_dynamicProperties.set_RotationAlignment(esriDynamicSymbolType.esriDSymbolMarker, esriDynamicSymbolRotationAlignment.esriDSRANorth);
m_dynamicProperties.set_Smooth(esriDynamicSymbolType.esriDSymbolLine, true);
DynamicDisplay.DrawPolyline(pc);
}
GPS定位跟踪系统综合运用GIS技术、网络通信技术,实现了对车辆、人员等目标的监控定位,具备兼容多种硬件协议和提供多种坐标定位数据的能力。在运行阶段,系统支持的并发量为100台左右,容量可达300~500台,而且采用GPRS通信方式,成本低廉,能够较好的满足中小项目对GPS定位跟踪服务的需求。目前,该软件已成功的应用于哈尔滨市数字城市规划监察系统(如图8所示)。
图8 系统界面
在系统的实际应用中,该软件还存在以下几个方面的不足:
(1)高时态地图绘制加快了地图刷新速度,但对用户交互的响应时间较长,用户操作不十分流畅,一定程度影响了用户体验。该问题可能与Arc Engine版本有关,在9.3版本中,动态显示技术得到了较大改善,届时可以解决该问题。
(2)欠缺发送跟踪定位器指令功能。由于硬件厂家不同,跟踪定位器的控制指令格式、发送方式等存在较大差异,只能定制实现。
[1] 许建峰.基于GPS/GPRS的车辆管理系统的设计与研究[D].南京:南京理工大学,2008
[2] 杜江平.基于GPS/GIS车辆定位导航系统的研究[D].成都:电子科技大学,2009
[3] 王海亮,林立新,于三禄,等.精通Oracle 10g PL/SQL编程[M].北京:中国水利水电出版社,2004
[4] Erich Gamma, Richard Helm, Ralph Johnson, et c.设计模式[M].北京:机械工业出版社,2008
[5] 毕硕本,王 桥,徐秀华.地理信息系统软件工程的原理和方法[M].北京:科学出版社,2003
[6] 李征航,黄劲松,GPS测量与数据处理[M].武汉:武汉大学出版社,2005
[7] Christian Nagel, Bill Evjen, Jay Glynn,C#高级编程[M].北京:清华大学出版社,2002
[8] 韩 鹏,王 泉,王 鹏,等.地理信息系统开发-ArcEngine方法[M].武汉:武汉大学出版社,2008