/// <summary>
/// 分级色彩
/// </summary>
/// <param name="pFeatLyr">渲染图层</param>
/// <param name="sFieldName">渲染字段</param>
/// <param name="numclasses">分级数目</param>
public void GraduatedColors(IFeatureLayer pFeatLyr, string sFieldName, int numclasses)
{
IGeoFeatureLayer pGeoFeatureL = pFeatLyr as IGeoFeatureLayer;
object dataFrequency;
object dataValues;
bool ok;
int breakIndex;
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)
{
}
//返回一个数组
double[] Classes = pClassify.ClassBreaks as double[];
int ClassesCount = Classes.GetUpperBound(0);
IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();
pClassBreaksRenderer.Field = sFieldName; //设置分级字段
pClassBreaksRenderer.BreakCount = ClassesCount; //设置分级数目
pClassBreaksRenderer.SortClassesAscending = true;//分级后的图例是否按升级顺序排列
//获得颜色
IEnumColors pEnumColors = CreateColorRamp(numclasses);//pAlgorithmicCR.Colors;
//需要注意的是分级着色对象中的symbol和break的下标都是从0开始
for (breakIndex = 0; breakIndex <= ClassesCount - 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;
mainform.axMapControl1.Refresh();
mainform.axTOCControl1.Update();
}
07-27
1770
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交