栅格影像作为一种非常重要的数据源被广泛应用在气象、环保、国土等行业中,对栅格数据显示渲染来突出某一方面的信息变的十分重要。如:在气象行业,时常需要对由散点温度生成的栅格影像按温度值做范围分级渲染,来展示不同地区在某一时段内的温度情况。
接下来介绍在ArcEngine下实现栅格影像数据的范围专题图的实现方法。
核心的函数段如下:
public bool ApplyRenderer(IRasterLayer sRlyr,AxMapControlpMapCtrl,bool UseRgb)
{
try
{
IRaster pRaster = sRlyr.Raster;
IRasterClassifyColorRampRenderer pClassRen = newRasterClassifyColorRampRendererClass();
IRasterRenderer pRasRen =pClassRen as IRasterRenderer;
pRasRen.Raster = pRaster;
pClassRen.ClassField = “Value”;
pClassRen.ClassCount = ColorSetlist.Keys.Count;
pRasRen.Update();
for(int i = 0; i < ColorSetlist.Keys.Count; ++i)
{
IFillSymbol pFSymbol = new SimpleFillSymbolClass();
IRgbColor pRClr = new RgbColorClass();
ColorSet sColorSet = ColorSetlist[ColorSetlist.Keys[i]];
if (!UseRgb)
pRClr.RGB = sColorSet.iColorValue;
else
{
pRClr.Red = sColorSet.iR;
pRClr.Green = sColorSet.iG;
pRClr.Blue = sColorSet.iB;
}
pFSymbol.Color = pRClr;
pClassRen.set_Break(i+1, Convert.ToInt32(ColorSetlist.Keys[i]));
pClassRen.set_Symbol(i, pFSymbol as ISymbol);
pClassRen.set_Label(i, (i+1).ToString());
}
pRasRen.Update();
sRlyr.Renderer = pClassRen as IRasterRenderer;
pMapCtrl.Refresh();
return true;
}
catch(Exception ee)
{
MessageBox.Show(ee.Message, “提示“,MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return false;
}
}
public classColorSet
{
publicdouble sBreak = 0;
public intiR = 0;
public intiG = 0;
public intiB = 0;
publicInt32 iColorValue = 0;
}
ColorSet类型是用来存储从配置表中读取的颜色信息用于栅格渲染时使用;需要提示大家注意的是,下面的代码段中红色部分,为范围专题图设置断点序号是从1开始的不是0,否则会出现相同的颜色配置、范围划分,而在程序和ArcMap中得到的渲染结果不一致的情况。
pClassRen.set_Break(i+1,Convert.ToInt32(ColorSetlist.Keys[i]));
pClassRen.set_Symbol(i, pFSymbol as ISymbol);
pClassRen.set_Label(i, (i+1).ToString());