APP下载

地理信息系统动态菜单技术设计与实现

2012-11-30

计算机工程与设计 2012年4期
关键词:配置文件右键图层

郑 昊

(华北计算技术研究所,北京100083)

0 引 言

地理信息系统 (geographic information system,GIS)是一种特定的十分重要的空间信息系统,用以支持空间数据的采集、管理、处理、分析、建模和显示,以便解决复杂的规划和管理问题。地理信息系统往往不是以一个应用软件出现,而是一个二次开发包的形态提供给二次开发用户为某一个特定的业务系统提供图形化的数据表现手段和空间查询分析手段。

基于地理信息系统的业务应用会在多处使用菜单功能,如系统的主菜单、图层控制器中的菜单、地图窗口中的右键菜单,在某些情况下这些菜单的绝大部分内容已经由地理信息系统本身提供,业务应用只需增加少数几个菜单项即可满足使用需求。为此,菜单项必须能够进行动态修改。地理信息系统 (二期)(简称TerraMap)是一个大型的地理信息软件开发和应用平台。本文针对TerraMap地理信息系统中采用的各种动态菜单技术的设计和实现进行论述。

1 地理信息系统中的动态菜单需求

常用的地理信息系统平台往往包括两个主要的应用软件,一个是综合应用软件 (例如ArcGIS平台的ArcMap软件),另一个是数据管理软件 (例如ArcGIS平台当然Arc-Catalog软件)。一些简单的应用是在现有的软件基础上通过一定的手段加入一些特定的菜单项或者工具条按钮来增加某些特定功能。在此过程中如何能够动态的修改已有应用软件的菜单项或者工具条内容是一个需要解决的问题。

地理信息系统中的图层控制器是一个通用的控件,用以控制一幅地图中各个图层的可见性、符号、注记等各种属性信息。在一个具体的以地图为背景的业务系统中 (如气象系统),业务数据往往以图层的形式叠加到地图上进行显示 (如气象云图)。由于图层控制器的结构复杂、开发难度大,业务系统不会做专门的图层控制器,而是直接采用地理信息平台提供的图层控制器,然后进行一部分定制化修改,满足业务功能。在图层控制器上用鼠标右键点击每个图层的时候都会弹出菜单,用于完成各种设置。在对图层控制器进行定制化的时候也需要对这些右键菜单进行定制,为此对地理信息系统中图层控制器的右键菜单提出了可以定制化修改的要求。

在地图窗口中用鼠标右键单击,往往会弹出一个特定的右键菜单满足当前应用的需求。在特定的业务系统中,由于增加了业务处理功能,因此在地图窗口中的右键菜单也要能够进行动态修改,使得右键菜单中的功能能够提供和业务应用相关的内容,满足具体应用需求。为此,对地理信息系统中的地图窗口的右键菜单提出了动态修改的要求。

2 动态菜单设计与实现

根据以上对地理信息系统动态菜单的需求分析,在TerraMap中,针对动态菜单问题进行了专题研究,并以一套完整的技术解决了该问题。以下针对TerraMap中的动态菜单技术进行分析和说明。

2.1 应用系统动态菜单

应用程序动态菜单指在TerraMap的两个主要应用软件:综合应用软件 (GIS_Map)和综合管理软件 (GIS_Manager)中,能够实现在不需要对应用软件进行重新编译的情况下能够动态对软件的主菜单中的菜单项进行修改,同时能够根据具体应用增加部分菜单项扩充现有功能。

要实现应用程序的动态菜单,应用程序的菜单不能直接写到应用程序的资源文件。应用程序必须根据一定规则把菜单内容写入到一个特定的配置文件中,然后在应用程序启动的过程中读取菜单配置文件动态生成菜单项。要想设计这个特定的配置文件的结构,我们必须对各个菜单项的特点进行分类总结,然后进行一定的归类划分,最后根据不同菜单项的特点设定特定的菜单项内容。一个典型的动态菜单配置文件的内容如图1所示,后面针对配置文件中的每一项内容进行说明。

图1 动态菜单配置文件

动态菜单本身是一个文本文件,文本文件的每一行代表一个菜单项,每个菜单项有多个描述项,后面将详细说明。文件中的每一行都有0或者多个缩进,其中每一个缩进代表菜单的一个层级。在图1所示的内容中,“Caption:显示控制”代表了顶级菜单中的 “显示控制”, “Caption:放大;ID:ZoomIn;CommandOrTool:Tool;DocOrMain:Main;Type:Button;”代表了 “显示控制”的下一级菜单中的 “放大”菜单项。由于篇幅所限图1截取的部分内容只包括了一级缩进的菜单项。在实际的动态菜单配置文件中每缩进一级代表菜单项中的下一级菜单,动态菜单配置文件可以描述任意级别的菜单项层次关系。为了便于用于操作,菜单项的层级数一般不超过三级。

动态菜单配置文件中的每一行代表一个菜单项,每行文字由多个被分号分隔开的名值对组成,如 “Caption:显示控制”或者 “ID:ZoomIn”,其中冒号左侧的内容代表描述的选项,冒号右侧的内容代表与描述相关的值。下面我们对每个名字对分别进行说明。

“Caption”描述了一个菜单项表现给使用者的文字描述,如在典型的Windows窗口应用软件中的 “文件”、“视图”、 “编辑”的文字项。图1中的 “Caption:显示控制”表示一个顶级菜单项的文件描述为 “显示控制”。

对于任何一个桌面版地理信息应用系统,用户典型的交互方式是用户点击一下菜单或者工具条按钮,系统弹出一个对话框,用户在对话框上输入一些条件,然后点击确定按钮,系统按照用户的输入实现系统功能。例如用户需要修改一个选中的地理要素的符号信息,用户点击修改符号菜单,系统弹出符号选择对话框,用户选择需要的符号后点击确定按钮,系统会把当前选中的地理要素的符号替换为用户选择的符号。对于具有以上功能特点的菜单项我们称作 “命令”。另外一种典型的用户交互方式用户点击一下菜单或者工具条按钮,系统实现具体的功能,而只是记录一个状态,当用户在地图上进行鼠标键盘操作时,系统才会实现具体的功能。例如对于地图漫游功能,用户需要首先点击一下漫游按钮,表示准备进行漫游操作,系统会记录下当前状态为漫游状态,用户利用鼠标在地图上进行拖拽,系统会根据用户的鼠标动作实现地图的上下左右漫游。对于具有以上功能特点的菜单项我们乘坐 “交互工具”。TerraMap通过自主研制的组件集成技术实现不同功能组件的系统集成,TerraMap的组件集成技术不在本文的讨论范围之内,因此不作详细描述。对于 “命令”和 “交互工具”,TerraMap在组件集成过程中做了明确的区分,因此在进行动态菜单生成的时候也需要对其进行区分。为此,在动态菜单配置文件中的每个菜单项的描述内容中有一项就是描述一个菜单项是 “命令”还是 “交互工具”,样式如 “CommandOrTool:Tool”。 “CommandOrTool”是用于描述是是 “命令”还是 “交互工具”,冒号之后的“Tool”用于描述选项的值为一个 “交互工具”,如果冒号之后是 “Command”代表菜单项是一个 “命令”。

“ID”描述了一个菜单项所代表的具体的 “命令”或者“交互工具”的ID,TerraMap通过这个ID把用户点击菜单的请求发送到能够处理该请求的功能组件,由具体的功能组件完成实际的任务。如用户点击 “放大”菜单项,系统通过识别菜单项的 “ID”是 “ZoomIn”,把该请求发送给处理地图缩放的功能组件,该组件把当前的工具状态设置为 “放大”。

有些菜单项的功能是和当前窗口相关的,如放大、缩小、漫游等;有些菜单项的功能是与当前窗口无关而与全局唯一的地图文档相关,如添加地图、删除地图等。TerraMap中把处理与当前窗口相关功能的组件和处理与地图文档相关的组件分别管理,因此在动态菜单配置文件中必须对一个菜单项描述的是与地图窗口相关的功能还是与地图文档相关的功能进行区别。“DocOrMain”就是用于描述处理菜单项的功能组件是当前窗口中的组件还是地图文档中的组件。如果值为 “Main”表示该菜单项的处理组件是在当前窗口中,如果值为 “Doc”表示该菜单项的处理组件是与地图文档相关。

“Type”选项有两个值“Button” 和 “Seperator”。“Button”表示该菜单项就是一个普通的菜单项,如 “放大”、“缩小”、“添加图层”等。“Seperator”表示该菜单项不代表一个具体的功能,而仅仅是用于对多个菜单项进行分组的分隔符,其表现形式不再以 “文件”、“视图”等文字的形式出现,而是一个以横线表示的分隔符。

动态菜单配置文件通过以上各种选项的设置实现了对各种复杂菜单项的描述,在应用程序启动的时候就可以通过读取该配置文件动态生成菜单。TerraMap中的GIS_Map和GIS_Manager软件都是通过动态配置菜单来实现菜单设置,因此,用户可以通过修改配置文件来修改GIS_Map和GIS_Manager,把自己新增的特定功能加入以上两个软件。

2.2 图层控制器动态菜单

相对于应用系统的动态菜单,图层控制器的动态菜单要复杂得多。应用系统的主菜单是一个菜单,而对于图层控制器,使用鼠标右键单击不同的图层会有不同内容的菜单弹出,因此图层控制器涉及到多个动态菜单。下面针对TerraMap中图层控制器的菜单设计进行讨论。

在设计图层控制器的动态菜单之前,我们先分析一下图层控制器菜单的特点。图层控制器中不同类型的图层对应的菜单各不相同,但又有一部分菜单项是相同的或者是通用的。例如当鼠标右键点击一个矢量图层的时候弹出的菜单如图2所示;当鼠标右键单击一个影像图层的时候弹出的菜单如图3所示。

矢量图层对应的菜单中包括了 “显示符号”、“显示注记”、“可选取”等和矢量图层本身特性相关的内容;影像图层对应的菜单中包括了 “属性”、“1比1显示”等和影像图层本身特性相关的内容。由此我们想到可以针对每一种类型的图层分别配置一个动态菜单文件。同时,我们还发现包括 “可见”、“关闭”、“显示效果”等菜单是对于任何图层都适用的菜单项。为此我们考虑建立一个通用菜单配置文件。

通过以上分析,在TerraMap的图层控制器菜单设计中会涉及到多个配置文件,由3部分组成,分别为:Common.menu、MenuList.cfg和 Vector.menu、Image.menu、DEM.menu……其中Common.Menu用于存储通用菜单项的内容,如 “可见”、“关闭”、“显示效果”等,其中每个菜单项的描述项与应用系统的动态菜单相同,如图4所示。

MenuList.cfg是一个图层类型与菜单配置文件匹配关系的文件,内容如图5所示。左侧的Vector、Image、Dem表示矢量图层、影像图层和DEM图层,右侧表示左侧对应的矢量图层、影像图层和DEM图层的菜单文件。

Vector.menu、Image.menu、DEM.menu分别包含了矢量图层、影像图层和DEM图层相关的菜单项内容,具体文件格式与Common.menu相同,在此不详细描述。

图4 Common.Menu

图5 MenuList.cfg

下面以矢量图层右键点击后的系统处理流程为例描述图层控制器动态菜单的处理过程。当鼠标右键点击了一个矢量图层的时候,系统在MenuList.Cfg中查找与矢量图层项对应的菜单配置文件是 Vector.Menu。然后把 Vector.Menu和Common.Menu合并到一起,组成一个菜单,其中Vector.Menu中的内容在上面,Common.Menu中的内容在下面。最后弹出这个菜单,完成矢量图层菜单的显示。

如果用户需要增加一个自定义的图层类型,如 “User-Layer”,那么只要为这个自定义图层设计好一个菜单文件,如 “User.Menu”,然后在 MenuList.cfg中增加一行设置“UserLayer”和 “User.Menu”的关联关系,这样用户自定义图层对应的菜单就会在图层控制器中显示出来。由此可见,图层控制器动态菜单设计灵活,用户很容易根据自己的业务需要对菜单内容进行修改,同时也可以增加特定的菜单项。

2.3 地图窗口动态菜单

在地图窗口中单击鼠标右键弹出的菜单与图层控制器右键菜单有相似的地方,也不是一个通用的菜单,而是随着当前工具的不同显示不同菜单项,如当前工具为 “放大”时右键菜单如图6所示,当前工具为 “矢量编辑”时,右键菜单如图7所示。

与图层控制器的右键菜单类似,地图窗口中的右键菜单也是由两部分组成,一部分是与当前工具相关的内容,如 “点选取”、“矩形选区”,另一部分是与当前交互工具无关的通用部分,如 “放大”、“缩小”等。TerraMap中地图窗口中右键菜单的配置文件由3部分组成:ContextCommon.menu、 ContextMenuList.cfg 和 ZoomIn.menu、ZoomOut.menu、 Edit.menu …… 其 中 ContextCommon.Menu用于存储通用与交互工具无关的菜单项内容,ContextMenuList.cfg是一个交互工具与菜单配置文件匹配关系的文件,内容如图8所示。ZoomIn.menu、ZoomOut.menu、Edit.menu分别包含了放大、缩小和编辑交互工具相关的菜单项内容。

下面以编辑工具右键点击后的系统处理流程为例描述地图窗口右键菜单的处理过程。当前工具为 “编辑”当鼠标右键点击地图窗口的时候,系统在ContextMenuList.Cfg中查找与 “编辑”对应的菜单配置文件是Edit.Menu。然后把Edit.Menu和Common.Menu合并到一起,组成一个菜单,其中Edit.Menu中的内容在上面,Common.Menu中的内容在下面。最后弹出这个菜单,完成菜单的显示。

如果用户需要增加一个自定义的交互工具,如 “User-Tool”,那么只要为这个自定义交互工具设计好一个菜单文件,如 “UserTool.Menu”,然 后 在 ContextMenuList.cfg中增加一行设置 “UserTool”和 “UserTool.Menu”的关联关系,这样用户自定义的交互工具对应的菜单就会在地图窗口中显示出来。由此可见,地图窗口动态菜单设计灵活,用户很容易根据自己的业务需要对菜单内容进行修改,同时也可以增加特定的菜单项。

3 研制成果

通过动态菜单技术的采用,TerraMap实现了综合应用软件和数据管理软件菜单的动态修改,也可以根据用户的业务要求动态修改图层控制器菜单和地图窗口的菜单,满足各种应用对地理信息系统的要求。TerraMap动态菜单技术的采用,大大提高了TerraMap的二次开发效率,加强了TerraMap的可扩充性、可维护性和可裁剪性,并为用户在TerraMap平台上进行扩展提供了强有力的支持。

4 结束语

传统地理信息系统的设计中,把针对不同场景的菜单资源放入源程序中,有多少个场景就会有多少个菜单资源。一旦编码完成菜单的数量就是定死的,无法进行修改,更不可能根据使用场景的变化作相应的改变,无法在已有的菜单中增加用户特定的菜单项,给二次开发用户带来了很大的不方便。动态菜单技术很好的解决了这些问题,同时具有很强的扩展性。相对于传统的菜单设计,动态菜单技术具有明显的技术先进性,可以应用到其它地理信息系统的开发过程中。

[1]NING Jinsheng,CHEN Junyong,LI Deren,et al.Introduction to surveying and mapping [M].Wuhan:Wuhan University Press,2009:9-17(in Chinese).[宁津生,陈俊勇,李德仁,等.测绘学概论 [M].武汉:武汉大学出版社,2009:9-17.]

[2]LIN Aiwen.Physical geography [M].Wuhan:Wuhan University Press,2010:4-13 (in Chinese). [林爱文.自然地理学 [M].武汉:武汉大学出版社,2010:4-13.]

[3]GUO Qingsheng,HUANG Yuanlin,ZHENG Chunyan,et al.Spatial reasoning and incremental map generalization [M].Wuhan:Wuhan University Press,2007:7-17 (in Chinese).[郭庆胜,黄远林,郑春燕,等.空间推理与渐进式地图综合[M].武汉:武汉大学出版社,2007:7-17.]

[4]ZHANG Xinchang,ZENG Guanghong,ZHANG Qingnian.Cities geographic information system [M].Beijing:Science Press,2006:25-74(in Chinese).[张新长,增广鸿,张青年.城市地理信息系统 [M].北京:科学出版社,2006:25-74.]

[5]ZHANG Hong,WEN Yongning,LIU Aili.Geographic information system based algorithm [M].Beijing:Science Press,2007:15-44(in Chinese).[张宏,温永宁,刘爱利.地理信息系统算法基础 [M].北京:科学出版社,2007:15-44.]

[6]HUA Yiixin,WANG Fei,GUO Xinghua,et al.General principles and techniques of operational picture[M].Beijing:PLA Publishing House,2007:21-46 (in Chinese).[华一新,王飞,郭兴华,等.通用作战图原理与技术 [M].北京:解放军出版社,2007:21-46.]

[7]XU Xiru.Remote sensing physics [M].Beijing:Peking University Press,2006:20-25 (in Chinese).[徐希孺.遥感物理[M].北京:北京大学出版社,2006:20-25.]

[8]ZHANG Baogang.Topographical maps of the six space-time database construction time element[M].Beijing:Surveying and Mapping Press,2009:2-4 (in Chinese).[张保钢.地形图时空数据库建设中的六个时间要素 [M].北京:测绘出版社,2009:2-4.]

[9]ZHANG Wei.Large scale digital topographic map database acquisition and construction of integrated system development[M].Beijing:Surveying and Mapping Press,2009:16-19(in Chinese).[张伟.大比例尺数字地形图采集与建库一体化系统研制 [M].北京:测绘出版社,2009:16-19.]

[10]DUAN Liqiong.Strengthen the universal conversion platform for geographical information systems reflections on the construction [M].Beijing:Surveying and Mapping Press,2009:28-30(in Chinese).[段丽琼.加强地理信息系统通用转换平台建设的几点思考 [M].北京:测绘出版社,2009:28-30.]

[11]YANG Yingwei.The public map service in the multi-scale spatial data production and maintenance[M].Beijing:Surveying and Mapping Press,2009:34-39(in Chinese).[杨英伟.公众地图服务中多尺度空间数据生产与维护 [M].北京:测绘出版社,2009:34-39.]

[12]CHE Zhiqiang.GIS-based geological map spatial database[M].Beijing:Surveying and Mapping Press,2009:43-47(in Chinese).[车志强.基于GIS的地质图空间数据库建设[M].北京:测绘出版社,2009:43-47.]

[13]JIANG Botao.Ground sample distance map based on biopsy tissue model[M].Beijing:Surveying and Mapping Press,2009:804-807(in Chinese).[蒋波涛.基于地面采样距离的地图切片组织模型研究 [M].北京:测绘出版社,2009:804-807.]

[14]XU Yunhe.Plug-in design and implementation of GIS [M].Beijing:Surveying and Mapping Press,2009:816-823 (in Chinese).[徐云和.插件式GIS设计与实现 [M].北京:测绘出版社,2009:816-823.]

[15]BAO Nisha.Raster vector data and method of the process of selection of scale [M].Beijing:Surveying and Mapping Press,2009:823-828(in Chinese).[包妮沙.矢量数据栅格化过程中尺度与方法选择研究 [M].北京:测绘出版社,2009:823-828.]

[16]TONG Ligui.3Genvironment the mobile GIS industry[M].Beijing:Surveying and Mapping Press,2009:832-836 (in Chinese).[童丽闺.3G环境下的移动GIS行业发展 [M].北京:测绘出版社,2009:832-836.]

猜你喜欢

配置文件右键图层
轻松整理Win10右键菜单
自定义“开始”右键控制菜单
互不干涉混用Chromium Edge
忘记ESXi主机root密码怎么办
用右键菜单管理右键菜单
巧用混合图层 制作抽象动感森林
为View桌面准备父虚拟机
打印机设置
给Windows 10右键菜单做“手术”
图层法在地理区域图读图中的应用