曹新运,汪云甲,王 坚,张俪文,蒋 龙
(中国矿业大学 环境与测绘学院,江苏 徐州 221116)
在移动应用商店中,各种基于位置的服务(location based service,LBS)应用层出不穷,一方面是手机性能的提升使地理信息系统(geographic information system,GIS)中复杂的计算可以在手机上实现,另一方面一些大型地图公司(如GoogleMap、OpenStreetMap),提供的地图服务较为成熟,使应用开发的难度大大降低[1-2]。
虽然LBS应用的功能涉及到生活中的各个方面,但应用范围以室外地图服务为主,室内的地图服务很少。主要原因是室内地图服务目前还处于研发阶段,没有成熟的开发平台出现;室内地图对于不同的建筑往往有不同的需求,个性化较强,难于推广;室内定位较为困难,精度比较低。一些物联网公司开始尝试在一些场景中进行开发,但在开发的过程中往往更加关注信号传输和服务器架设[3-4],导致地图系统的显示效果差,运行效率低。
本文详细介绍嵌入式系统面向对象的建模过程及各过程的功能,并将其引入到安卓(Android)平台的室内地图构建过程中,以广州白云机场室内地图设计为例,完成该实验场地的室内地图设计与功能分析,重点介绍瓦片地图[5-6],地图概括[7-8]和路径导航[9-10]三方面的优化设计细节,提高系统地图显示效率。
嵌入式系统的快速面向对象过程(rapid object-oriented process for embedded system,ROPES)是20世纪九十年代提出的针对嵌入式实时系统的面向对象建模过程[11]。与经典的面向对象(object-oriented class model,OO)建模相比,ROPES过程更适合嵌入式实时系统,对状态图和对象图进行反复的修改和细化,在时间上和容错方面有着比PC机更高的要求。小型嵌入式系统的ROPES过程用到了以下几个开发活动:
(1)分析
小型嵌入式系统的分析只包括下面的两个步骤:需求分析和对象分析,需求分析是典型的黑盒分析,主要针对系统的功能需求和性能需求。对象分析包括对象的结构分析和行为分析:结构分析的重点是分析各个对象之间的关系,进一步完善和验证协作图,而行为分析的重点是分析对象内部如何响应各种来自内外的消息。
(2)设计
得到分析模型之后需要对系统进行优化,保证了需求的一致性。包括体系结构设计、机械设计和详细设计,维持软件和硬件之间协调,完善对象之间的协作,进一步细化和优化类内部成员。
(3)转换
将设计转换为代码,包括单元级的测试。在测试过程中会出现设计与实际要求不相符的情况,比如响应时间,需要对算法进行改进或者数据结构以及特殊机制进行优化。
(4)测试
包括完整性测试和有效性测试。完整性测试是检验系统模型是否满足所需的功能,有效性测试是检验系统的性能是否达到要求。
从功能上讲,室内地图系统包括两个部分:显示地图的GIS系统和显示商家信息的管理信息系统(management information system,MIS),本文的重点是在嵌入式系统上实现室内的GIS功能,因此在MIS系统上没有进行细致的设计。限于文章篇幅,本文主要描述的室内地图系统功能有:底图显示、地图目标显示和路径导航。
在底图显示上,考虑平板电脑的内存较小,整幅图像的显示会消耗大量的存储空间和时间,经测试分析,在Android2.2的模拟器上一次性加载800 kB的整幅图像就会造成溢出错误,因此选择瓦片金字塔技术实现地图显示。在地图目标的显示上,除了裁剪问题,还有在目标显示时不能出现目标点的重叠显示,需要进行地图概括。在路径导航上,考虑通过减少节点的数量来满足导航计算时间需求,同时保证正常的显示路径,没有穿越墙壁等不符合逻辑的错误。
系统中的用例协作体系是一致的,分为数据层、计算层和显示层,不同用例在细节上做了少量调整以保证需求的完整性。通过对各个用例递归分析得到了完整对象集,将基本对象进一步合并和优化,形成带有属性的类图。具体改进如下:为了方便程序实现,将计算对象作为显示对象的一个成员;将文件读取作为一个公共辅助类,方便各种文件的读取和转换,用例-对象如表1所示。
表1 用例-对象表
系统中使用的观察者模型没有提供主动注销的功能,范围和比例尺数据发生变化时,所有的图层中的相关参数都进行相应更新。数据集的索引文件和显示文件使用了容器模式,瓦片地图的放大和缩小中使用了接口模式。
数据库可以使用嵌入式轻量级数据库SQLite,支持基本的SQL功能,数据量极小。系统中可以使用两个数据库保存地图目标数据和路径数据,分别设为HotPoint和Path数据库,其各自属性如下表2~表4所示。
表2 HotPoint属性表
表3 PathPointT属性表
表4 PathLine属性表
以广州白云机场为例,按照上述室内地图的ROPES设计过程,根据用户体验提出的要求列出需求分析,将瓦片地图模型、地图概括和路径导航文件组织进行优化,满足如下表5的要求。
表5 交互的需求分析
传统的金字塔模型采用2倍的分辨率变化函数,适用于跨度较大的地图数据,但对于地图数据的跨度较小时,如室内地图,区域专题地图,这类模型将不再适合,动态缩放显示时画面会产生跳跃和断层;图像在几何比例缩放时,会产生细节显示模糊的情况,从而影响地图表达,因此本文主要采用系数为0.2的线性分辨率变化函数。
(1)平移
按照改进的算法实现了瓦片地图的显示,但是在时间上却不能满足需求分析中的用例要求。为了解决显示时间较长的问题,这里引用缓冲机制,减少显示图片时使用的时间。具体做法:引入缓冲队列,在读取瓦片时,将瓦片邻接的对象一同读入缓存;显示瓦片,先从缓存中读取,如果没有再从文件中读取。以X方向平移500个像素,Y方向平移300个像素为例,实验结果如表6所示。
每次时间消耗相差较大,是由显示范围的瓦片个数造成的,显示区域空白较多,显示时间就短,反之时间较长。加速后,平均时间有了大幅度的减少,可以满足需求分析中的特殊要求。
(2)放大缩小
添加缓存机制可以满足平移的要求,但在放大缩小时,需要清空缓存,这就造成在放大缩小时显示速度较慢的问题。解决方法:在放大缩小中加入Animation,填充读取的时间;同时加开线程,读取将要显示的瓦片,在Animation结束后,添加到缓存中。
4.1.2 地图概括加速
网格内地图概括在平移操作过程中,并不需要进行重新计算,将计算过的网格保存在缓存中,可以减少计算次数。网格间的地图概括计算的对象相对较多,会占用较多时间,但是放在单独的线程中并不会加快速度。实验中选择10组相同的三类目标来显示,使用时间见表7。
表6 加速前时间消耗
表7 地图概括多线程对比
与不加线程相比,加线程的速度反而慢了一些。这是由于地图概括的顺序是先进行网格内的概括,后进行网格间的概括,网格间的概括并行计算时间上并没有和原来的计算有时间上的重叠,因此不会减少消耗的时间,反而增加了线程操作影响了速度。
4.1.3 路径导航加速
在使用Dijkstra算法过程中,减少节点的数目,只记录路径点。优化前的节点数目为325个,优化后仅为78个,如图1所示。通过减少节点,算法消耗的时间大大减少,优化前需要的15 s,优化后仅为200 ms。
图1 路径节点优化示意图
减少节点后,起点和终点节点的选取和显示需要进行计算。起点和终点的选取使用到索引文件,由点所在的网格找到网格中距离点最近的路径段,再由路径段找到节点。路径显示时,起点和终点部分需要和路径进行垂线截取,以保证路径的美观。
进入系统后会进入默认的比例尺和范围,如图2所示。地图中的蓝色原点代表用户所处的位置,左上角的蓝色图标是地图目标列表。点击地图目标列表,会出现下拉菜单,如图3所示。系统采用地图目标分类显示,方便用户快速找到感兴趣目标。
图2 系统主界面
图3 地图目标列表
点击地图目标列表的选项,会在地图上显示相应的地图目标。小比例尺显示时,地图概括程度大,被删去的地图目标多,需要保留重要的地图目标,系统默认最后选中的地图目标类别的优先级最大,地图概括效果如图4所示。
图4 各分辨率地图目标显示
在地图目标显示的基础上,可以进行路径导航。起始位置是用户所在位置(用户位置由室内定位系统提供,这里使用示例数据,仅供显示使用),终点位置是地图目标位置,导航开始时会出现对话框,确定是否导航。其他的地图目标移除,只显示起点和终点,显示细节见图5所示。
图5 路径导航效果图
在路径导航过程中,如果用户位置偏移导航路线较多,系统会出现如图6所示的提示,用户可以选择重新导航和不再提醒。
图6 路径变化对话框
考虑ROPES更适合嵌入式软件设计的过程,将其引入到Android系统的室内地图服务系统设计中。本文描述ROPES的设计过程后,分析了室内地图的需求分析、对象分析、机械设计和数据设计,并以广州白云机场室内地图设计为例,详细讲解了瓦片地图、地图概括和路径导航的优化过程,满足实验场地用户人员的需求。得到如下结论:
(1)对于室内地图,使用线性变换分辨率函数不会使得原始图像在放大的过程中经常出现模糊断点的现象,引入缓存机制能够很好的减少图片显示时间,满足系统设计的需求;
(2)将地图概括分为网格内概括和网格间概括,减少了计算次数,在不加并行计算的前提下,提高了计算效率;
(3)删除路径上的冗余点,能够加快路径导航的计算效率;
(4)基于ROPES的室内地图服务系统弥补了PC机上设计嵌入式系统的不足,能够很好的满足用户的需求。
[1] 杨帆.基于GSM和Google Map的定位与地图标注关键技术研究[J].陕西科技大学学报:自然科学版,2011,29(2):122-125+129.
[2] 李垠,左德霖,侯建明,等.基于Google Map的地震综合信息服务系统构建研究[J].大地测量与地球动力学,2011,31(S1):118-121+131.
[3] 许虎,聂云峰,舒坚.基于中间件的瓦片地图服务设计与实现[J].地球信息科学学报,2010,12(4):562-567.
[4] 聂云峰,刘海玲,许虎.Geo Web Cache 瓦片地图服务中间件研究[J].测绘科学,2011,36(6):207-209.
[5] 欧阳峰,杨春成,谢鹏,等.通用瓦片生成引擎设计与性能优化[J].测绘科学技术学报,2014,31(2):177-180+184.
[6] 李德仁,肖志峰,朱欣焰,等.空间信息多级网格的划分方法及编码研究[J].测绘学报,2006,35(1):52-56+70.
[7] 邓敏,樊子德,刘慧敏.层次信息量的线要素化简算法评价研究[J].测绘学报,2013,42(5):767-773+781.
[8] 邓敏,徐震,赵彬彬,等.地图概括中空间目标几何信息传递模型研究[J].地球信息科学学报,2010,12(5):655-661.
[9] 李霖,毛凯,谭永滨.地标分层多粒度路径导引描述方法[J].测绘学报,2014,43(1):105-110.
[10] 郑年波,陆锋,李清泉.面向导航的动态多尺度路网数据模型[J].测绘学报,2010,39(4):428-434.
[11] DOUGLASS B P.Doing Hard Time:Developing Real-time Systems with UML,Objects,Frameworks,and Patterns[M].New York:Addison-Wesley Professional,1999.