ArcGIS Engine開發教程之圖層符號化(三)——符號化Symbol(符號)體系
1.MarkerSymbol物件
MarkerSymbol用於修飾點物件的符號,它擁有十三個子類如表2所示,其中不同的子類可以產生不同型別的點符號。所有的MarkerSymbol類都實現了IMarkerSymbol介面,這個介面定義了標記符號的公共方法和屬性,如角度、顏色、大小和X,Y偏移量等。
表二
點符號型別 |
描述 |
ArrowMarkerSymbol |
預定義的肩頭符號 |
BarChartSymbol |
柱狀圖符號 |
CharacterMarker3DSymbol |
三維字型符號 |
CharacterMarkerSymbol |
字型符號 |
Marker3DSymbol |
3D 符號 |
MultiLayerMarkerSymbol |
多個符號疊加產生新點符號 |
PictureMarkerSymbol |
圖片符號(bmp或emf) |
PiechartSymbol |
餅圖符號 |
SimpleMarker3DSymbol |
簡單3D符號 |
SimpleMarkerSymbol |
簡單符號 |
StackedChartSymbol |
堆疊符號 |
TextMarkerSymbol |
文字元號用來符號化點 |
常用的有以下5種 型別:
圖5
如何建立MarkerSymbol?接下來以SimpleMarkerSymbol構建為例演示如何建立一個點符號://建立SimpleMarkerSymbolClass物件
ISimpleMarkerSymbol pSimpleMarkerSymbol =newSimpleMarkerSymbolClass();
//建立RgbColorClass物件為pSimpleMarkerSymbol設定顏色
IRgbColor pRgbColor =newRgbColorClass();
pRgbColor.Red = 255;
pSimpleMarkerSymbol.Color = pRgbColorasIColor;
//設定pSimpleMarkerSymbol物件的符號型別,選擇鑽石
pSimpleMarkerSymbol.Style =esriSimpleMarkerStyle.esriSMSDiamond;
//設定pSimpleMarkerSymbol物件大小,設定為5
pSimpleMarkerSymbol.Size = 5;
//顯示外框線
pSimpleMarkerSymbol.Outline =true;
//為外框線設定顏色
IRgbColor pLineRgbColor =newRgbColorClass();
pLineRgbColor.Green = 255;
pSimpleMarkerSymbol.OutlineColor = pLineRgbColorasIColor;
//設定外框線的寬度
pSimpleMarkerSymbol.OutlineSize = 1;
如何使用這個符號,在接下來介紹Renderer物件的時候將為大家演示如何用建立的點符號去符號化一個圖層。
2.LineSymbol物件
LineSymbol物件是用於修飾線型幾何物件的符號,它擁有八個子類如表3所示,其中不同的子類可以產生不同型別的線符號,所有的LineSymbol類都實現了ILineSymbol介面, ILineSymbol定義了兩個公共屬性:Color和Width。
表三
線符號型別 |
描述 |
CartographicLineSymbol |
實心或者虛線線符號 |
HashLineSymbol |
離散線符號 |
MarkerLineSymbol |
點線符號 |
MultiLayerLineSymbol |
多符號疊加產生新線符號 |
PictureLineSymbol |
圖片線符號 |
SimpleLine3DSymbol |
3D 線符號 |
SimpleLineSymbol |
預定義風格的線符號 |
TextureLineSymbol (3DAnalyst) |
紋理貼 圖線符號 |
常用的LineSymbol如下圖所示:
圖6
如何建立LineSymbol?接下來以MarkerLineSymbol構建為例演示如何建立一個線符號:
IArrowMarkerSymbol pArrowMarker =newArrowMarkerSymbolClass();
IRgbColor pRgbColor =newRgbColorClass();
pRgbColor.Red = 255;
pArrowMarker.Color = pRgbColorasIColor;
pArrowMarker.Length = 10;
pArrowMarker.Width = 8;
pArrowMarker.Style =esriArrowMarkerStyle.esriAMSPlain;
IMarkerLineSymbol pMarkerLine =newMarkerLineSymbolClass();
pMarkerLine.MarkerSymbol = arrowMarker;
IRgbColor pLineColor =newRgbColorClass();
pLineColor.Blue = 255;
pMarkerLine.Color = pLineColorasIColor;
3.FillSymbol物件
FillSymbol是用來修飾如多邊形等具有面積的幾何形體的符號物件,它擁有十一個子類如表4所示它實現了IFillSymbol,這個介面定義了兩個屬性Color和OutLine,以滿足所有型別的FillSymbol物件的公共屬性設定。
表四
填充符號型別 |
描述 |
ColorRampSymbol (Carto) |
用於渲染Raster資料的顏色帶 |
ColorSymbol (Carto) |
用於渲染Raster資料的顏色符號 |
DotDensityFillSymbol |
點密度填充符號 |
GradientFillSymbol |
漸變填充符號 |
LineFillSymbol |
包含線符號的填充符號 |
MarkerFillSymbol |
包含點符號的填充符號 |
MultiLayerFillSymbol |
多符號疊加產生新填充符號 |
PictureFillSymbol |
圖片填充符號 |
RasterRGBSymbol |
用於渲染Raster資料 RGBSymbol |
SimpleFillSymbol |
簡單填充符號 |
TextureFillSymbol |
紋理貼圖填充符號 |
常用的FillSymbol如下圖所示:
圖7
如何建立FillSymbol?接下來以MarkerLineSymbol構建為例演示如何建立一個線符號:
//為填充符號建立外框線符號
如果沒有ArcGIS Desktop使用經驗的開發看了以上程式碼片段會一頭霧水,不明白填充符號的建立為什麼還要建立線符號等等,如果有ArcGIS Desktop使用經驗就會非常容易理解這些符號的建立的機制,如圖8是SimpleFillSymbol設定資訊。所以熟悉ArcGIS Desktop的使用對開發人員進行ArcGIS Engine開發非常有用。IColor pLineColor =newRgbColorClass();
ICartographicLineSymbol pCartoLineSymbol =newCartographicLineSymbolClass();
pCartoLineSymbol.Width = 2;
pCartoLineSymbol.Color = pLineColor;
//建立一個填充符號
ISimpleFillSymbol pSmplFillSymbol =newSimpleFillSymbol();
//設定填充符號的屬性
IColor pRgbClr =newRgbColorClass();
IFillSymbol pFillSymbol = pSmplFillSymbol;
pFillSymbol.Color = pRgbClr;
pFillSymbol.Outline = pCartoLineSymbol;
圖8
4.TextSymbol物件TextSymbol物件是用於修飾文字元素的,文字元素在要素標註等方面很有用處。TextSymbol符號最重要的設定物件是它的字元,它實現了三個主要的介面來設定字元:ITextSymbol 、 ISimpleTextSymbol 和 IFormattedTextSymbol 。
ITextSymbol介面是定義文字字元樣式的主要介面,它定義的ITextSymbol::Font屬性是產生一個TextSymbol符號的關鍵。可以使用IFontDisp介面來設定字型的大小和是否是粗體、傾斜等屬性。使用ITextSymbol介面還可以定義TextSymbol物件的顏色、角度、水平排列方式、垂直排列方式和文字等內容。
以下是一個構建TextSymbol的函式:
///生成文字符號
publicstaticvoid MakeTextSymbol(ref ITextSymbol pTxtSymbol,string sFontName,int iFont, int iColor)
{
try
{
pTxtSymbol.Font.Name = sFontName;
pTxtSymbol.Font.Size = (decimal)iFont;
IRgbColor pRGBColor = new RgbColorClass();
pRGBColor.RGB = iColor;
pTxtSymbol.Color = (IColor)pRGBColor;
pTxtSymbol.Angle = 0;
pTxtSymbol.RightToLeft = false;
pTxtSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHACenter;
pTxtSymbol.VerticalAlignment = esriTextVerticalAlignment.esriTVABaseline;
}
catch (Exception Err)
{
MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
5. 3DChartSymbol物件
3DChartSymbol是一個抽象類,它擁有三個子類:BarChart、PieChart和StackedChart。如圖9所示:
圖9
BarChartSymbol是最常用的三維著色符號,它使用不同型別的柱子來代表一個要素類中不同的屬性,而柱子的高度取決於屬性值的大小。PieChartSymbol符號進行著色的方法是使用一個餅圖來顯示不同要素類中的不同屬性,不同的屬性按照它們的數值大小佔有一個餅圖中的不同比例的扇形區域。
PieChartSymbol符號進行著色的方法是使用一個餅圖來顯示不同要素類中的不同屬性,不同的屬性按照它們的數值大小佔有一個餅圖中的不同比例的扇形區域。
至於如何建立這些3DChartSymbol符號這裡不再提供程式碼片段演示,讀者可以根據前邊學習的知識,自己操作ArcGIS Desktop使用3DChartSymbol製作專題圖,然後根據ArcGIS Engine的幫助文件開發建立3DChartSymbol。
6.使用ServerStyle6.
- 如果熟悉ArcGIS Desktop的使用,就會對Style符號庫檔案有所瞭解,相對應的在ArcGIS Engine開發中對應的是ServerStyle符號庫,它的結構體系如圖10所示。可以通過專門的轉換程式把ArcGIS Desktop Style符號庫轉換為ArcGIS Engine所能夠使用的ServerStyle符號庫。
用於獲取ServerStyle符號庫中的符號主要涉及到以下介面如表所示:表
介面名稱 功能描述 IStyleGallery 用於管理Style Gallery IStyleGalleryStorage 管理Style Gallery中的符號庫檔案 IStyleGalleryClass 控制符號庫中Style Gallery Class IEnumStyleGalleryItem 列舉一組Style Gallery items IStyleGalleryItem 定義Style Galle ry itme 圖10
(1)獲取符號庫中符號
如何獲取到一個符號庫中符號?接下來以獲取ESRI符號庫中名稱為Rose的符號的流程:
1.首先構建一個ServerStyleGallery物件
2.其次使用IStyleGalleryStorage介面的AddFile方法載入ServerStyle檔案
3.遍歷ServerGallery中的Class,如果是FillSymbol使用IStyleGallery的GetItems方法返回一個可列舉的包含一系列StyleGalleryItem的EnumStyleGalleryItem物件。
4.遍歷EnumServerStyleGalleryItme列舉物件中的StylegalleryItme如果名稱是Rose即可獲取ESRI符號庫中名稱為Rose的StylegalleryItme,然後通過IStyleGalleryItem的Item屬性即可轉換為ISymbol。
整個流程圖如圖11所示:
圖11 - 7.SymbologyControl控制元件
- SymbologyControl用來顯示ServerStyle符號庫中的符號樣式,可以選擇在該控制元件上選擇一個符號用來符號化一個圖層或者作為一個Element的符號。使用SymbologyControl可以再設計的模式下在其屬性頁中載入ServerStyle符號庫檔案,同樣也可以使用的LoadStyleFile和RemoveFile方法載入和移除Serverstyle符號庫檔案。執行效果如圖12所示:
圖12