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