摘要:軍標箭頭是一種軍隊標號,在軍事上有廣泛的應用。本文旨在將軍標箭頭符號應用在森林防火指揮系統等指揮決策系統中。
關鍵詞:森林防火指揮決策系統、軍標箭頭、軍標箭頭庫、抽象工廠設計模式
1.引言
軍標箭頭是一種軍隊標號,軍隊標號是部隊作戰(zhàn)指揮、作戰(zhàn)模擬和其它與軍事相關活動中一種常用的圖形符號。這種圖形符號由簡單的線段、圓弧等稱之為圖元的基本單位組成,并根據實際需要將這些圖形符號粘貼在軍用地形圖和其它形式的地圖上,形成表示敵我雙方的作戰(zhàn)態(tài)勢、戰(zhàn)斗隊形、首長決心、部隊、武器裝備布局等一系列與軍事相關活動的狀態(tài)圖。它是一種軍隊特有的、用圖形符號表示的語言。軍隊標號的繪制本質上是一種示意圖的繪制[1]。
在森林防火撲火指揮決策信息化系統中,必然需要動態(tài)靈活的標注撲火物資、撲火隊伍等的行進方向,使用軍標箭頭可以形象地標注出當前撲火的動態(tài)形勢。
2.系統實現
根據森林防火系統的實際需求,我們抽象出五種軍標箭頭,包括:
CZhChWArrow:粗直叉尾箭頭
CWPWArrow:粗彎平尾箭頭
CWChWArrow:粗彎叉尾箭頭
SimpleArcArrow:簡單弧線尾巴箭頭
SimpleLineArrow:簡單直線箭頭
為每個箭頭設立一個類。每個類包括控制點屬性、init方法等。在每個類中定義控制點的初始時相對關系的算法,以及創(chuàng)建自己的方法和接受編輯的算法。
本系統采用ArcEngine 9.2開發(fā)而成。下面以粗彎平尾箭頭為例說明,箭頭的構造和編輯時的算法。
2.1軍標箭頭類的設計
2.1.1軍標箭頭的控制點設置
根據控制點的作用可以將控制點分三個層次:主控制點(1個)、中軸控制點(2至3個)、形狀控制點(多個)。
每種圖標都由控制點來控制其圖形形狀的,這樣在編輯的時候,點擊拖動控制點后可以控制軍標箭頭形狀的改變。我們將控制點設置為中軸線,這樣編輯的節(jié)點顯示清晰明了,用戶拖動編輯方便。
下面以CWPWArrow(粗彎叉尾)箭頭為例說明控制點的選取和在控制圖形中起到的作用。
我們在此箭頭的中心線上選取三個控制點,如圖上紅色的點所顯示,它們分別是:triTopPt、midMidPt、midBottomPt。
此軍標箭頭圖形的實際控制是由七個段(segment)組成。Segment是ArcEngine中的最小的圖形單元。
圖:組成粗彎叉尾箭頭的七個段
七個段大致分為三角箭頭部分、左右弧段和尾部直線。粗彎叉尾箭頭的控制點如下:
主控制點為(1個):三角箭頭的頂點triTopPt;
中軸控制點(3個):三角箭頭的頂點triTopPt、中軸弧線的中點midMidPt和尾點midBottomPt。
形狀控制點(11個):包括三角箭頭的多個端點,左右弧段的特征點等。
2.1.2使用控制點創(chuàng)建軍標箭頭
控制點賦值完成后,就使用這些控制點構建組成軍標箭頭的多個段(segment),然后將這些段構建成polyline。要想使軍標箭頭具有多種填充色彩,必須將polyline轉換成polygon。這個轉換在PolylineToPolygon函數中實現,轉換主要通過Geometry庫的IGeometryCollection來實現。
系統允許用戶在地圖上點擊畫軍標箭頭,也允許用戶實例化軍標箭頭類,為中軸控制點賦值,然后直接調用MilArrowFactory類中軍標箭頭的創(chuàng)建方法,讓開發(fā)者在運行時在地圖上創(chuàng)建并畫出軍標箭頭。
2.2軍標箭頭編輯的實現
軍標箭頭支持拖動編輯和屬性表編輯兩種方式。
拖動編輯的主要思路是,點選軍標箭頭,獲得此箭頭的控制點信息,拖動控制點,利用新的控制點重畫軍標。
屬性表編輯的主要思路是,點選軍標箭頭,點擊鼠標右箭選取“屬性表”,然后再屬性表格中更改此箭頭的控制點坐標、符號、填充色彩等屬性,完成更改。
2.3軍標庫的調用
軍標庫設計、編碼、打包成功后,可以很容易的實現軍標的創(chuàng)建、編輯,所需的代碼簡短固定。按照軍標庫的設計,實現了五種箭頭的類后,將箭頭類實例化,在地圖上點擊,就可以畫一個軍標箭頭。
畫粗彎平尾箭頭的代碼如下,其他的類似。
IPoint mousePt = new PointClass();
mousePt = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
CWPWArrow cwpwOb = new CWPWArrow();
cwpwOb.triTopPt = mousePt;
pPoly = cwpwOb.createCWChWArrow();
pEle.Geometry = (IGeometry)pPoly;
elepro = (IElementProperties)pEle;
elepro.Name = “cuWanPinWei”;
pGc.AddElement(pEle, 0);
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,
(object)pEle, 1);
this.axMapControl1.ActiveView.Refresh();
3.在森林防火中的應用
森林防火系統是典型的資源類行業(yè)的信息化應用,gis在森林防火中發(fā)揮著重要的作用。在森林防火系統中的撲火指揮子系統中,使用本系統描述的軍標箭頭庫標注撲火隊伍的行進方向,支持拖動編輯,地圖表達清晰明了、形象直觀。
圖:軍標箭頭在數字線劃地圖(DLG)中的使用示意
參考文獻
[1]、楊杭,《矢量軍標與專題圖的生成技術研究及實現""》[D],保存地點:哈爾濱工業(yè)大學計算機與科學學院,2002。
[2]、中國森林防火網 http://www.slfh.gov.cn/cffm_web/index.asp
[3]、梁文娟,《抽象工廠模式在.net多層分布式程序中的應用》[J],《計算機時代》,2006年第3期;
作者簡介:
費中強:1977,安徽肥東縣,合肥工業(yè)大學碩士,安徽安聯科技股份有限公司,研究方向為GIS研究與數字化測繪;
王江虹:1972,安徽省合肥市,安徽機電學院本科,中國農業(yè)銀行安徽省分行,應用電子專業(yè)