利用ClassBreaksRenderer对线型图层着色,可是最后图层都不见了
public override void OnClick()
{
IGeoFeatureLayer pGeoFeatureL;
ITable pTable;
IClassifyGEN pClassify;
ITableHistogram pTableHistogram;
IBasicHistogram pHistogram;
object dataFrequency;
object dataValues;
double[] Classes;
//double[] Classes = new double[5];
//Classes[0] = 100; Classes[1] = 300; Classes[2] = 600; Classes[3] = 800; Classes[4] = 1800;
int ClassesCount;
IClassBreaksRenderer pClassBreaksRenderer;
IHsvColor pFromColor;
IHsvColor pToColor;
IAlgorithmicColorRamp pAlgorithmicCR;
IEnumColors pEnumColors;
bool ok;
IColor pColor;
ISimpleFillSymbol pSimpleFillS;
int IbreakIndex;
string strPopField = "Physical_PipeDiameter";//管径
int numDesiredClasses = 5;
//获得要着色的图层
pActiveView = m_hookHelper.ActiveView;
pMap = m_hookHelper.FocusMap;
pMap.ReferenceScale = 0;
pGeoFeatureL = (IGeoFeatureLayer)pMap.get_Layer(0);
pTable = (ITable)pGeoFeatureL.FeatureClass;
//从pTable的"Physical_PipeDiameter"字段中得到信息给dataValues和dataFrequency两个数组
pTableHistogram = new BasicTableHistogramClass();
pHistogram = (IBasicHistogram)pTableHistogram;
pTableHistogram.Field = strPopField;
pTableHistogram.Table = pTable;
pHistogram.GetHistogram(out dataValues,out dataFrequency);
//下面是分级方法,用于根据获得的值计算得出符合要求的数据
//根据条件计算出Classes和ClassesCount,5为分级数目
pClassify = new EqualIntervalClass();
try
{
pClassify.Classify(dataValues,dataFrequency,ref numDesiredClasses);
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
//返回一个数组
Classes = (double[])pClassify.ClassBreaks;
ClassesCount = Classes.GetUpperBound(0);
//ClassesCount = Classes.Length;
pClassBreaksRenderer = new ClassBreaksRendererClass();
pClassBreaksRenderer.Field = strPopField;
//设置着色对象的分级数目
pClassBreaksRenderer.BreakCount = ClassesCount;
pClassBreaksRenderer.SortClassesAscending = true;
//产生分级着色需要的颜色带对象的起止颜色对象
pFromColor = new HsvColorClass();
pFromColor.Hue = 60;//Yellow
pFromColor.Saturation = 100;
pFromColor.Value = 96;
pToColor = new HsvColorClass();
pToColor.Hue = 0;
pToColor.Saturation = 100;
pToColor.Value = 96;
//产生颜色带对象
pAlgorithmicCR = new AlgorithmicColorRampClass();
pAlgorithmicCR.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
pAlgorithmicCR.FromColor = pFromColor;
pAlgorithmicCR.ToColor = pToColor;
pAlgorithmicCR.Size = ClassesCount;
pAlgorithmicCR.CreateRamp(out ok);
//获得颜色
pEnumColors = pAlgorithmicCR.Colors;
//需要注意的是分级着色对象中的symbol和break的下标都是从0开始
for (IbreakIndex = 0; IbreakIndex <= ClassesCount - 1; IbreakIndex++)
{
pColor = pEnumColors.Next();
pSimpleFillS = new SimpleFillSymbolClass();
pSimpleFillS.Color = pColor;
//pSimpleFillS.Style = esriSimpleFillStyle.esriSFSSolid;
//这里就是构造不同颜色着色的方法
pClassBreaksRenderer.set_Symbol(IbreakIndex,(ISymbol)pSimpleFillS);
//着色对象的断点
pClassBreaksRenderer.set_Break(IbreakIndex,Classes[IbreakIndex+1]);
}
pGeoFeatureL.Renderer = (IFeatureRenderer)pClassBreaksRenderer;
pActiveView.Refresh();
}
{
IGeoFeatureLayer pGeoFeatureL;
ITable pTable;
IClassifyGEN pClassify;
ITableHistogram pTableHistogram;
IBasicHistogram pHistogram;
object dataFrequency;
object dataValues;
double[] Classes;
//double[] Classes = new double[5];
//Classes[0] = 100; Classes[1] = 300; Classes[2] = 600; Classes[3] = 800; Classes[4] = 1800;
int ClassesCount;
IClassBreaksRenderer pClassBreaksRenderer;
IHsvColor pFromColor;
IHsvColor pToColor;
IAlgorithmicColorRamp pAlgorithmicCR;
IEnumColors pEnumColors;
bool ok;
IColor pColor;
ISimpleFillSymbol pSimpleFillS;
int IbreakIndex;
string strPopField = "Physical_PipeDiameter";//管径
int numDesiredClasses = 5;
//获得要着色的图层
pActiveView = m_hookHelper.ActiveView;
pMap = m_hookHelper.FocusMap;
pMap.ReferenceScale = 0;
pGeoFeatureL = (IGeoFeatureLayer)pMap.get_Layer(0);
pTable = (ITable)pGeoFeatureL.FeatureClass;
//从pTable的"Physical_PipeDiameter"字段中得到信息给dataValues和dataFrequency两个数组
pTableHistogram = new BasicTableHistogramClass();
pHistogram = (IBasicHistogram)pTableHistogram;
pTableHistogram.Field = strPopField;
pTableHistogram.Table = pTable;
pHistogram.GetHistogram(out dataValues,out dataFrequency);
//下面是分级方法,用于根据获得的值计算得出符合要求的数据
//根据条件计算出Classes和ClassesCount,5为分级数目
pClassify = new EqualIntervalClass();
try
{
pClassify.Classify(dataValues,dataFrequency,ref numDesiredClasses);
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
//返回一个数组
Classes = (double[])pClassify.ClassBreaks;
ClassesCount = Classes.GetUpperBound(0);
//ClassesCount = Classes.Length;
pClassBreaksRenderer = new ClassBreaksRendererClass();
pClassBreaksRenderer.Field = strPopField;
//设置着色对象的分级数目
pClassBreaksRenderer.BreakCount = ClassesCount;
pClassBreaksRenderer.SortClassesAscending = true;
//产生分级着色需要的颜色带对象的起止颜色对象
pFromColor = new HsvColorClass();
pFromColor.Hue = 60;//Yellow
pFromColor.Saturation = 100;
pFromColor.Value = 96;
pToColor = new HsvColorClass();
pToColor.Hue = 0;
pToColor.Saturation = 100;
pToColor.Value = 96;
//产生颜色带对象
pAlgorithmicCR = new AlgorithmicColorRampClass();
pAlgorithmicCR.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
pAlgorithmicCR.FromColor = pFromColor;
pAlgorithmicCR.ToColor = pToColor;
pAlgorithmicCR.Size = ClassesCount;
pAlgorithmicCR.CreateRamp(out ok);
//获得颜色
pEnumColors = pAlgorithmicCR.Colors;
//需要注意的是分级着色对象中的symbol和break的下标都是从0开始
for (IbreakIndex = 0; IbreakIndex <= ClassesCount - 1; IbreakIndex++)
{
pColor = pEnumColors.Next();
pSimpleFillS = new SimpleFillSymbolClass();
pSimpleFillS.Color = pColor;
//pSimpleFillS.Style = esriSimpleFillStyle.esriSFSSolid;
//这里就是构造不同颜色着色的方法
pClassBreaksRenderer.set_Symbol(IbreakIndex,(ISymbol)pSimpleFillS);
//着色对象的断点
pClassBreaksRenderer.set_Break(IbreakIndex,Classes[IbreakIndex+1]);
}
pGeoFeatureL.Renderer = (IFeatureRenderer)pClassBreaksRenderer;
pActiveView.Refresh();
}
4 个回复
朱新颖
赞同来自: why小飞
why小飞
赞同来自:
why小飞
赞同来自:
朱新颖
赞同来自:
要回复问题请先登录或注册
发起人
相关问题
问题状态
—— 扫技术支持中心微信服务号!
—— 让GIS知乎问答随时随地!