using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.DataSourcesRaster; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.esriSystem;
using DevComponents.DotNetBar.Controls; namespace CASC.Class {
///
class RenderRasterLayer {
ILayer pLayerR;
public RenderRasterLayer(ILayer pLayer) {
this.pLayerR = pLayer; }
/// /// RGB渲染,必须为多波段影像 ///
public void RGBRenderer(int bandred, int bandgreen, int bandblue, int alpha, int styleindex, int param,bool backgorund,IColor pcolor) {
IRasterLayer rasterLayer = this.pLayerR as IRasterLayer; IRaster raster = rasterLayer.Raster;
IRasterBandCollection bandCol = raster as IRasterBandCollection; if (bandCol.Count < 3) { return; }
IRasterRGBRenderer2 rasterRGBRen = new RasterRGBRendererClass(); IRasterRenderer rasterRen = (IRasterRenderer)rasterRGBRen; rasterRen.Raster = raster; rasterRen.Update(); if (bandred > -1) {
rasterRGBRen.UseRedBand = true;
rasterRGBRen.RedBandIndex = bandred; } else {
rasterRGBRen.UseRedBand = false; }
if (bandgreen > -1) {
rasterRGBRen.UseGreenBand = true;
rasterRGBRen.GreenBandIndex = bandgreen; } else {
rasterRGBRen.UseGreenBand = false; }
if (bandblue > -1) {
rasterRGBRen.UseBlueBand = true;
rasterRGBRen.BlueBandIndex = bandblue; } else {
rasterRGBRen.UseBlueBand = false; }
if (alpha > -1) {
rasterRGBRen.UseAlphaBand = true; rasterRGBRen.AlphaBandIndex = alpha; } else {
rasterRGBRen.UseAlphaBand = false; }
IRasterStretch2 rasterStretchType = (IRasterStretch2)rasterRGBRen; if (styleindex ==0) {
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_StandardDeviations; rasterStretchType.StandardDeviationsParam = param; }
else if (styleindex == 1) {
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_HistogramEqualize; }
else if (styleindex == 2) {
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_HistogramSpecification; }
else if (styleindex == 3) {
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_MinimumMaximum; } else
{
rasterStretchType.StretchType = esriRasterStretchTypesEnum.esriRasterStretch_NONE; }
rasterStretchType.Invert = true;
rasterStretchType.Background = backgorund; rasterStretchType.BackgroundColor = pcolor; rasterRen.Update();
rasterLayer.Renderer = rasterRGBRen as IRasterRenderer; }
///
/// 分类数 /// 色带
public void ClassifyColorRampRenderer( IColorRamp colorRamp,string classfield,DataGridViewX datagridview) {
try {
IRasterLayer pRasterLayer = this.pLayerR as IRasterLayer; IRaster raster = pRasterLayer.Raster; IRasterRenderer pRasterRenderer = new RasterClassifyColorRampRendererClass();
pRasterRenderer.Raster = raster;
IRasterClassifyColorRampRenderer classifyRenderer = pRasterRenderer as IRasterClassifyColorRampRenderer;
int classcount = datagridview.RowCount; classifyRenderer.ClassCount = classcount; classifyRenderer.ClassField = classfield;
for (int i = 0; i < datagridview.RowCount; i++) {
classifyRenderer.set_Break(i,double.Parse( datagridview.Rows[i].Cells[0].Value.ToString()));
}
pRasterRenderer.Update(); colorRamp.Size = 15; bool pOk;
colorRamp.CreateRamp(out pOk); //create symbol for the classes
IFillSymbol fillSymbol = new SimpleFillSymbolClass(); for (int i = 0; i < classifyRenderer.ClassCount-1; i++) {
fillSymbol.Color = colorRamp.get_Color(i);
classifyRenderer.set_Symbol(i, (ISymbol)fillSymbol);
classifyRenderer.set_Label(i, classifyRenderer.get_Break(i).ToString() + \"—\" + datagridview.Rows[i].Cells[1].Value.ToString()); }
pRasterLayer.Renderer = classifyRenderer as IRasterRenderer; } catch { } }
/// /// 色带渲染,类似于拉伸渲染,这里没找到相应方法 ///
public void ColorMapRenderer() {
try {
IRasterLayer pRasterLayer = this.pLayerR as IRasterLayer; IRasterRenderer pRasterRenderer = new RasterColormapRendererClass(); pRasterRenderer.Raster = pRasterLayer.Raster; } catch { } }
///
///
public void UniqueValueRenderer(IColorRamp colorRamp,string renderfiled) {
try {
IRasterLayer pRasterLayer = this.pLayerR as IRasterLayer; IRasterUniqueValueRenderer uniqueValueRenderer = new RasterUniqueValueRendererClass();
IRasterRenderer pRasterRenderer = uniqueValueRenderer as IRasterRenderer;
IUniqueValues uniqueValues = new UniqueValuesClass(); IRasterCalcUniqueValues calcUniqueValues = new RasterCalcUniqueValuesClass();
calcUniqueValues.AddFromRaster(pRasterLayer.Raster, 0, uniqueValues);
IRasterRendererUniqueValues renderUniqueValues = uniqueValueRenderer as IRasterRendererUniqueValues;
renderUniqueValues.UniqueValues = uniqueValues; uniqueValueRenderer.Field = renderfiled;
colorRamp.Size = uniqueValues.Count; bool pOk;
colorRamp.CreateRamp(out pOk);
IRasterRendererColorRamp pRasterRendererColorRamp = uniqueValueRenderer as IRasterRendererColorRamp;
pRasterRendererColorRamp.ColorRamp = colorRamp; pRasterRenderer.Update();
pRasterLayer.Renderer = uniqueValueRenderer as IRasterRenderer; } catch { } }
///
/// 色带 public void StretchColorRampRenderer(IColorRamp colorRamp,int bandindex,bool background,int strechstyle,int parm,IColor pcolor) {
try {
IRasterLayer pRasterLayer = this.pLayerR as IRasterLayer; IRasterRenderer pRasterRenderer = new RasterStretchColorRampRendererClass();
pRasterRenderer.Raster = pRasterLayer.Raster;
IRasterStretchColorRampRenderer pRasterStretchRenderer = pRasterRenderer as IRasterStretchColorRampRenderer;
IRasterStretch2 rasterStretchType = pRasterStretchRenderer as IRasterStretch2;
if (strechstyle == 0) {
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_StandardDeviations;
rasterStretchType.StandardDeviationsParam = parm; }
else if (strechstyle == 1) {
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_HistogramEqualize; }
else if (strechstyle==2) {
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_HistogramSpecification; }
else if (strechstyle == 3)
{
rasterStretchType.StretchType =
esriRasterStretchTypesEnum.esriRasterStretch_MinimumMaximum ; } else {
rasterStretchType.StretchType = esriRasterStretchTypesEnum.esriRasterStretch_NONE; }
rasterStretchType.Invert = true;
rasterStretchType.Background =background; rasterStretchType.BackgroundColor = pcolor; colorRamp.Size = 5; bool pOk;
colorRamp.CreateRamp(out pOk);
pRasterStretchRenderer.BandIndex = bandindex; pRasterStretchRenderer.ColorRamp = colorRamp;
pRasterLayer.Renderer = pRasterStretchRenderer as IRasterRenderer; } catch { } }
///
///
public void DiscreteColorRenderer(IColorRamp colorRamp,int colornum) {
try {
IRasterLayer pRasterLayer = this.pLayerR as IRasterLayer; IRasterDiscreteColorRenderer pDiscreteColorRenderer = new RasterDiscreteColorRendererClass();
IRasterRenderer pRasterRenderer = pDiscreteColorRenderer as IRasterRenderer;
colorRamp.Size = 300; bool pOk;
colorRamp.CreateRamp(out pOk);
IRasterRendererColorRamp pRasterEndererColorRamp = pRasterRenderer as IRasterRendererColorRamp;
pRasterEndererColorRamp.ColorRamp = colorRamp; pDiscreteColorRenderer.NumColors = colornum; pRasterRenderer.Raster = pRasterLayer.Raster; pRasterLayer.Renderer = pRasterRenderer; } catch
{ } }
public void uniquevalue(IColorRamp colorRamp) {
IRasterUniqueValueRenderer pUVRenderer = new RasterUniqueValueRendererClass();
IRasterRenderer pRenderer = (IRasterRenderer)pUVRenderer; IRasterLayer prasterlayer = pLayerR as IRasterLayer; //Get raster from layer and associate with renderer IRaster pRaster =prasterlayer.Raster;
//Calculate unique values from the raster dataset. IUniqueValues pUValues = new UniqueValuesClass();
IRasterCalcUniqueValues pUVCal = new RasterCalcUniqueValuesClass(); pUVCal.AddFromRaster(pRaster, 0, pUValues);
//Set the unique values to the renderer
IRasterRendererUniqueValues pRenUniqueValues = (IRasterRendererUniqueValues)pUVRenderer;
pRenUniqueValues.UniqueValues = pUValues; //Define color ramp for the renderer
IRasterRendererColorRamp pRamp = (IRasterRendererColorRamp)pUVRenderer; //IRandomColorRamp pColorRamp = new RandomColorRampClass(); //pColorRamp.Size = pUValues.Count; //pColorRamp.Seed = 500; //Boolean createColorRamp;
//pColorRamp.CreateRamp(out createColorRamp);
pRamp.ColorRamp = colorRamp;
//Update the renderer and plug into layer pRenderer.Update();
prasterlayer.Renderer = (IRasterRenderer)pUVRenderer;
}
///
///
public IColorRamp ColorRamp() {
IRandomColorRamp pRandomColorRamp = new RandomColorRampClass(); //为渲染符号创建一个色带
pRandomColorRamp.MinSaturation = 20; pRandomColorRamp.MaxSaturation = 40;
pRandomColorRamp.MinValue = 85; pRandomColorRamp.MaxValue = 100; pRandomColorRamp.StartHue = 76; pRandomColorRamp.EndHue = 188; pRandomColorRamp.UseSeed = true; pRandomColorRamp.Seed = 43;
return pRandomColorRamp as IColorRamp; } } }
因篇幅问题不能全部显示,请点此查看更多更全内容