鄭 昊
(華北計算技術研究所,北京100083)
地理信息系統 (geographic information system,GIS)是一種特定的十分重要的空間信息系統,用以支持空間數據的采集、管理、處理、分析、建模和顯示,以便解決復雜的規劃和管理問題。地理信息系統往往不是以一個應用軟件出現,而是一個二次開發包的形態提供給二次開發用戶為某一個特定的業務系統提供圖形化的數據表現手段和空間查詢分析手段。
基于地理信息系統的業務應用會在多處使用菜單功能,如系統的主菜單、圖層控制器中的菜單、地圖窗口中的右鍵菜單,在某些情況下這些菜單的絕大部分內容已經由地理信息系統本身提供,業務應用只需增加少數幾個菜單項即可滿足使用需求。為此,菜單項必須能夠進行動態修改。地理信息系統 (二期)(簡稱TerraMap)是一個大型的地理信息軟件開發和應用平臺。本文針對TerraMap地理信息系統中采用的各種動態菜單技術的設計和實現進行論述。
常用的地理信息系統平臺往往包括兩個主要的應用軟件,一個是綜合應用軟件 (例如ArcGIS平臺的ArcMap軟件),另一個是數據管理軟件 (例如ArcGIS平臺當然Arc-Catalog軟件)。一些簡單的應用是在現有的軟件基礎上通過一定的手段加入一些特定的菜單項或者工具條按鈕來增加某些特定功能。在此過程中如何能夠動態的修改已有應用軟件的菜單項或者工具條內容是一個需要解決的問題。
地理信息系統中的圖層控制器是一個通用的控件,用以控制一幅地圖中各個圖層的可見性、符號、注記等各種屬性信息。在一個具體的以地圖為背景的業務系統中 (如氣象系統),業務數據往往以圖層的形式疊加到地圖上進行顯示 (如氣象云圖)。由于圖層控制器的結構復雜、開發難度大,業務系統不會做專門的圖層控制器,而是直接采用地理信息平臺提供的圖層控制器,然后進行一部分定制化修改,滿足業務功能。在圖層控制器上用鼠標右鍵點擊每個圖層的時候都會彈出菜單,用于完成各種設置。在對圖層控制器進行定制化的時候也需要對這些右鍵菜單進行定制,為此對地理信息系統中圖層控制器的右鍵菜單提出了可以定制化修改的要求。
在地圖窗口中用鼠標右鍵單擊,往往會彈出一個特定的右鍵菜單滿足當前應用的需求。在特定的業務系統中,由于增加了業務處理功能,因此在地圖窗口中的右鍵菜單也要能夠進行動態修改,使得右鍵菜單中的功能能夠提供和業務應用相關的內容,滿足具體應用需求。為此,對地理信息系統中的地圖窗口的右鍵菜單提出了動態修改的要求。
根據以上對地理信息系統動態菜單的需求分析,在TerraMap中,針對動態菜單問題進行了專題研究,并以一套完整的技術解決了該問題。以下針對TerraMap中的動態菜單技術進行分析和說明。
應用程序動態菜單指在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,把自己新增的特定功能加入以上兩個軟件。
相對于應用系統的動態菜單,圖層控制器的動態菜單要復雜得多。應用系統的主菜單是一個菜單,而對于圖層控制器,使用鼠標右鍵單擊不同的圖層會有不同內容的菜單彈出,因此圖層控制器涉及到多個動態菜單。下面針對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”的關聯關系,這樣用戶自定義圖層對應的菜單就會在圖層控制器中顯示出來。由此可見,圖層控制器動態菜單設計靈活,用戶很容易根據自己的業務需要對菜單內容進行修改,同時也可以增加特定的菜單項。
在地圖窗口中單擊鼠標右鍵彈出的菜單與圖層控制器右鍵菜單有相似的地方,也不是一個通用的菜單,而是隨著當前工具的不同顯示不同菜單項,如當前工具為 “放大”時右鍵菜單如圖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”的關聯關系,這樣用戶自定義的交互工具對應的菜單就會在地圖窗口中顯示出來。由此可見,地圖窗口動態菜單設計靈活,用戶很容易根據自己的業務需要對菜單內容進行修改,同時也可以增加特定的菜單項。
通過動態菜單技術的采用,TerraMap實現了綜合應用軟件和數據管理軟件菜單的動態修改,也可以根據用戶的業務要求動態修改圖層控制器菜單和地圖窗口的菜單,滿足各種應用對地理信息系統的要求。TerraMap動態菜單技術的采用,大大提高了TerraMap的二次開發效率,加強了TerraMap的可擴充性、可維護性和可裁剪性,并為用戶在TerraMap平臺上進行擴展提供了強有力的支持。
傳統地理信息系統的設計中,把針對不同場景的菜單資源放入源程序中,有多少個場景就會有多少個菜單資源。一旦編碼完成菜單的數量就是定死的,無法進行修改,更不可能根據使用場景的變化作相應的改變,無法在已有的菜單中增加用戶特定的菜單項,給二次開發用戶帶來了很大的不方便。動態菜單技術很好的解決了這些問題,同時具有很強的擴展性。相對于傳統的菜單設計,動態菜單技術具有明顯的技術先進性,可以應用到其它地理信息系統的開發過程中。
[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.]