您的当前位置:首页栅格数据渲染

栅格数据渲染

来源:爱问旅游网
using System;

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; } } }

因篇幅问题不能全部显示,请点此查看更多更全内容