|
[摘 要]:軍事標(biāo)圖設(shè)計(jì)采用GIS組件MapObjects和軍標(biāo)庫(kù)相結(jié)合的解決方案。軍標(biāo)庫(kù)實(shí)現(xiàn)軍標(biāo)的管理和繪制,并將軍標(biāo)庫(kù)封裝成動(dòng)態(tài)鏈接庫(kù),提供軍標(biāo)繪制接口。在點(diǎn)軍標(biāo)繪制函數(shù)中給定其繪制的位置點(diǎn),即可將軍標(biāo)繪制至需要的位置。函數(shù)軍標(biāo)繪制函數(shù)接口中預(yù)留的參數(shù)為數(shù)組,用來存儲(chǔ)用戶輸入的控制點(diǎn)。軍標(biāo)屬性設(shè)置采用鼠標(biāo)選擇或通過屬性對(duì)話框交互設(shè)置。系統(tǒng)通過數(shù)據(jù)管理、態(tài)勢(shì)標(biāo)繪及GIS輔助模塊等實(shí)現(xiàn). 關(guān)鍵詞:MapObjects;軍標(biāo)庫(kù):軍事標(biāo)圖系統(tǒng);點(diǎn)軍標(biāo):函數(shù)軍標(biāo) 0 引言 作戰(zhàn)指揮自動(dòng)化要求軍事標(biāo)圖必須采用現(xiàn)代化標(biāo)圖工具,以提高成圖速度,滿足作戰(zhàn)指揮要求。故采用GIS組件MapObjects和軍標(biāo)庫(kù)相結(jié)合的軍事標(biāo)圖系統(tǒng),其中軍標(biāo)庫(kù)用于存儲(chǔ)和管理各種軍標(biāo),MapObjiects實(shí)現(xiàn)GIS功能,系統(tǒng)通過VC編程實(shí)現(xiàn)軍標(biāo)庫(kù)設(shè)計(jì)并提供獲取軍標(biāo)庫(kù)中軍標(biāo)接口。 1 系統(tǒng)設(shè)計(jì) 1.1軍標(biāo)庫(kù)設(shè)計(jì)
其設(shè)計(jì)思路根據(jù)軍事標(biāo)圖的實(shí)際使用情況和計(jì)算機(jī)實(shí)現(xiàn)需要,把不依地圖比例尺表示的小面積地物或點(diǎn)狀符號(hào)歸為點(diǎn)軍標(biāo):而把那些有地理范圍意義和形態(tài),且能作為作戰(zhàn)需要的軍標(biāo)則歸為函數(shù)軍標(biāo)。點(diǎn)軍標(biāo)符號(hào)由一些基本的圖元(如點(diǎn)、直線、矩形、與圓)構(gòu)成,圖形比較固定,有明確的定位點(diǎn)和方向性,而且在設(shè)計(jì)時(shí)留有一定“自由度”,允許用戶修改軍標(biāo)大小、方向、顏色等屬性;函數(shù)軍標(biāo)與點(diǎn)軍標(biāo)不同的是,單純靠基本圖元不能完成它的繪制,需要幾個(gè)控制點(diǎn)擬合成曲線形成。 軍標(biāo)庫(kù)同時(shí)還將軍標(biāo)庫(kù)封裝成動(dòng)態(tài)鏈接庫(kù),提供軍標(biāo)繪制接口,供其他應(yīng)用程序調(diào)用。點(diǎn)軍標(biāo)的圖形比較固定,所以在點(diǎn)軍標(biāo)繪制函數(shù)中給定軍標(biāo)需要繪制的位置點(diǎn),即可將軍標(biāo)繪制至需要位置。而函數(shù)軍標(biāo)的繪制函數(shù)則需給定幾個(gè)控制點(diǎn)才可完成軍標(biāo)的繪制。因此函數(shù)軍標(biāo)繪制函數(shù)接口中預(yù)留參數(shù)為一個(gè)數(shù)組,用來存儲(chǔ)用戶輸入的控制點(diǎn)。 1.2系統(tǒng)結(jié)構(gòu) 系統(tǒng)采用軍標(biāo)庫(kù)實(shí)現(xiàn)對(duì)各種軍標(biāo)的存儲(chǔ)和管理,并提供軍標(biāo)庫(kù)的接口,軍標(biāo)標(biāo)繪時(shí)通過隱示加載封裝了軍標(biāo)的DLL文件,調(diào)用軍標(biāo)繪制函數(shù),實(shí)現(xiàn)軍標(biāo)繪制。 軍標(biāo)屬性設(shè)置采用2種方式:①通過鼠標(biāo)選擇軍標(biāo),即借助鼠標(biāo)對(duì)軍標(biāo)的操作來完成軍標(biāo)的幾何屬性設(shè)置;②通過屬性對(duì)話框進(jìn)行交互設(shè)置。 采用鼠標(biāo)選擇方式較符合通用繪圖程序?qū)D形的操作,考慮到軍標(biāo)與一般圖形的屬性區(qū)別,添加1個(gè)屬性對(duì)話框?qū)崿F(xiàn)軍標(biāo)的其它非幾何屬性如軍標(biāo)顏色、柔化等設(shè)置。最后還需為標(biāo)圖人員提供一些輔助決策的功能。
數(shù)據(jù)管理模塊主要管理底圖數(shù)據(jù)和態(tài)勢(shì)圖,底圖數(shù)據(jù)管理主要指底圖數(shù)據(jù)的加載及顯示。態(tài)勢(shì)圖管理包括態(tài)勢(shì)圖(即已標(biāo)好軍標(biāo)的底圖)的打開、保存。態(tài)勢(shì)標(biāo)繪模塊完成對(duì)軍標(biāo)的一些基本操作。標(biāo)繪軍標(biāo)至地圖上、對(duì)軍標(biāo)進(jìn)行選中、拖動(dòng)、旋轉(zhuǎn)、刪除等編輯功能和軍標(biāo)組合選擇及取消。GIS輔助模塊實(shí)現(xiàn)一些基本的GIS功能。 2 系統(tǒng)實(shí)現(xiàn) 系統(tǒng)采用VisualC++與MapObjects結(jié)合模式實(shí)現(xiàn)。通過MapObjects實(shí)現(xiàn)對(duì)底圖的添加、控制及實(shí)現(xiàn)一些基本的GIS功能。通過VC編程語句實(shí)現(xiàn)態(tài)勢(shì)標(biāo)繪模塊,以及設(shè)計(jì)友好、靈活的用戶界面來顯示信息和數(shù)據(jù)庫(kù)連接功能。 2.1數(shù)據(jù)管理模塊 底圖加載可通過設(shè)置map控件屬性進(jìn)行加載,也可采用編程方式實(shí)現(xiàn)動(dòng)態(tài)加載。由于標(biāo)圖人員標(biāo)圖時(shí)需動(dòng)態(tài)加載圖層,因此,采用文件打開方式進(jìn)行動(dòng)態(tài)加載。執(zhí)行程序中在文件菜單下打開地圖,選擇要添加的Shpfile文件即可完成地圖加載。底圖顯示控制是由MapObjects的圖層管理功能實(shí)現(xiàn),即設(shè)置圖層Visible屬性控制圖層的顯示與否。 打開態(tài)勢(shì)圖:先導(dǎo)入底圖、讀出保存的軍標(biāo)信息。包括軍標(biāo)的個(gè)數(shù)及每個(gè)軍標(biāo)ID、軍標(biāo)類型、控制點(diǎn)經(jīng)緯度坐標(biāo)和屬性信息、將每個(gè)軍標(biāo)的經(jīng)緯度坐標(biāo)轉(zhuǎn)換成設(shè)備坐標(biāo),按軍標(biāo)類型,調(diào)用繪制函數(shù)標(biāo)繪至底圖上。保存態(tài)勢(shì)圖:保存軍標(biāo)的個(gè)數(shù)及每個(gè)軍標(biāo)的經(jīng)緯度坐標(biāo)和屬性信息,保存底圖。 2.2態(tài)勢(shì)標(biāo)繪模塊 (1)軍標(biāo)標(biāo)繪 點(diǎn)軍標(biāo)由基本的圖形單元(如點(diǎn)、直線、矩形、圓等)組成,標(biāo)繪方式較固定,無特殊變化,如副連長(zhǎng)軍標(biāo)由一個(gè)圓和一些直線組成,如圖3。點(diǎn)軍標(biāo)沒有地理范圍意義,因此當(dāng)?shù)貓D縮放時(shí)不需隨地圖聯(lián)動(dòng),只需記錄軍標(biāo)繪制點(diǎn)的經(jīng)緯度坐標(biāo)即可。 函數(shù)軍標(biāo)因具有地理范圍意義,在地圖上代表為1個(gè)面對(duì)象,因此軍標(biāo)的繪制必須確定生成軍標(biāo)的若干控制點(diǎn),擬合成閉合曲線,形成軍標(biāo)的輪廓,最終繪制出函數(shù)軍標(biāo)。如生成進(jìn)攻箭頭圖標(biāo),其控制點(diǎn)分為主控制點(diǎn)和從控制點(diǎn)2類,主控制點(diǎn)由標(biāo)圖人員手工輸入,從控制點(diǎn)由繪圖算法從主控制點(diǎn)中生成。主控制點(diǎn)為4個(gè)(p1,p2,p3,p4)。
算法思路:①連接p1,p2取其中點(diǎn),過中點(diǎn)、p3、p4三點(diǎn),擬合一條Bezier曲線作為箭頭圖標(biāo)的中軸線;②確定箭頭箭尖p5,p6點(diǎn),取中軸線長(zhǎng)度的六分之一點(diǎn)pp過pp作中軸線的垂線,由p4出發(fā)作一條與中軸線夾角為30度的直線交點(diǎn)為p5,同理得p6點(diǎn);③確定p7,p8點(diǎn),取pp點(diǎn)與p4距離的四分之三點(diǎn)作中軸線的垂線, 由p4點(diǎn)出發(fā)作一條與中軸線夾角為15度的直線交點(diǎn)為p7同理得p8:④連接p7,p2擬合成一條Bezier曲線,連接p8、p1擬合成一條Bezier曲線。 在標(biāo)圖結(jié)束后還可通過調(diào)整p1,p2,p3,p4點(diǎn)對(duì)繪制好的箭頭進(jìn)行改變,直至符合要求。 (2)軍標(biāo)編輯 軍標(biāo)編輯包括對(duì)軍標(biāo)的選中、移動(dòng)、定點(diǎn)編輯、旋轉(zhuǎn)及軍標(biāo)線型、顏色設(shè)置等。軍標(biāo)定點(diǎn)編輯步驟:①在MouseDownMap事件中判斷鼠標(biāo)停留位置:②在MouseMoveMap中采取異或繪制模式繪制軍標(biāo)在拖動(dòng)中的狀態(tài):⑧鼠標(biāo)放開時(shí)計(jì)算出新定位點(diǎn)坐標(biāo)及軍標(biāo)的高度和寬度:④刷新地圖,重繪軍標(biāo)并判斷軍標(biāo)是否處于選中狀態(tài),若是,則繪制軍標(biāo)包圍框及熱點(diǎn)??紤]到函數(shù)軍標(biāo)與點(diǎn)車標(biāo)的實(shí)現(xiàn)方法不同,點(diǎn)軍標(biāo)的繪制只需給該軍標(biāo)的定位點(diǎn)即可,而函數(shù)軍標(biāo)需幾個(gè)控制點(diǎn)才能實(shí)現(xiàn)。因此對(duì)函數(shù)軍標(biāo)的定點(diǎn)編輯既可用點(diǎn)軍標(biāo)實(shí)現(xiàn),也可用選中函數(shù)軍標(biāo)的控制點(diǎn),對(duì)其進(jìn)行拖動(dòng)實(shí)現(xiàn)。 軍標(biāo)屬性的設(shè)置可由屬性對(duì)話框與選中的軍標(biāo)進(jìn)行交互。 當(dāng)軍標(biāo)處于選中狀態(tài)時(shí),對(duì)話框中顯示的屬性為選中的軍標(biāo)屬性。標(biāo)圖人員可用鼠標(biāo)選中軍標(biāo)對(duì)其進(jìn)行一系列操作以完成對(duì)軍標(biāo)的修改,同時(shí)對(duì)話框中軍標(biāo)屬性也作相應(yīng)修改。也可直接在對(duì)話框中修改軍標(biāo)屬性,顯示在底圖上的軍標(biāo)也做同樣的處理。 (3)GIS輔助模塊 GIS輔助模塊提供圖上量算和空間查詢2個(gè)功能。MapObjiects提供一組可方便進(jìn)行圖上量算工具。首先記錄鼠標(biāo)在屏幕上點(diǎn)擊的點(diǎn),將每一點(diǎn)都轉(zhuǎn)化為地圖上的點(diǎn)。再按順序把這些點(diǎn)存儲(chǔ)到CMoPoints對(duì)象中。依次計(jì)算CMoPoints中相鄰2點(diǎn)間的距離,即利用CMoPoint對(duì)象的DistanceTo方法計(jì)算出2點(diǎn)的距離??臻g查詢是一組空間目標(biāo)中的定位或查找相應(yīng)的目標(biāo)。分為定位和范圍查找2種。定位是識(shí)別所詢問目標(biāo)所在的區(qū)域。范圍查找是檢索或統(tǒng)計(jì)在詢問域的相應(yīng)空間目標(biāo)。即給定鼠標(biāo)點(diǎn)位,檢索出離它最近的空間對(duì)象,并顯示其屬性。首先利用鼠標(biāo)在屏幕上點(diǎn)擊獲得用于檢索的點(diǎn),將其轉(zhuǎn)換為地圖上的點(diǎn)。再構(gòu)造以該點(diǎn)為中心,長(zhǎng)寬各2個(gè)空間坐標(biāo)單位的矩形。利用構(gòu)造好的矩形結(jié)合SearchaShape方法來查詢目標(biāo)。 3 結(jié)語 基于MapObjects的軍事標(biāo)圖系統(tǒng)為作戰(zhàn)指揮提供地理信息和作戰(zhàn)標(biāo)圖的服務(wù)功能,集成了從底圖的加載、軍標(biāo)標(biāo)繪、軍標(biāo)編輯及態(tài)勢(shì)圖的輸出等一系列過程。該系統(tǒng)應(yīng)用于某部門的標(biāo)圖作業(yè),獲得較好的應(yīng)用效果。 |
|