ArcGISEngine9.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) | 用于绘制拓扑元素 |
图13
由于篇幅有限不再对每一种符号化类型的使用进行讲解,在后边的实例中将为读者演示如何进行唯一值符号化。2.RasterRender对象
RasterRender是一个抽象类,它有15个子类负责进行不同类型的着色运算。它们都实现了IRasterRender接口,这个接口定义了栅格图层符号化的公共属性和方法。可以通过IRasterLayer::Renderer属性获得一个栅格图层的符号化对象。
要素符号化类型 | 描述 |
RasterRGBRenderer | 栅格RGB符号化 |
RasterUniqueValueRenderer | 唯一值符号化 |
RasterColormapRenderer | 双变量唯一值符号化 |
RasterClassifyColorRampRenderer | 图表符号化 |
RasterStretchColorRampRenderer | 分类等级符号化 |
RasterDiscreteColorRenderer | 点密度符号化 |
图14
以下代码片段是对一个RasterLayer进行RasterStretchColorRampRenderer符号化操作:///
///StretchColorRamp符号化RasterLayer
///
///RasterLayer
publicvoidSetStretchColorRampRenderer(IRasterLayerpRasterLayer)
{
try
{
//创建RasterStretchColorRampRendererClass对象
IRasterStretchColorRampRendererpRStretchRender=newRasterStretchColorRampRendererClass();
//QI到IRasterRenderer
IRasterRendererpRasterRender=pRStretchRenderasIRasterRenderer;
pRasterRender.Raster =pRasterLayerasIRaster;
pRasterRender.Update();
//创建两个起始颜色
IRgbColorpFromRgbColor=newRgbColorClass();
pFromRgbColor.Red = 255;
IRgbColorpToRgbColor=newRgbColorClass();
pToRgbColor.Blue = 255;
//创建起止颜色带
IAlgorithmicColorRamppAlgorithmicColorRamp=newAlgorithmicColorRampClass();
pAlgorithmicColorRamp.Size =255;
pAlgorithmicColorRamp.FromColor =pFromRgbColorasIColor;
pAlgorithmicColorRamp.ToColor =pToRgbColorasIColor;
boolbtrue=true;
pAlgorithmicColorRamp.CreateRamp(outbtrue);
//选择拉伸颜色带符号化的波段
pRStretchRender.BandIndex =0;
//设置拉伸颜色带符号化所采用的颜色带
pRStretchRender.ColorRamp =pAlgorithmicColorRampasIColorRamp;
pRasterRender.Update();
//符号化RasterLayer
pRasterLayer.Renderer =pRasterRender;
}}
catch(ExceptionErr)
{
MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}