轉自:http://blog.sina.com.cn/s/blog_716749b101010qoz.html
使用ServerStyle
如果熟悉ArcGIS Desktop的使用,就會對Style符號庫文件有所了解,相對應的在ArcGIS Engine開發中對應的是ServerStyle符號庫,它的結構體系如下圖所示。可以通過專門的轉換程序把ArcGIS Desktop Style符號庫轉換為ArcGIS Engine所能夠使用的ServerStyle符號庫。
用於獲取ServerStyle符號庫中的符號主要涉及到以下接口如表所示:
表
接口名稱功能描述IStyleGallery用於管理Style GalleryIStyleGalleryStorage管理Style Gallery中的符號庫文件IStyleGalleryClass控制符號庫中Style Gallery ClassIEnumStyleGalleryItem枚舉一組Style Gallery itemsIStyleGalleryItem定義Style Galle ry itme
4.5.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。
整個流程圖如下圖所示:

SymbologyControl控件
SymbologyControl用來顯示ServerStyle符號庫中的符號樣式,可以選擇在該控件上選擇一個符號用來符號化一個圖層或者作為一個Element的符號。使用SymbologyControl可以再設計的模式下在其屬性頁中加載ServerStyle符號庫文件,同樣也可以使用的LoadStyleFile和RemoveFile方法加載和移除Serverstyle符號庫文件。運行效果如下圖所示:

符號化之Renderer( 渲染)體系
ArcGIS Engine9.3對GIS數據的符號化分為矢量數據渲染和柵格數據渲染兩大類。接下來分別介紹FeatureRender和RasterRender。
1. FeatureRender對象
FeatureRenderer是一個抽象類,它有15個子類負責進行不同類型的着色運算。它們都實現了IFeatureRenderer接口,這個接口定義了進行要素圖層符號化的公共屬性和方法。
可以通過IGeoFeatureLayer::Renderer屬性獲得一個要素圖層的符號化對象
表四
要素符號化類型描述SimpleRender簡單符號化UniqueValueRender唯一值符號化BiUniqueValueRender雙變量唯一值符號化ChartRender圖表符號化ClassBreaksRenderer分類等級符號化DotDensityRenderer點密度符號化ProportionalSymbolRenderer根據屬性值設置符號大小進行符號化ScaleDependentRenderer依比例尺符號化RepresentationRenderer制圖表達符號化CoTrackSymbologyRenderer(TrackingAnalyst)軌跡符號化(應用於TrackingAnaylyst擴展模塊)EnhancedInfoRenderder(TrackingAnalyst)增強信息符號化(應用於TrackingAnaylyst擴展模塊)UniqueValueTextRenderer(TrackingAnalyst)唯一值文本符號化(應用於TrackingAnaylyst擴展模塊)NAStopRenderer(NetworkAnalyst)停止符號化(應用於網絡分析擴展模塊)FeatureVertexRenderer(SurveyExt)要素定點符號化(應用於測量分析擴展模塊)SharedEdgeRenderer(EditorExt)用於繪制拓撲元素
常用的要素符號化類型主要有以下6種類型,如下圖所示:

2. RasterRender對象
RasterRender是一個抽象類,它有15個子類負責進行不同類型的着色運算。它們都實現了IRasterRender接口,這個接口定義了柵格圖層符號化的公共屬性和方法。可以通過IRasterLayer::Renderer屬性獲得一個柵格圖層的符號化對象。
要素符號化類型描述RasterRGBRenderer柵格RGB符號化RasterUniqueValueRenderer唯一值符號化RasterColormapRenderer雙變量唯一值符號化RasterClassifyColorRampRenderer圖表符號化RasterStretchColorRampRenderer分類等級符號化RasterDiscreteColorRenderer點密度 符號化柵格符號化類型結構圖如下圖所示:

以下代碼片段是對一個RasterLayer進行RasterStretchColorRampRenderer符號化操作:
///<summary>
/// StretchColorRamp符號化RasterLayer
///</summary>
///<param name="pRasterLayer">RasterLayer</param>
public void SetStretchColorRampRenderer(IRasterLayer pRasterLayer)
{
try
{
//創建RasterStretchColorRampRendererClass對象
IRasterStretchColorRampRenderer pRStretchRender= new RasterStretchColorRampRendererClass();
//QI到IRasterRenderer
IRasterRenderer pRasterRender=pRStretchRender as IRasterRenderer;
pRasterRender.Raster = pRasterLayer as IRaster;
pRasterRender.Update();
//創建兩個起始顏色
IRgbColor pFromRgbColor = new RgbColorClass();
pFromRgbColor.Red = 255;
IRgbColor pToRgbColor = new RgbColorClass();
pToRgbColor.Blue = 255;
//創建起止顏色帶
IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRampClass();
pAlgorithmicColorRamp.Size = 255;
pAlgorithmicColorRamp.FromColor = pFromRgbColor as IColor;
pAlgorithmicColorRamp.ToColor = pToRgbColor as IColor;
bool btrue= true;
pAlgorithmicColorRamp.CreateRamp(out btrue);
//選擇拉伸顏色帶符號化的波段
pRStretchRender.BandIndex = 0;
//設置拉伸顏色帶符號化所采用的顏色帶
pRStretchRender.ColorRamp = pAlgorithmicColorRamp as IColorRamp;
pRasterRender.Update();
//符號化RasterLayer
pRasterLayer.Renderer = pRasterRender;
}
catch(Exception Err)
{
MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
