分级符号化
1.添加菜单
2.编写代码
private void 分级符号化ToolStripMenuItem_Click(object sender, EventArgs e)
{
int breakIndex;
string sFieldName = "cz";
object dataFrequency;
object dataValues;
int numclasses = 5;
IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();
pClassBreaksRenderer.Field = sFieldName; //设置分级字段
pClassBreaksRenderer.BreakCount = 5; //设置分级数目
pClassBreaksRenderer.SortClassesAscending = true;//分级后的图例是否按升级顺序排列
//创建一个新AlgorithmicColorRampClass对象
IAlgorithmicColorRamp algColorRamp = new AlgorithmicColorRampClass();
//创建起始颜色对象
IRgbColor startColor = new RgbColor();
startColor.Red = 255;
startColor.Green = 0;
startColor.Blue = 0;
//创建终止颜色对象
IRgbColor endColor = new RgbColor();
endColor.Red = 0;
endColor.Green = 255;
endColor.Blue = 0;
//设置AlgorithmicColorRampClass的起止颜色属性
algColorRamp.ToColor = startColor;
algColorRamp.FromColor = endColor;
//设置梯度类型
algColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;
//设置颜色带颜色数量
algColorRamp.Size = 5;
//创建颜色带
bool bture = true;
algColorRamp.CreateRamp(out bture);
//使用IEnumColors获取颜色带
IEnumColors pEnumColors = null;
pEnumColors = algColorRamp.Colors;
//设置5个picturebox的背景色为产生颜色带的5个颜色
IFeatureLayer pFeatLyr = axMapControl1.get_Layer(1) as IFeatureLayer;
IGeoFeatureLayer pGeoFeatureL = pFeatLyr as IGeoFeatureLayer;
//分级方法,用于根据获得的值计算得出符合要求的数据
ITable pTable = pGeoFeatureL.FeatureClass as ITable;
ITableHistogram pTableHistogram = new BasicTableHistogramClass();
IBasicHistogram pBasicHistogram = (IBasicHistogram)pTableHistogram;
pTableHistogram.Field = sFieldName;
pTableHistogram.Table = pTable;
pBasicHistogram.GetHistogram(out dataValues, out dataFrequency); //获取渲染字段的值及其出现的频率
IClassifyGEN pClassify = new EqualIntervalClass();
try
{
pClassify.Classify(dataValues, dataFrequency, ref numclasses);//根据获取字段的值和出现的频率对其进行等级划分
}
catch (Exception ex)
{
}
//需要注意的是分级着色对象中的symbol和break的下标都是从0开始
double[] Classes = (double[])pClassify.ClassBreaks;
for (breakIndex = 0; breakIndex <= 5 - 1; breakIndex++)
{
IColor pColor = pEnumColors.Next();
switch (pGeoFeatureL.FeatureClass.ShapeType)
{
case esriGeometryType.esriGeometryPolygon:
{
ISimpleFillSymbol pSimpleFillS = new SimpleFillSymbolClass();
pSimpleFillS.Color = pColor;
pSimpleFillS.Style = esriSimpleFillStyle.esriSFSSolid;
pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleFillS);//设置填充符号
pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);//设定每一分级的分级断点
break;
}
case esriGeometryType.esriGeometryPolyline:
{
ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbolClass();
pSimpleLineSymbol.Color = pColor;
pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleLineSymbol);
pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);
break;
}
case esriGeometryType.esriGeometryPoint:
{
ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass();
pSimpleMarkerSymbol.Color = pColor;
pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleMarkerSymbol);//设置填充符号
pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);//设定每一分级的分级断点
break;
}
}
}
pGeoFeatureL.Renderer = (IFeatureRenderer)pClassBreaksRenderer;
axMapControl1.Refresh();
axTOCControl1.Update();
}
3.添加的dll引用
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.esriSystem;