本發(fā)明涉及機(jī)載矢量數(shù)字地圖軟件運行時實時繪制線狀符號的方法。
背景技術(shù):
機(jī)載數(shù)字地圖是現(xiàn)代飛機(jī)航電系統(tǒng)的重要組成部分。線狀符號是地圖數(shù)據(jù)符號化的重要內(nèi)容,用來表達(dá)地理空間上沿某個方向延伸的線狀或帶狀特征地理要素,如河流、道路、運輸線、國界線等。由于線狀符號通常由數(shù)量不等的定位點組成的光滑曲線來描述,其形狀的連續(xù)變化可以產(chǎn)生實線和間斷線,也可用多種符號疊加和組合的方式構(gòu)成復(fù)雜符號,因而線狀符號的組織和填充都需要大量運算。
在機(jī)載環(huán)境下,如何利用有限的硬件資源,平衡線狀符號的外觀、符號繪制靈活性和繪制效率,是線狀符號繪制的核心問題?,F(xiàn)有的矢量數(shù)字地圖軟件通常采用三種方法:一是純函數(shù)繪制,按符號表示的地物種類分類,并為每一類符號寫一個繪制函數(shù);二是縱向疊加圖元法,將復(fù)雜線狀符號縱向拆分成多個基本單元,按順序分別從符號的起點到終點繪制出各單元符號,完成圖元的縱向疊加;三是橫向循環(huán)圖元法,將線狀符號定義為一個復(fù)雜循環(huán)單元畫刷,沿線步進(jìn)填充繪制,形成連續(xù)的線狀符號。純函數(shù)繪制方法速度較快,但符號可編輯性和維護(hù)性差,用戶定制和修改十分困難;縱向疊加圖元法通過基本單元的組合形成復(fù)雜符號,使用靈活,但同一條線拆分成基本單元后,需要多次繪制,同時基本單元之間需要大量計算位置依賴關(guān)系,繪制效率較低;橫向循環(huán)圖元法使用一個復(fù)雜循環(huán)單元步進(jìn)繪制,從起點到終點單次繪制即可完成整條線符號,但需要對每次步進(jìn)的參數(shù)進(jìn)行計算,機(jī)載環(huán)境下繪制效率也較低。
技術(shù)實現(xiàn)要素:
為克服機(jī)載環(huán)境硬件資源運算和渲染能力較弱的問題,本發(fā)明提供一種線狀符號繪制方法,對線要素圖元合理拓展簡化,精簡運算復(fù)雜度,實現(xiàn)快速繪制線狀符號的方法,提高線狀符號使用的靈活性和繪制效率。
一種線狀符號繪制方法,包含以下步驟:
步驟一、以組成線要素的線段為矩形中心線,往垂直于線段的方向拓展,形成連續(xù)又獨立的一組矩形圖元;
步驟二、當(dāng)相鄰線段為轉(zhuǎn)角處時,在相鄰線段的裂縫處,以w/2為長度在轉(zhuǎn)角平分線上插入1個點形成四邊形圖元;其中w為矩形圖元的寬度;
步驟三、計算各矩形圖元和四邊形圖元的角點坐標(biāo);
步驟四、創(chuàng)建并生成以矩形圖元和四邊形圖元為基本元素的顯示列表,根據(jù)顯示列表中矩形圖元和四邊形圖元的角點坐標(biāo)填充紋理。
優(yōu)選地,所述步驟四中還包含當(dāng)相鄰線段為轉(zhuǎn)角處時,利用模版緩沖區(qū)消除矩形圖元的重疊現(xiàn)象。
優(yōu)選地,所述一種線狀符號繪制方法還包含畫面縮放時,通過雙數(shù)據(jù)緩存,在后臺重新執(zhí)行步驟一至四,再通過緩存交換到前臺。
本發(fā)明的有益效果為:通過對線要素圖元合理拓展簡化,以較少的運算次數(shù),滿足線狀符號繪制需求,有效減少對計算資源的占用,兼顧符號使用靈活性,有效提高機(jī)載矢量數(shù)字地圖的繪圖效率,效果良好,值得推廣。
附圖說明
圖1為線段矩形圖元拓展示意圖;
圖2為線轉(zhuǎn)角四邊形圖元簡化示意圖;
圖3為矩形圖元參數(shù)計算示意圖;
圖4為圖元快速組織與繪制示意圖;
圖5為本發(fā)明所述一種線狀符號繪制方法的流程示意圖。
具體實施方式
為了更好地理解本發(fā)明,下面通過附圖和實施例對本發(fā)明作進(jìn)一步詳細(xì)說明。
如圖5所示,一種線狀符號快速繪制方法,包括以下步驟:線段矩形圖元拓展、線轉(zhuǎn)角四邊形圖元簡化、圖元參數(shù)快速計算、圖元快速組織與繪制。
(一)線段矩形圖元拓展,該方法以組成線要素的線段為矩形中心線,往垂直于線的方向拓展,形成連續(xù)又獨立的一組矩形圖元。
如圖1所示的矢量線要素有n個組成節(jié)點,n個節(jié)點可以形成n-1條線段。若線符號寬為w,則可由n-1條線段拓寬形成n-1個矩形,線段可形成矩形□A1B1C1D1,線段可形成矩形□A2B2C2D2……矩形長為對應(yīng)線段的長度,寬為線符號的寬度w。
(二)線轉(zhuǎn)角四邊形圖元簡化,該方法在當(dāng)相鄰線段為轉(zhuǎn)角處時,在相鄰線段的裂縫處,以w/2為長度在轉(zhuǎn)角平分線上插入1個點形成四邊形圖元;其中w為矩形圖元的寬度
如圖2所示,按步驟一所拓展的矩形圖元之間存在裂縫,影響線符號的視覺效果,若在裂縫處做圓角平滑會插入大量點,影響線的繪制效率,所以本方法在線轉(zhuǎn)角處,采用四邊形圖元簡化,利用線段節(jié)點和相鄰矩形圖元的角點,在轉(zhuǎn)角平分線上插入1個點形成四邊形圖元,
(三)圖元參數(shù)快速計算,該方法通過空間幾何變換,利用矢量旋轉(zhuǎn)和距離近似運算算法快速計算各矩形圖元和四邊形圖元的角點坐標(biāo)。
如圖3所示,設(shè)點L1的坐標(biāo)為(xL1,yL1),點L2的坐標(biāo)為(xL2,yL2),線段的長度為h,線符號寬度為w,角∠B1L1L2為直角。
矢量:
而:
其中:
由于:
cos(90°)=0,sin(90°)=1
代入點L1和L2的坐標(biāo)可得到點B1的坐標(biāo)為:
在計算點B1的坐標(biāo)過程中,只有簡單的四則運算,沒有復(fù)雜計算,可以大大提高計算速度。矩形其它點的坐標(biāo)可以用類似的方法計算。
點A1的坐標(biāo)為:
點C1的坐標(biāo)為:
點D1的坐標(biāo)為:
線轉(zhuǎn)角四邊形的頂點中,只需要計算新插入的角平分線上的點Tn的坐標(biāo),圖2中,點p為ΔC1L2B2角平分線與邊C1B2的交點,點p的坐標(biāo)為:
xp=(xc1+xb2)/2
yp=(yc1+yb2)/2
線段的長度為
簡化為(xp-xL2)+(yp-yL2)
則點T1的坐標(biāo)為:
xT1=xL2+w·lpL2·(xp-xL2)/2
yT1=y(tǒng)L2+w·lpL2·(yp-yL2)/2
在此計算過程中,也只有簡單的四則運算。
(四)圖元快速組織與繪制,該方法根據(jù)計算的線段矩形圖元和轉(zhuǎn)角四邊形圖元的坐標(biāo),創(chuàng)建并生成以四邊形為基本元素的顯示列表,在矩形圖元和四邊形圖元中填充紋理。將線狀符號提取循環(huán)段的形狀、色彩、尺寸和圖案,生成基本紋理圖元。以線的起點為紋理初始坐標(biāo),以累積線段長為下一節(jié)點紋理坐標(biāo),紋理坐標(biāo)不斷累加,利用紋理環(huán)繞時可選擇自動重復(fù)的特性,在沿線方向設(shè)置紋理重復(fù)環(huán)繞,在繪制顯示列表時,使符號紋理單元自動沿線循環(huán)填充,形成符合視覺要求的線狀符號,如圖4所示。畫面縮放時,通過雙數(shù)據(jù)緩存,在后臺重新計算線圖元參數(shù),再通過緩存交換到前臺,實現(xiàn)圖元縮放效果的平滑。在繪制圖元時,使用模版緩沖區(qū),消除線轉(zhuǎn)角時矩形圖元的重疊現(xiàn)象,優(yōu)化顯示效果。