張彥敏 芮小平 劉真余
(1.交通運(yùn)輸部科學(xué)研究院;2.中國科學(xué)院研究生院資源與環(huán)境學(xué)院)
地圖符號是地圖的語言單位,通過對地圖符號的解讀,可以直觀地了解地圖所表達(dá)的地理信息。無論是在地理信息系統(tǒng),還是在地圖制圖系統(tǒng)中,地圖符號設(shè)計(jì)均是其主要功能模塊之一。ArcGIS Engine是一組完備的并且打包的嵌入式GIS組件庫和工具庫,不過,它只提供了基礎(chǔ)地圖符號模型和地圖符號管理對象模型,沒有提供地圖符號管理和符號制作的工具。采用ArcGIS Engine進(jìn)行應(yīng)用系統(tǒng)開發(fā),一個需要解決的問題就是地圖符號化問題,但現(xiàn)有的方法均存在一定程度的不足[1]。
在煤層氣地面集輸?shù)乩硇畔⑾到y(tǒng)中,涉及到各類氣井符號、閥門符號、管線符號等,這些符號的繪制需要符合我國煤層氣地面集輸?shù)男幸?guī)。不管是ArcMap桌面版的符號庫還是ArcGIS Engine本身的符號庫都無法滿足該行業(yè)符號繪制的需求。在實(shí)際應(yīng)用中,系統(tǒng)用戶還要根據(jù)實(shí)際應(yīng)用的需要來制作新的符號或者修改符號,所以需要基于ArcGIS Engine研建一套地圖符號制作工具,來滿足用戶針對不同行業(yè)符號定制的需求。煤層氣地面集輸系統(tǒng)的生產(chǎn)元素符號庫設(shè)計(jì)是GIS可視化的重要組成部分,本研究結(jié)合煤層氣地面集輸?shù)乩硇畔⑾到y(tǒng)的項(xiàng)目需求,研究了利用C#編程語言和ArcGIS Engine開發(fā)行業(yè)特色符號庫的一般方法,重點(diǎn)研究了符號(點(diǎn)符號、線符號和面符號)的繪制方法、符號庫全數(shù)據(jù)庫儲存方案、符號的使用配置方案以及符號庫的導(dǎo)入導(dǎo)出與管理。
ArcGIS Engine的符號系統(tǒng)在充分挖掘Display庫內(nèi)部已有接口的基礎(chǔ)上進(jìn)行擴(kuò)展,以達(dá)到對符號庫進(jìn)行擴(kuò)充的目的。ArcGIS Engine的符號體系如圖1所示。
從地圖符號的約定性及其表示的抽象概念可以把地圖符號分為點(diǎn)狀符號、線狀符號和面狀符號[2]。點(diǎn)狀符號有且只有1個定位點(diǎn),它的大小與比例尺無關(guān),由1種或幾種圖元按不同的排列方式組合而成;線狀符號表示線狀延伸的地物,具有方向性,長度與比例尺有關(guān)系而寬度與比例尺沒有關(guān)系;面狀符號表示空間上的二維地物,所處的范圍與比例尺有關(guān)。

圖1 ArcGIS Engine的符號體系
符號繪制有很多方法[3-7],本系統(tǒng)考慮到用戶使用的方便性,符號制作系統(tǒng)的交互界面設(shè)計(jì)為一個繪圖程序,用戶可以新建符號像使用Windows繪圖程序一樣繪制所需的符號形狀。在符號繪制工具選用的C#類庫中的 System.Drawing.Graphics類提供將對象繪制到顯示設(shè)備的方法。當(dāng)符號繪制完成后,關(guān)鍵參數(shù)以數(shù)據(jù)庫存儲,目前國內(nèi)已經(jīng)有學(xué)者對符號的關(guān)系型數(shù)據(jù)庫存儲作了研究[8],針對不同幾何類型的符號的特征,提取出相關(guān)的采用符號的關(guān)鍵參數(shù)都用XML文件存儲到ORACLE數(shù)據(jù)庫中,每個符號由1個頭記錄和若干個不定長的圖元數(shù)據(jù)記錄組成,具體關(guān)鍵參數(shù)描述如下。
(1)符號頭記錄。符號頭記錄由多個數(shù)據(jù)字段組成,分別描述整個符號的編碼、總數(shù)據(jù)長度、圖元數(shù)據(jù)記錄總數(shù)、分類編碼等信息。每個頭記錄由10個字節(jié)組成,其結(jié)構(gòu)如表1所示。

表1 符號頭記錄
(2)圖元數(shù)據(jù)記錄。圖元數(shù)據(jù)記錄描述組成符號的每個基本圖元(線、填充區(qū)、圓等),為不定長記錄,其最大長度為128 k字節(jié)。
(3)基本圖元記錄。基本圖元記錄的數(shù)據(jù)部分由線、填充區(qū)、字符及圖元記錄頭信息和相應(yīng)的坐標(biāo)信息組成。圖元記錄頭信息由6字節(jié)組成,描述這個基本圖元的類型、畫筆寬度、顏色、坐標(biāo)點(diǎn)個數(shù)等信息。其結(jié)構(gòu)如表2所示。

表2 基本圖元記錄
符號繪制后,將符號關(guān)鍵的參數(shù)存儲到數(shù)據(jù)庫中,同時將繪制的符號保存為BMP文件。用戶在繪圖區(qū)域繪制好圖像后,假如保存為點(diǎn)符號,則用下面語句即可新建一個點(diǎn)圖片符號:
IPictureMarkerSymbol m_PictureMarkerSymbol=new Picture Marker Symbol Class();
m_PictureMarkerSymbol.CreateMarkerSymbolFrom File(esriIPictureType.esriIPictureBitmap,pPicture Path);
其中的第1個參數(shù)esriIPictureType.esriIPicture Bitmap是指Bmp格式的圖像,第2個參數(shù)pPicture Path是指該Bmp文件的存儲路徑,符號被存儲在ESRI的.ServerStyle文件中,為了方便以后對該符號進(jìn)行編輯修改,中間過程中的參數(shù)會被存儲到數(shù)據(jù)庫中,符號繪制的流程如圖2所示。

圖2 繪制符號的流程
用戶可以在符號選擇其中選擇系統(tǒng)需要的符號來配置地物,可以調(diào)整符號的大小、方向和顏色等,不同的符號類型的配置方法描述如下。
點(diǎn)符號的配置:IMarkerSymbol是所有點(diǎn)狀符號的基本接口。所有其他點(diǎn)狀符號接口繼承了IMarkerSymbol的屬性和方法。成員Angle(屬性)是點(diǎn)狀符號的旋轉(zhuǎn)角度。旋轉(zhuǎn)方向是逆時針,并且ArcMap假定點(diǎn)狀符號的方向是水平的(指向笛卡爾坐標(biāo)系的X軸正向)。Color(屬性)是點(diǎn)狀符號顏色。Col-or是點(diǎn)狀符號的基本顏色。任意ArcMap顏色接口都可能被用于創(chuàng)建顏色對象。BarChartSymbol類不支持Color。Size(屬性)是點(diǎn)狀符號的大小(高度或?qū)挾鹊淖畲笾?。以point為單位。XOffset是點(diǎn)狀符號在水平方向的偏移量。偏移量可以是正值也可以是負(fù)值。YOffset是點(diǎn)狀符號在豎直方向的偏移量。偏移量可以是正值也可以是負(fù)值。
線符號配置:ILineSymbol接口,提供控制線符號的成員。ILineSymbol是 ISimpleLineSymbol、ICartographicLineSymbol、IHashLineSymbol、IMarkerLine-Symbol和IPictureLineSymbol的通用屬性接口。成員包括Color線狀符號顏色,Width線狀符號寬度。
面符號配置:IFillSymbol接口,提供控制填充符號的成員包括IFillSymbol是ILineFillSymbol、IMarkerFillSymbol、IGradientFillSymbol 和 IPictureFill-Symbol的通用屬性接口。其中Color為填充顏色,Outline為填充邊線的線型。
系統(tǒng)中的點(diǎn)符號例如控制閥、壓力傳感器、溫度傳感器等符號有方向性,當(dāng)配置這種點(diǎn)符號時,程序會根據(jù)該點(diǎn)符號相鄰的線段的角度,主要調(diào)用線段的Angle屬性來計(jì)算出點(diǎn)符號的角度,使該點(diǎn)符號能很好地符合相鄰線段的方向,地圖元素顯示會更加美觀。
用戶配置完畢后,符號配置信息會保存為XML文件,當(dāng)用戶下次進(jìn)入系統(tǒng)后,系統(tǒng)會讀取XML文件,自動配置圖層的符號,如圖3所示。

圖3 符號配置流程
符號導(dǎo)入導(dǎo)出:可以將外部的ServerStyle文件中符號導(dǎo)入到系統(tǒng)本身的ServerStyle文件中,也可以將系統(tǒng)的ServerStyle文件中導(dǎo)出。符號庫管理器:讀取系統(tǒng)的符號文件,進(jìn)行瀏覽,并能將符號刪除。該模塊的使用的關(guān)鍵接口為IStyleGalleryStorage,IStyleGallery,IStyleGalleryStorage 接口負(fù)責(zé)讀取系統(tǒng)的符號庫文件(如:煤.ServerStyle文件),關(guān)鍵代碼如下:
pStyleGalleryStorage.AddFile(Application.StartupPath+ “煤.ServerStyle”);
pStyleGalleryStorage.TargetFile=(Application.StartupPath+ “煤.ServerStyle”);
IStyleGallery接口負(fù)責(zé)讀取符號類型,如點(diǎn)符號,線符號,面符號,文字符號等等,按照煤層氣地面集輸?shù)乩硇畔⑾到y(tǒng)的需要,只需要讀取點(diǎn)線面符號類型,并通過TreeView控件顯示管理。當(dāng)用戶點(diǎn)擊某一符號類型后,會通過IEnumStyleGalleryItem接口去讀取pStyleGallery變量中符合要求的符號,并將讀取后的符號在窗口中顯示。
以上符號化方法應(yīng)用到了“煤層氣地面集輸?shù)乩硇畔⑾到y(tǒng)”當(dāng)中。該系統(tǒng)是基于ArcGIS Engine+Visual Studio2005開發(fā)的[9-10],向用戶提供地圖符號的制作管理功能。
(1)符號制作功能(如圖4)。符號制作系統(tǒng)的交互界面設(shè)計(jì)為一個繪圖程序,用戶可以新建符號像使用Windows繪圖程序一樣繪制所需的符號形狀,或者打開已有的.BMP符號文件進(jìn)行編輯,用戶完成符號繪制后點(diǎn)擊保存按鈕,就會彈出符號保存對話框,首先選擇符號類型,點(diǎn)線面選擇1種,然后選擇符號分類,如果沒有用戶需要的類型,用戶可以新建分類,然后輸入符號名稱,點(diǎn)擊確定按鈕。

圖4 符號繪制界面
(2)符號選擇器(如圖5)。用戶單擊圖層列表中的符號圖形,即可彈出符號選擇器,選擇用戶需要的符號,用戶可以改變符號顏色、大小、角度,將地圖中原有的符號替換掉。
(3)符號導(dǎo)入導(dǎo)出功能(如圖6)。符號導(dǎo)入時首先要選擇ServerStyle文件,用戶根據(jù)需要可以選擇符號文件中的具體符號類型導(dǎo)入,也可全部導(dǎo)入。確定后,會在符號導(dǎo)入導(dǎo)出主窗口中瀏覽剛才選中符號。點(diǎn)擊確定后,符號導(dǎo)入到系統(tǒng)本身的Server-Style文件中。符號導(dǎo)出是將當(dāng)前系統(tǒng)的ServerStyle文件導(dǎo)出,用戶只需選擇保存位置即可。

圖5 符號選擇界面

圖6 符號導(dǎo)入導(dǎo)出
(4)符號管理器的功能(圖7)。用戶可以在符號管理器中瀏覽系統(tǒng)中的符號,可以選擇大圖標(biāo)小圖標(biāo)或詳細(xì)信息進(jìn)行預(yù)覽,并可以進(jìn)行符號刪除。
采用自定義制作后的符號化整體效果如圖8所示。

圖7 符號庫管理器
本文基于ArcGIS Engine的煤層氣地面集輸?shù)乩硇畔⑾到y(tǒng)中的地圖符號制作管理工具的研建,介紹了地圖符號的制作、地圖符號庫的建立、符號庫的導(dǎo)入導(dǎo)出、符號管理以及地圖符號化模塊的設(shè)計(jì)與實(shí)現(xiàn)。該工具是一個獨(dú)立的模塊,它既可獨(dú)立運(yùn)行,也可嵌入到基于ArcGIS Engine的其他GIS應(yīng)用系統(tǒng)中。實(shí)際開發(fā)應(yīng)用表明,該地圖符號制作管理工具的效果可以與ArcMap桌面版中的符號工具相比,并且繪制符號方法簡單,提供給用戶的繪圖交互界面,使不具備GIS專業(yè)知識的用戶也可進(jìn)行操作,同時開放式的設(shè)計(jì)使用戶在制作新的符號時,可直接加進(jìn)去,能夠很好地滿足用戶擴(kuò)充地圖符號庫的需求。

圖8 符號化效果
[1] 尹鵬程.基于ArcEngine符號系統(tǒng)的實(shí)現(xiàn)與擴(kuò)展[J].四川測繪,2006,5(2):72-73.
[2] 李津平.基于Intemet地圖符號化研究[D].北京:中國科學(xué)院遙感應(yīng)用研究所,2003.
[3] 張園玉,李 霖,龍 毅.地圖符號系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].測繪信息與工程,2004,29(6):25-27.
[4] 李鴻基.ArcGIS中自定義地圖符號[J].計(jì)算機(jī)與現(xiàn)代化,2004(4):113-114.
[5] 祁華斌,艾廷華,胡 珂.基于ArcGIS的地圖符號庫建立與符號化實(shí)施[J].測繪通報(bào),2003(1):14-17.
[6] 劉丙方,劉冰晶,狄麗娟.基于ArcObjects的特殊符號開發(fā)方法[J]. 礦山測量,2004,6(2):21-22.
[7] 談曉軍,邊馥苓,何忠煥.地圖符號可視化系統(tǒng)的面向?qū)ο笤O(shè)計(jì)與實(shí)現(xiàn)[J].測繪通報(bào),2003(1):11-13.
[8] 蔡國林,李永樹,馮德俊.基于ArcGIS Engine地圖符號化模塊的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2006,89(12):268-270.
[9] 陳飛翔.移動空間信息服務(wù)關(guān)鍵技術(shù)研究[D].北京:中國科學(xué)院研究生院,2006.
[10] 韓 鵬,徐占華,褚海峰.地理信息系統(tǒng)開發(fā)ArcObjects方法[M].武漢:武漢大學(xué)出版社,2005.