基于GDI+處理注記與同色符號壓蓋關系的方法
薛智勇,汶建龍
(西安測繪總站,陜西 西安 710054)
摘要:傳統條件下處理注記與同色符號壓蓋關系的方法,通常會存在增加數據量、破壞被壓蓋符號的數據完整性以及操作不靈活等問題。針對這種現象,提出基于GDI+裁剪技術處理注記與同色符號壓蓋關系的方法。通過計算獲取到注記壓蓋范圍內同色符號占據的繪圖區域,當繪制被壓蓋同色符號時,利用GDI+裁剪特性來限制該符號在上述區域內的圖形繪制,從而達到“裁剪”注記壓蓋區域內同色符號的目的。文中方法的整個處理過程完全不需要人工干預就能自動完成,且能夠突破過去流水線式的生產作業模式,隨機選擇不同階段的編輯內容進行處理,在很大程度上提高了注記與同色符號壓蓋關系處理的質量和效率。
關鍵詞:GDI+;注記;裁剪;壓蓋關系;分色版
中圖分類號:P282
收稿日期:2014-07-15
作者簡介:薛智勇(1969-),男,高級工程師.
A method of processing the overlapping relations between annotation texts and the same color symbols based on GDI+
XUE Zhi-yong,WEN Jian-long
(Xi’an Information Technique Institute of Surveying and Mapping,Xi’an 710054,China)
Abstract:The traditional methods-processing the overlapping relations between annotation texts and the same color symbols may have some problems such as increasing the amount of data,destroying the integrity of feature symbol data and inflexibility of operations.So the method of processing the overlapping relations between annotation texts and the same color symbols based on GDI+ clip technique is proposed.In order to achieve the purpose of trimming the symbols that have the same color as annotation text’s under annotation text,it can get the drawing area of the symbols that have the same color as annotation text’s under annotation text,and limit the graphics drawing under the annotation text using GDI+ clip characteristics while drawing the same color symbols.This method needs no manual intervention and can be accomplished automatically,which will break the past pipelining production mode,randomly choose the edit contents of some different phases to treat,and greatly improve the quality and efficiency.
Key words:GDI+;annotation;clip;overlapping relation;process plates

地圖表達內容豐富,即使注記配置工作做得再完美,也避免不了注記壓蓋其他同色符號的現象。針對這種問題,傳統的處理方法有蒙片法或者切割法[1]。但是蒙片法不僅會增加數據量,還會影響到地圖要素的管理模式。例如,通過蒙片法處理后的地圖內容,蒙片符號和注記內容往往是分離的,蒙片符號通常會被放在單獨一層,與注記層沒有任何聯系,這就無法實現對某一注記與其對應蒙片同時管理的功能(如同時顯示或隱藏等)。通過切割法處理后的地圖內容,被切割線劃所在的符號結構又會遭到破壞,使得被切割符號在GIS應用中無法再單獨進行可視化表達。例如,如圖1所示,當注記要素層被關閉后,被注記切割破壞的線狀符號在表達上仍然處于被切割狀態,無法恢復到切割前的完整狀態。因此,在處理注記與同色符號壓蓋關系過程中,為了既保證不破壞被壓蓋的符號結構,又能實現對注記及其壓蓋效果的動態管理,這里提出了基于GDI+裁剪技術處理注記與同色符號壓蓋關系的方法。

圖1 切割法處理后被切割線狀符號在注記要素層打開與關閉前后比較情況
1GDI+裁剪技術
GDI+是微軟2001年6月發布的開發圖形設備接口[2]。在GDI基礎上,它增加了漸變畫刷、基數樣條函數曲線、持久路徑對象、轉換和矩陣對象、可變比例區域、Alpha混色以及以支持多種圖像格式等新特性[3-6]。這些新特性可以衍生出諸多新功能,其中就包括GDI+裁剪功能。
GDI+裁剪是指限制對特定區域進行繪制。該技術的實現離不開諸多GDI+特性的支持。
1)持久路徑對象的支持。在GDI 中,路徑屬于設備上下文,并且會在繪制時被毀壞。利用GDI+,繪圖由Graphics對象執行,可以創建并維護幾個與Graphics對象分開的持久的GraphicsPath對象。繪圖操作不會破壞GraphicsPath 對象,因此可以多次使用同一個GraphicsPath 對象來繪制路徑。這樣就為裁剪區方法的應用提供了數據條件,因為由持久路徑對象所構建的區域對象就可以多次被裁剪區方法來調用,而不用擔心經過其它繪圖操作之后而被毀壞的風險。
2)可伸縮區域特性的支持。GDI+通過對可伸縮區域的支持極大地擴展了GDI。在GDI 中,區域被存儲在設備坐標中,而且可應用于區域的惟一變換是平移。而GDI+在全局坐標中存儲區域,并且允許區域發生任何可存儲在變換矩陣中的變換(如縮放和旋轉)。圖2顯示一個區域在執行3種變換(縮放、旋轉和平移)前后的情況。這就為裁剪方法的應用創造了技術輔助條件,因為隨著繪圖頁面的縮放,先前存儲的區域對象數據也會隨之進行縮放,確保了區域對象在不同縮放條件下的正常過渡。

圖2 區域3種變換(縮放、旋轉和平移)
3)Graphics對象中設置裁剪區方法的支持。具備了區域對象以后,只有借助Graphics對象中的設置裁剪區方法才能使當前區域對象的裁剪模式發生變化,如設置為替代組合模式、排外組合模式等,這是裁剪技術發揮作用的關鍵一環。
4)離不開Graphics對象中繪圖方法的支持。Graphics對象類似于GDI中的CDC類,具有繪制直線、矩形、路徑和其它圖形的方法。當上述一系列準備工作完成之后,借助Graphics對象中的繪圖方法進行圖形繪制時,就會在裁剪區域范圍內,按照所設置的裁剪模式控制繪圖操作,這是裁剪技術得以實現的終極條件。
總的來講,裁剪技術應用的基本流程為:先根據路徑創建區域對象,再建立Graphics對象,然后調用其SetClip方法,對先前創建的區域對象設置裁剪模式,最后再調用Graphics對象的繪圖方法即可。
2注記與同色符號壓蓋關系處理的流程
由于地圖線劃精細、文字細小,且色彩又比較豐富,因此為了印刷出版需要,地圖顏色通常采用專色進行設計[7]。根據不同的地圖種類又會采用不同的專色設計模式。這里以黑、棕、藍、綠四色1:10 000地形圖作為實驗對象。因此,地圖上的所有點、線、面符號都會是黑、棕、藍、綠四色中的一種,只不過為了進一步區分要素種類和性質采用的網點百分比有所區別。同樣,地圖上的所有注記顏色也只會是黑、棕、藍、綠四色中的一種,只不過受國家相關地形圖生產標準限制,每一個分色版中的注記顏色網點百分比都是一樣(都是100%)。也就是說,在同一分版上,所有注記顏色都是以該分版所對應專色按100%網點輸出決定,而不會出現以該分版所對應專色按多種百分比網點輸出的情況。然而作為制圖系統而言,大量制圖工作都是圍繞地圖屏幕可視化展開,而計算機屏幕又僅僅支持RGB色彩空間,這就導致大部分制圖系統也只是支持RGB色彩空間。因此,如何建立RGB色彩空間與專色色彩空間之間的聯系就非常關鍵,這也是確定地圖分版的主要依據。為此,這里提出建立顏色搭配表的方法。如表1所示,即為建立的1∶10 000地形圖若干屏幕顯示設計色與4種專色印刷設計色之間的搭配情況。

表1 1∶10 000地形圖中若干屏幕顯示設計色與4種專色印刷設計色之間的搭配情況
注記壓蓋區域實際就是一系列多邊形區域,這些多邊形區域的形狀是由注記內容的多少、字體種類和字體的大小等諸多因素決定。多邊形區域的數量則由注記的定位點確定。如果是單點定位,則只有一個多邊形區域,如果是多點定位,則有多個多邊形區域。因此,一般情況下,根據注記的定位點坐標、方向點坐標、字體信息以及字形信息即可很容易確定注記壓蓋區域信息。例如,在GDI和GDI+中,用戶通過調用相關的接口函數,就直接可獲取到該注記的壓蓋區域信息。但是在實際應用中發現,通過這些接口直接獲取的壓蓋區域信息經常會和注記實際壓蓋的區域信息有一定差異。如圖3(a)所示,基于GDI+中MeasureString方法獲取的字符串外接矩形高度偏大,注記內容并不是在外接矩形上下居中的位置。另外,對于有傾斜、聳肩等變形處理的注記,通過上述接口計算的壓蓋區域信息也往往不準確。為此,本文專門針對MeasureString方法進行重新構建,具體思路是:首先根據MeasureString方法中的相關參數創建一個由string字符串構成的路徑,如圖3(b)所示;然后獲取構成路徑的各個節點數據,經過比較得到構成這些節點的最大橫坐標Xmax、最大縱坐標Ymax、最小橫坐標Xmin、最小縱坐標Ymin,最終由最大橫坐標Xmax、最大縱坐標Ymax、最小橫坐標Xmin、最小縱坐標Ymin所構成的外接矩形來傳遞字符串壓蓋區域信息,得到的結果如圖3(c)所示,很明顯注記實際所占區域和計算得到的區域完全一樣;最后,再根據注記的傾斜角、聳肩角和旋轉角對壓蓋區域作進一步的變形處理,最終將得到比較精確的注記壓蓋區域信息。

圖3 MeasureString方法改進前后獲取注記壓蓋區域結果比較
為方便后續整個注記與同色符號壓蓋關系處理的順利進行,需要將地圖上所有的注記按分版模式管理起來,分別得到面向不同分版的分色版注記層(集)對象。在構建分色版注記層(集)對象過程中,顏色搭配表則起著關鍵的作用。分色版注記層(集)對象構建的具體流程如圖4所示。

圖4 分色版注記層(集)對象構建的具體流程
注記裁剪區對象是指由地圖中某專色分版層上所有注記壓蓋區域所構成的復雜區域對象。它是實現注記與同色符號壓蓋關系處理的重要參考對象。在顏色搭配表以及注記壓蓋區域計算方法的支持下就可以得到不同分版的注記裁剪區。如圖5所示,即為黑版注記裁剪區對象構建的具體流程,其它分版注記裁剪區構建的過程與此類似。

圖5 黑版注記裁剪區構建的具體流程
分色版圖元層(集)對象與分色版注記層(集)對象類似,它是將地圖上的所有圖元按照分版模式管理起來,以方便后續整個注記與同色符號壓蓋關系處理操作的順利進行。分色版圖元層(集)對象的構建涉及到入庫數據、符號化、圖元化、制圖編輯、顏色搭配表等諸多環節,每個環節都會對分色版圖元層(集)對象的構建結果產生一定影響。例如,假如提供的入庫數據存在問題,錯把某條梯田坎要素對象編碼設成了陡崖編碼,則在分色版圖元層(集)對象構建后,也就會錯誤地將梯田坎要素按照陡崖符號化,并將圖元化后的圖元對象歸類到棕版圖元層(集)對象中(實際應該在黑版圖元層對象中)。如果符號化過程中采用的符號體系沒有嚴格按照相關要求來制作,或許也會出現本該在黑版圖元層對象中的圖元會錯誤地歸類到其它分版圖元層對象中。如圖6所示,即為分色版圖元層(集)對象構建的基本流程。
前面的各項準備工作完成以后,進入圖元化階段的地圖內容最終只包含圖元和注記兩部分,并且圖元和注記都基于分版模式進行了二次重組,分別得到棕版圖層對象、綠版圖層對象、藍版圖層對象和黑版圖層對象,每個分版圖層對象又細分為圖元層對象和注記層對象。這樣就可以進行注記與同色符號壓蓋關系的處理工作,處理的基本流程如7所示。
從圖7中可以看出,整個地圖內容的輸出是按照棕版圖層、綠版圖層、藍版圖層和黑版圖層的順序進行,這樣就與印刷出版時各分色版之間的壓蓋順序實現了統一。每個分版圖層輸出的基本流程一樣,先是輸出圖元層對象,再輸出注記層對象。不過,在輸出圖元層對象的時候,需要根據單個圖元對象網點百分比的屬性值做不同的處理:如果當前圖元網點百分比數值為100%,如普通街區符號產生的線圖元,則表明它與當前分版注記層對象顏色相同,就需要預先做壓蓋關系處理(需要注意的是,或許當前圖元與該分版注記層對象實際并未發生壓蓋沖突,但為了實現自動化處理,只能逐個比較之后才能確定),也就是在圖元繪制前將當前分版注記裁剪區設置為排外組合模式,當該圖元繪制結束后,再將當前分版注記裁剪區設置為替代組合模式(默認狀態),然后再取下一個圖元對象準備輸出;如果當前圖元網點百分比數值為小于100%,如普通街區符號產生的面圖元,則表明它與當前分版注記層對象顏色不完全相同,就不需要預先做壓蓋關系處理,直接進行圖元繪制后,再取下一個圖元對象準備輸出;以此類推,直至當前分版所有圖元對象輸出完畢。假如在黑版上有注記壓蓋普通街區邊線和面域的情況同時出現時,就會看到此時被壓普通街區的邊線會被精確“裁剪”掉,而被壓面域部分則會正常輸出,不受任何影響,如圖8所示。

圖8 黑版注記與普通街區壓蓋關系處理后視圖
3處理結果分析
分版注記裁剪區對象可使用臨時內存,而不需要將裁剪區范圍坐標存儲于地圖文檔中,這樣“裁剪”之后的制圖數據實際并未受任何影響,這就很大程度上減輕了制圖數據存儲的壓力。當使用制圖系統初次打開地圖文檔時,注記裁剪區對象會自動創建一次,如果在后續工作中未對地圖數據做改動操作,則先前創建的注記裁剪區對象會一直保留到程序關閉時才銷毀,但是如果期間地圖數據有改動,那么就需要在最后所有編輯操作完成之后對注記裁剪區對象進行一次更新操作即可,而注記裁剪區對象的應用則只需要在地圖內容初次繪制或整體刷新(重新繪制)時才執行。由于地圖上注記數量有限,注記裁剪區范圍計算和應用于繪制的執行效率很高。地圖文檔的任何改動都不會影響注記裁剪區范圍重新計算和使用。因此,這就擺脫了過去單一的流水線式的工作流程。例如,過去只有在所有出版編輯操作完成以后,才能進行注記與同色符號壓蓋關系的處理,而且因為處理之后被裁剪的符號無法再恢復原狀,因此處理之后往往無法再返回去再編輯再處理。本方案則打破了這種工作流程,完全可以根據需要反復進行再編輯(如移動注記或者圖元等)和再處理。需要特別指出的是,上述整個處理過程都是自動實現的,完全不需要人工干預,而且在某種程度上具備智能化的特點。例如,在注記裁剪區應用的過程中,裁剪結果不僅“準”而且“巧”。所謂“準”是指被裁剪的符號就是與注記發生壓蓋沖突的同色符號,而不是非同色符號。由于地圖內容復雜,注記壓蓋的符號既可能是同色符號,又可能是非同色符號,這些非同色符號一方面會與注記同在一個分色版上,另一方面也可能就不在一個分色版上,如圖8所示,在注記“和宜合”下,既有與注記同色的普通街區邊線,又有與注記同版的普通街區面域,還有與注記非同版的等高線(在棕版上)和植被(在綠版上)符號,但在處理過程中僅僅是針對注記壓蓋區域內的普通街區邊線做了精確“裁剪”。所謂“巧”是指被“裁剪”的符號只是在與注記重疊的區域未繪制,表面上看起來像被“裁剪”了一樣,而實際對應的地圖數據本身并未發生變化。
4結束語
本文基于GDI+裁剪技術,提出了一種特殊的處理注記與同色符號壓蓋關系的方法。該方法通過對注記壓蓋的同色符號做出特殊輸出限制,以達到“裁剪”注記壓蓋區域內同色符號的目的。由于該方法既不影響注記壓蓋區域同色符號的數據完整性,又不會增加額外的圖形數據,且處理過程完全不需要人工干預就能自動完成,在很大程度上提高了注記與同色符號壓蓋關系處理的質量和效率。另外,在傳統地圖生產流程中,通常需要在地圖編輯階段(在制圖系統中)先完成符號化、要素關系處理等地圖編輯工作,然后再進入印前處理階段(在印前處理系統中)實現分版間和同色符號間的壓蓋關系處理[8],此時如果又需要從事地圖編輯工作,就必須放棄先前已完成的印前處理成果,這樣勢必會大大降低制圖工作的效率。而該方法可以根據需要,隨機選擇不同階段的編輯內容進行處理,打破了以往流水線式的生產作業模式,進一步提高了作業的靈活性。
參考文獻:
[1]劉海硯.地圖制圖與空間數據生產一體化理論與技術的研究[D].鄭州:信息工程大學,2002.
[2]何列松,魏斌,楊春成,等.利用GDI+增強地圖的顯示效果[J].測繪科學技術學報,2006,23(6):457-460.
[3]Mashesh Chard.GDI+圖形程序設計[M].北京:電子工業出版社,2005.
[4]謝超,陳毓芬.基于GDI+的電子地圖符號庫的改進[J].測繪工程,2006,15(2):45-49.
[5]車森,劉海硯,劉輝,等.GDI+在電子地圖可視化中的應用[J].測繪科學,2008,33(1):226-228.
[6]張玲,陳元春,孫勇.基于GDI+的通用圖形平臺設計[J].計算機工程,2005,31(12):218-219.
[7]鄧術軍.開放式地圖出版數據模型的研究[D].鄭州:信息工程大學,2005.
[8]汶建龍,史瑞芝.基于柵格疊置分析的分版審校模型的建立與應用[J].測繪工程,2011,20(5):49-52.海硯.地圖制圖與空間數據生產一體化理論與技術的研究[D].鄭州:信息工程大學,2002.
[2]何列松,魏斌,楊春成,等.利用GDI+增強地圖的顯示效果[J].測繪科學技術學報,2006,23(6):457-460.
[3]Mashesh Chard.GDI+圖形程序設計[M].北京:電子工業出版社,2005.
[4]謝超,陳毓芬.基于GDI+的電子地圖符號庫的改進[J].測繪工程,2006,15(2):45-49.
[5]車森,劉海硯,劉輝,等.GDI+在電子地圖可視化中的應用[J].測繪科學,2008,33(1):226-228.
[6]張玲,陳元春,孫勇.基于GDI+的通用圖形平臺設計[J].計算機工程,2005,31(12):218-219.
[7]鄧術軍.開放式地圖出版數據模型的研究[D].鄭州:信息工程大學,2005.
[8]汶建龍,史瑞芝.基于柵格疊置分析的分版審校模型的建立與應用[J].測繪工程,2011,20(5):49-52.
[責任編輯:劉文霞]