/// <summary> /// 设置分级算法 /// </summary> /// <param name="classProperties">栅格分级渲染属性</param> /// <param name="classMethod">分级算法</param> private static void SetClassMethod(IRasterClassifyUIProperties classProperties, string classMethod) { //分级方法初始化 IClassifyGEN pClassifyGen; //判断分级方法,以获取分段点 switch (classMethod) { case "Equal Interval": pClassifyGen = new EqualIntervalClass(); break; case "Natural Breaks": pClassifyGen = new NaturalBreaksClass(); break; case "Quantile": pClassifyGen = new QuantileClass(); break; case "Geometrical Interval": pClassifyGen = new GeometricalIntervalClass(); break; default: pClassifyGen = new NaturalBreaksClass(); break; } //获取分级算法UID classProperties.ClassificationMethod = pClassifyGen.ClassID; }
private void classify() { if (layer2Symbolize == null) { return; } IFeatureClass featureClass = layer2Symbolize.FeatureClass; ITable pTable = (ITable)featureClass; ITableHistogram pTableHistogram = new BasicTableHistogramClass(); IBasicHistogram pHistogram = (IBasicHistogram)pTableHistogram; pTableHistogram.Field = strRendererField; if (strNormalizeField.ToLower() != "none") { pTableHistogram.NormField = strNormalizeField; } pTableHistogram.Table = pTable; object dataFrequency; object dataValues; pHistogram.GetHistogram(out dataValues, out dataFrequency); //下面是分级方法,用于根据获得的值计算得出符合要求的数据 //根据条件计算出Classes和ClassesCount,numDesiredClasses为预定的分级数目 IClassifyGEN pClassify = new NaturalBreaksClass(); switch (strClassifyMethod) { case "等间隔分类": pClassify = new EqualIntervalClass(); break; //case "预定义间隔分类": // pClassify = new DefinedIntervalClass(); // break; case "分位数分类": pClassify = new QuantileClass(); break; case "自然裂点分类": pClassify = new NaturalBreaksClass(); break; case "标准差分类": pClassify = new StandardDeviationClass(); break; case "几何间隔分类": pClassify = new GeometricalIntervalClass(); break; default: break; } int numDesiredClasses = gClassCount; pClassify.Classify(dataValues, dataFrequency, ref numDesiredClasses); gClassbreaks = (double[])pClassify.ClassBreaks; }
private void btnClassiFy_Click(object sender, EventArgs e) { ITable pTable = this.pLayer as ITable; object dataValues; object dataFrequency; //以下代码用TableHistogram和BasicHistogram统计出Table某一字段的值和值的频率 ITableHistogram pTableHistogram; pTableHistogram = new BasicTableHistogramClass(); pTableHistogram.Table = pTable; //需传入一个ITable pTableHistogram.Field = this.cbbClassBreakField.Text; //统计的字段 IBasicHistogram pBasicHistogram; pBasicHistogram = pTableHistogram as IBasicHistogram; pBasicHistogram.GetHistogram(out dataValues, out dataFrequency);//关键 //以下代码用IClassifyGEN和EqualInterval对象,基于分段数目,生成各段的临界值,并放在一个数组当中 IClassifyGEN pClassifyGEN; switch (this.cbbClassBreaksMethod.SelectedIndex) { case 0: pClassifyGEN = new EqualIntervalClass(); break; case 1: pClassifyGEN = new GeometricalIntervalClass(); break; case 2: pClassifyGEN = new NaturalBreaksClass(); break; case 3: pClassifyGEN = new QuantileClass(); break; default: pClassifyGEN = new EqualIntervalClass(); break; } //double[] classes; int classCount = int.Parse(this.cbbClassBreaksCount.Text); pClassifyGEN.Classify(dataValues, dataFrequency, ref classCount); //用到了上面ITableHistogram生成的值和值频率数组,关键!!!!!! this.classBreaks = pClassifyGEN.ClassBreaks as double[]; //注意,此对象下标从1开始(我觉得0为最开头,所以临界值从1开始有意义),关键!!!!!! this.lsvClassBreaksSymbol.Items.Clear(); string currentRange; for (int i = 0; i < classCount; i++) { currentRange = this.classBreaks[i].ToString() + " ~ " + this.classBreaks[i + 1].ToString(); this.lsvClassBreaksSymbol.Items.Add(currentRange); this.lsvClassBreaksSymbol.Items[i].SubItems.Add(currentRange); } }
private void classify() { if (layer2Symbolize == null) { return; } IFeatureClass featureClass = layer2Symbolize.FeatureClass; ITable pTable = featureClass as ITable; ITableHistogram pTableHistogram = new BasicTableHistogramClass(); IBasicHistogram pHistogram = pTableHistogram as IBasicHistogram; pTableHistogram.Field = strRendererField; if (strNormalizeField.ToLower() != "none") { pTableHistogram.NormField = strNormalizeField; } pTableHistogram.Table = pTable; object dataFrequency; object dataValues; pHistogram.GetHistogram(out dataValues, out dataFrequency); IClassifyGEN pClassify = new NaturalBreaksClass(); switch (strClassifyMethod) { case "Equal Interval": pClassify = new EqualIntervalClass(); break; case "Quantile": pClassify = new QuantileClass(); break; case "Natural Breaks": pClassify = new NaturalBreaksClass(); break; case "Geometrical Interval": pClassify = new GeometricalIntervalClass(); break; default: break; } int numDesiredClass = gClassCount; pClassify.Classify(dataValues, dataFrequency, ref numDesiredClass); gClassbreaks = (double[])pClassify.ClassBreaks; }
private void classify() { if (layer2Symbolize == null) return; IFeatureClass featureClass = layer2Symbolize.FeatureClass; ITable pTable = (ITable)featureClass; ITableHistogram pTableHistogram = new BasicTableHistogramClass(); IBasicHistogram pHistogram = (IBasicHistogram)pTableHistogram; pTableHistogram.Field = strRendererField; if (strNormalizeField.ToLower() != "none") pTableHistogram.NormField = strNormalizeField; pTableHistogram.Table = pTable; object dataFrequency; object dataValues; pHistogram.GetHistogram(out dataValues, out dataFrequency); //下面是分级方法,用于根据获得的值计算得出符合要求的数据 //根据条件计算出Classes和ClassesCount,numDesiredClasses为预定的分级数目 IClassifyGEN pClassify = new NaturalBreaksClass(); switch (strClassifyMethod) { case "等间隔分类": pClassify = new EqualIntervalClass(); break; //case "预定义间隔分类": // pClassify = new DefinedIntervalClass(); // break; case "分位数分类": pClassify = new QuantileClass(); break; case "自然裂点分类": pClassify = new NaturalBreaksClass(); break; //case "标准差分类": // pClassify = new StandardDeviationClass(); // break; case "几何间隔分类": pClassify = new GeometricalIntervalClass(); break; default: break; } int numDesiredClasses = gClassCount; pClassify.Classify(dataValues, dataFrequency, ref numDesiredClasses); gClassbreaks = (double[])pClassify.ClassBreaks; }
private void btnClassiFy_Click(object sender, EventArgs e) { ITable pTable = this.pLayer as ITable; object dataValues; object dataFrequency; //以下代码用TableHistogram和BasicHistogram统计出Table某一字段的值和值的频率 ITableHistogram pTableHistogram; pTableHistogram = new BasicTableHistogramClass(); pTableHistogram.Table = pTable;//需传入一个ITable pTableHistogram.Field = this.cbbClassBreakField.Text;//统计的字段 IBasicHistogram pBasicHistogram; pBasicHistogram = pTableHistogram as IBasicHistogram; pBasicHistogram.GetHistogram(out dataValues, out dataFrequency);//关键 //以下代码用IClassifyGEN和EqualInterval对象,基于分段数目,生成各段的临界值,并放在一个数组当中 IClassifyGEN pClassifyGEN; switch (this.cbbClassBreaksMethod.SelectedIndex) { case 0: pClassifyGEN = new EqualIntervalClass(); break; case 1: pClassifyGEN = new GeometricalIntervalClass(); break; case 2: pClassifyGEN = new NaturalBreaksClass(); break; case 3: pClassifyGEN = new QuantileClass(); break; default: pClassifyGEN = new EqualIntervalClass(); break; } //double[] classes; int classCount = int.Parse(this.cbbClassBreaksCount.Text); pClassifyGEN.Classify(dataValues, dataFrequency, ref classCount);//用到了上面ITableHistogram生成的值和值频率数组,关键!!!!!! this.classBreaks = pClassifyGEN.ClassBreaks as double[];//注意,此对象下标从1开始(我觉得0为最开头,所以临界值从1开始有意义),关键!!!!!! this.lsvClassBreaksSymbol.Items.Clear(); string currentRange; for (int i = 0; i < classCount; i++) { currentRange = this.classBreaks[i].ToString() + " ~ " + this.classBreaks[i + 1].ToString(); this.lsvClassBreaksSymbol.Items.Add(currentRange); this.lsvClassBreaksSymbol.Items[i].SubItems.Add(currentRange); } }