摘 要:軍標符號庫的設計與實現是軍事地理信息系統建設的一項重要基礎性工作,是軍事指揮自動化的必然要求。基于面向對象的思想進行軍標符號的圖元設計;實現軍標符號庫的數據庫構建與數據管理;提出并實現基于動態鏈接庫封裝的TreeView軍標可視化方法及接口,增強了系統的可移植性。
關鍵詞:軍標符號庫;MGIS;面向對象;軍事標圖
中圖分類號:TP319 文獻標識碼:A 文章編號:1004-373X(2008)02-101-03
Design and Application Research of Military Symbol Database of MGIS
MEI Xia,HAO Jianxin,TANG Xiaoan,LI Huan
(School of Electronics Science and Engineering,National University of Defense Technology,Changsha,410073,China)
Abstract:Design and realization of military symbol database is an important basic task of military geographical information system construction.It is the inevitable requirement of military commander automation.The paper carries out the graphical element design for military symbols based on the object-oriented design method,having realized the construction of military symbol database and data administration.It proposes and achieves the encapsulation of TreeView military symbol visualization method and interface with DLL dynamic link library technique,which increases the transplantation of the system.
Keywords:military symbol database;MGIS;object-oriented;military plotting
1 引 言
軍事標圖[1]是在地圖或其他專用底圖上以規定的符號、文字和顏色標繪軍事情況的作業。軍事標圖是傳輸軍事信息的一種特有語言,是為指揮員展示戰場態勢的一種重要手段。隨著計算機技術的應用,如何利用計算機技術加快軍事標圖流程逐漸成為軍隊信息化建設中高度關注的問題。而軍標數據庫的構建及應用作為軍事標圖系統最基礎的核心內容,具有重要和迫切的研究意義。
由于軍事領域是一個非常特殊的領域,國外計算機軟件公司的通用標圖軟件不能直接用于該領域。目前,國內某些指揮自動化系統中已有軍標庫管理的功能。但有的只適用于軟件開發人員對軍標庫進行管理,有的最終用戶雖能對軍標庫進行管理,但從功能和操作上還不盡人意,嚴重影響著軟件的實用化程度。隨著現代化戰爭科技化水平越來越高,綜合性越來越強,制作一個軍標數據符合國家標準、符號制作功能強大、管理方式靈活、系統移植性強、操作方便的軍標符號編輯系統是軍事指揮自動化的必然要求。
本文針對上述需求,依據GJB840-90和GJB872-91 2個國家軍用標準[2],基于VC++ 6.0開發平臺,運用面向對象的思想進行軍標符號的圖元設計;構建了軍標數據庫模型,采用ADO數據訪問技術對Access軍標符號庫進行數據管理;提出了基于動態鏈接庫的樹狀列表視圖(TreeView)應用方法。具有重要的應用價值。
2 軍標符號的圖元設計
軍標符號數據量巨大,不同的軍標符號有不同的結構特點和構圖規律。這里采用圖元法[3] 繪制軍標。根據面向對象的數據模型[4]抽象出11個圖元類:Bezier曲線、閉合Bezier曲線、直線、折線、多邊形、橢圓、矩形、圓、圓弧、圓角矩形、文本。同時將這些類的共同屬性結構和操作方法歸結成1個更高層次、更具一般性的類[CD2]圖元類(CUnit)。圖元集合構成了所有符號的圖形基礎。1個符號就是一個或多個圖元集合的組合。這樣當繪制軍標時,通過符號編輯器中提供的圖元繪制工具可以方便、快捷地添加和修改軍標符號,徹底擺脫程序的編寫過程,便于以后的大規模應用。
3 軍標符號庫的組織結構
3.1 符號庫的管理
為了滿足軍標符號種類繁多、形態各異的要求,設計了三級管理模式,實現軍標符號分類管理。符號編碼是識別符號的惟一標準,目前我國對于符號的編碼沒有統一的標準,而國家軍用標準中的軍標符號也未進行編碼,因此軍標符號庫系統采用自定義編碼。為了實現編碼的跨平臺使用,符號編碼定義為一級分類2位;二級分類4位;三級分類6位。編碼數字依次反映了符號的分類和制作順序:一級分類編碼按照分類順序依次編碼;二級分類編碼前2位為所屬的一級分類編碼,后2位代表分類順序;三級分類編碼前4位為所屬的二級分類編碼,后2位代表符號制作順序。
3.2 符號庫的存儲機制
目前許多GIS軟件的符號制作系統都采用文件管理方式,索引方法也采用文件索引。這種方式無論是符號的共享還是數據的統一管理都存在缺陷。而數據庫對數據的管理具有持久性、有效性和共享性的特點,極大地減少了數據的冗余,消除了數據不一致的隱患,提高了存儲和查詢效率[5]。因此軍標符號庫采用Access數據庫進行符號存儲。圖1用E-R模型描述了軍標數據庫的數據模型。E-R模型映射到關系數據庫定義時,一個實體類型對應一張表,每張表采用主鍵索引。
3.3 符號庫的數據管理
軍標符號庫的數據管理是指數據庫中符號的建立、修改、刪除、顯示和查詢等多種功能。這里軍標符號庫利用外接Access數據庫強大的數據管理功能,采用ADO數據訪問方法對數據庫進行訪問和維護。下面詳細介紹軍標數據庫數據管理部分的實現:
(1) 數據庫連接:創建一個ADO的連接類,包含了基本的連接、斷開數據庫,記錄查詢等操作。
class ADOConnention
{
main attribute:
ConnectionDatabase()[JY]//連接數據庫
[JY]//傳入查詢字符串;執行查詢,返回結果集指針
GetRecordSet(參數:strSQL)
[JY]//傳入SQL語句;執行SQL語句
ExecuteSQL(參數:strSQL)
ExitConnect()[JY]//斷開數據庫連接
}
(2) 表維護:為軍標庫每一張表創建1個類,包含對表的插入、刪除、更新等基本操作。下面以軍標一級分類表類為例:
class MSDBTable1
{
main attribute:
[JY]//傳入一級軍標ID和名稱;向軍標一級分類表中插入新記錄
InsertRecord(參數1:MS_ID;參數2: MS_Name)
[JY]//傳入一級軍標ID;更新軍標一級分類表中記錄
UpdateRecord(參數:MS_ID)
[JY]//傳入一級軍標ID;刪除軍標一級分類表中記錄
DeleteRecord(參數:MS_ID)
Load_Record()[JY]//批量讀取表中記錄
[JY]//傳入軍標一級分類ID;判斷是否存在相同記錄
IsSameRecord(參數:MS_ID)
}
(3) 軍標查詢:提供根據軍標名稱和軍標屬性2種方式查詢,支持精確和模糊查詢。如圖2所示:
(4) 軍標管理:完成軍標的新增、修改、刪除操作。下面以新增軍標為例,如圖3所示:
3.4 符號庫中軍標對象的訪問
這里開發的軍標符號庫系統中的軍標是以自定義的文件格式存儲的,有特定的序列化方式,在數據庫中以OLE對象的方式存儲成二進制流。數據庫處理圖像文件這種大型的二進制數據,在ADO2.5版本以前,是利用ADO的Field對象中的GetChunk和AppendChunk兩種方法實現文件的存取。但是用這2個函數來實現大型二進制數據在數據庫中的存取非常繁瑣。在ADO2.5版本以后添加了Stream對象,可以用來實現大型文件的存取。通過他可以更容易地操作數據庫中的大型二進制數據 [6]。本文采用這種方法,實現步驟如下:
存儲文件到軍標數據庫:
Step 1:定義Recordset指針和Stream指針,并生成實例;
Step 2:打開Recordset對象,根據查詢要求,獲得滿足條件的軍標記錄集;
Step 3:打開Stream對象,并從臨時文件中讀取需要的軍標文件;
Step 4:把文件存儲到數據庫中對應的軍標記錄的軍標對象字段;
Step 5:關閉Stream對象和Recordset對象,退出數據庫連接;
讀取軍標對象到臨時文件夾:
Step 1~2:步驟同上;
Step 3:打開Stream對象,從滿足條件的軍標記錄的軍標對象字段中取得數據并存儲到臨時文件夾;
Step 4:關閉Stream對象和Recordset對象,退出數據庫連接。
4 軍標符號庫的應用與擴展
4.1 軍標符號庫對專用軍標庫的支持
本文中的軍標符號庫中的軍標是以國家頒布的軍用標準為基礎的。但是,各個軍事領域都有自己專有的軍標符號,因此軍標符號庫也考慮到對專用軍標庫的支持,實現多套符號系統的編輯和管理。處理步驟如下:
Step 1:將專用軍標數據庫拷貝到指定的文件目錄下;
Step 2:檢查用戶輸入,在文件目錄下搜索與用戶輸入相同的數據庫名,返回搜索結果;
Step 3:若未找到相應數據庫,提示用戶錯誤信息;若找到此數據庫,通過ADOConnection類的ConnectionDatabase方法連接此數據庫。
4.2 軍標符號庫TreeView結構的實現
軍標符號庫實現了軍標符號的編輯與存儲,是軍標符號的管理系統。他與輔助指揮系統、戰場態勢標繪系統等軍事指揮系統相結合,是現代化軍事指揮和仿真模擬訓練的必然要求和趨勢。但是目前國內開發的許多軍標符號庫系統沒有對相關系統支持的接口,造成系統集成困難,可移植性差。為了改善這種情況,將軍標符號庫與戰場態勢標繪系統相結合;考慮到今后系統的應用與擴展,為了增加程序的靈活性、可維護性以及代碼的可重用性;利用動態鏈接庫封裝TreeView結構的軍標符號庫,在應用程序中只要調用動態庫中的函數即可執行相應的功能。
(1) 創建MSDBTreeView類
類包含多個樹頁面,每個樹頁面對應軍標一級分類表中的一個一級軍標。然后在每個樹頁面中添加此軍標名稱下屬的子結點名稱。類結構定義如下:
class MSDBTreeView
{
main fields:
字符串 TreeViewID [JY]//區分各個樹頁面的標志
main attribute:
//傳入樹頁面標志和TreeView控件指針;向樹頁面中添加軍標節點名稱
AddtoTree(參數1: TreeViewID;參數2: m_tree )
//傳入選中TreeView節點名稱;從數據庫中讀取節點軍標記錄,顯示軍標對象
ShowMSObject(參數:NodeName)
CreateTreeView( )[JY]//讀取數據庫,生成樹狀目錄
}
(2) TreeView結構的軍標符號庫的封裝
動態鏈接庫(DLL)是共享函數庫的可執行文件。將上面實現的TreeView結構的軍標符號庫封裝成1個函數庫,制作成DLL,他包含了全局數據、編譯過的函數和資源。使用 DLL 有助于促進代碼的模塊化、代碼重用、內存的有效使用和減少所占用的磁盤空間,為今后的軟件開發提供了便利條件。因此,使用動態鏈接庫封裝TreeView結構的軍標符號庫大大增強了系統的可移植性,方便了其他系統共享符號庫信息。
5 實驗結果及分析
圖4顯示了戰場態勢標繪系統集成軍標編輯系統的綜合效果圖。圖左的紅色方框為TreeView結構的軍標符號庫。通過左上角菜單“軍標”→“連接數據庫”,可以選擇需要連接的數據庫名,確認后在TreeView中顯示其軍標結構。選中軍標名稱可在右面的態勢圖中繪制軍標。系統界面操作簡單,標繪信息清晰。采用動態鏈接庫封裝TreeView結構的軍標符號庫的應用策略,便于軍標符號庫的移植和與相關系統的集成。
6 結 語
本文對MGIS中軍標符號庫的圖元設計和組織結構進行討論。基于面向對象的數據模型,采用圖元法繪制軍標,方便了軍標繪制,易于系統的大規模應用。運用ADO訪問Access數據庫的方法代替傳統的文件管理方式實現
對軍標符號庫的管理,提高了數據存儲和查詢的效率。同時考慮到軍標符號庫的今后擴展應用,方便與其他系統的符號共享,增加系統的靈活性,提出了用動態鏈接庫的方式封裝TreeView結構的軍標符號庫。以上思想已應用于這里的MGIS符號編輯系統和戰場態勢標繪系統。實踐證明,獲得了較好的結果。
參 考 文 獻
[1]蔣定定,趙友庚.軍事標圖系統的自動化設計[J].兵工自動化,2004,23(3):15-17.
[2]李兵,葉海建,方金云,等.圖元法符號庫的設計思想研究[J].計算機工程與應用,2005(17):36-37.
[3]王永明,林行剛.軍用電子地圖系統[CD2]一種引人注目的多媒體信息系統[J].小型微型計算機系統,1995,16(8):12-18.
[4]劉云華,唐蘭蘭.面向對象思想的GIS地理數據庫設計初探[J].測繪與空間地理信息,2006,29(2):61-64.
[5]鞠時光.對象關系型數據庫管理系統的開發技術[M].北京:科學出版社,2001.
[6]電腦編程技巧與維護雜志社.Visual C++編程技巧典型案例解析[CD2]圖形圖像處理與數據庫篇[M].北京:中國電力出版社,2005.
[7]孫偉,賈丹平,傘宏力.基于VC++6.0視圖-文檔模式下的串口通訊系統的研究[J].現代電子技術,2006,29(22):88-89,95.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。