/// <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; }
internal static void UsingRasterClassifyRendered1(IRasterLayer irasterLayer_0, int int_0, string string_0) { bool flag; IRaster raster = irasterLayer_0.Raster; IRasterClassifyColorRampRenderer o = new RasterClassifyColorRampRenderer(); IRasterRenderer renderer2 = o as IRasterRenderer; renderer2.Raster = raster; o.ClassField = string_0; o.ClassCount = int_0; IClassify classify = new EqualInterval() as IClassify; UID classID = classify.ClassID; IRasterClassifyUIProperties properties = o as IRasterClassifyUIProperties; properties.ClassificationMethod = classID; renderer2.Update(); IColorRamp ramp = ColorManage.CreateColorRamp(); ramp.Size = int_0; ramp.CreateRamp(out flag); IFillSymbol symbol = new SimpleFillSymbol(); for (int i = 0; i < o.ClassCount; i++) { symbol.Color = ramp.get_Color(i); o.set_Symbol(i, symbol as ISymbol); } renderer2.Update(); irasterLayer_0.Renderer = o as IRasterRenderer; Marshal.ReleaseComObject(o); o = null; }
public static void classifyRender(IRasterLayer rastlayer, string classMethod, int count, IColorRamp ramp) { try { IRasterBand band = GetBand(rastlayer); if (band.Histogram == null) { band.ComputeStatsAndHist(); } IRasterClassifyColorRampRenderer rasClassifyRender = new RasterClassifyColorRampRendererClass(); IRasterRenderer rasRender = rasClassifyRender as IRasterRenderer; rasRender.Raster = rastlayer.Raster; rasRender.Update(); int numClasses = count; IClassify classify = null; switch (classMethod) { case "等间距分级": classify = new EqualIntervalClass(); break; case "自然断点分级": classify = new NaturalBreaksClass(); break; } classify.Classify(ref numClasses); double[] Classes = classify.ClassBreaks as double[]; UID pUid = classify.ClassID; IRasterClassifyUIProperties rasClassifyUI = rasClassifyRender as IRasterClassifyUIProperties; rasClassifyUI.ClassificationMethod = pUid; rasClassifyRender.ClassField = "Value"; rasClassifyRender.ClassCount = count; rasRender.Update(); IColor pColor; ISimpleFillSymbol pSym; for (int j = 0; j < count; j++) { pColor = ramp.get_Color(j * (ramp.Size - 1) / (count - 1)); pSym = new SimpleFillSymbolClass(); pSym.Color = pColor; rasClassifyRender.set_Symbol(j, (ISymbol)pSym); rasClassifyRender.set_Break(j, rasClassifyRender.get_Break(j)); } rasRender.Update(); rastlayer.Renderer = rasClassifyRender as IRasterRenderer; } catch { XtraMessageBox.Show("唯一值数量已达到限制(65536)"); } }
/// <summary> /// 获取分级渲染设置 /// </summary> /// <param name="classField">字段</param> /// <param name="classCount">类别总数</param> /// <param name="classMethod">分级算法</param> /// <returns></returns> public IRasterClassifyColorRampRenderer GetRasterClassifyRenderer(string classField, int classCount, string classMethod) { //先计算统计值,不然无法获取分类数据 CalculateRasterStatistics(rasterLayer); IRasterClassifyColorRampRenderer pRClassRend = new RasterClassifyColorRampRendererClass(); //分级属性接口 IRasterClassifyUIProperties classProperties = pRClassRend as IRasterClassifyUIProperties; //设置分级算法 SetClassMethod(classProperties, classMethod); //字段 pRClassRend.ClassField = classField; //类别总数 pRClassRend.ClassCount = classCount; IRasterRenderer rasterRend = (IRasterRenderer)pRClassRend; rasterRend.Raster = rasterLayer.Raster; rasterRend.Update(); return(pRClassRend); }
//public void RasterClassify(IRasterLayer rastlayer, string classMethod, int count, IColorRamp ramp,double minValue) //{ // IRasterBand band = GetBand(rastlayer); // if (band.Histogram == null) // { // band.ComputeStatsAndHist(); // } // IRasterClassifyColorRampRenderer rasClassifyRender = new RasterClassifyColorRampRendererClass(); // IRasterRenderer rasRender = rasClassifyRender as IRasterRenderer; // rasRender.Raster = rastlayer.Raster; // rasRender.Update(); // int numClasses = count; // IRasterHistogram pRasterHistogram = band.Histogram; // double[] dblValues = pRasterHistogram.Counts as double[]; // int intValueCount = dblValues.GetUpperBound(0) + 1; // double[] vValues = new double[intValueCount]; // IRasterStatistics pRasterStatistic = band.Statistics; // //double dMaxValue = pRasterStatistic.Maximum; // double dMaxValue = minValue; // double dMinValue = pRasterStatistic.Minimum; // double BinInterval = Convert.ToDouble((dMaxValue - dMinValue) / intValueCount); // for (int i = 0; i < intValueCount; i++) // { // vValues[i] = i * BinInterval + pRasterStatistic.Minimum; // } // long[] longvalues = new long[dblValues.Length]; // for (int i = 0; i <= dblValues.Length - 1; i++) // { // longvalues[i] = long.Parse(Convert.ToString(dblValues[i])); // } // //IClassifyGEN classify = null; // IClassify classify = null; // switch (classMethod) // { // case "等间距分级": // EqualInterval eqclassify = new EqualIntervalClass(); // eqclassify.Classify(vValues, longvalues, ref numClasses); // classify = eqclassify as IClassify; // break; // case "自然断点分级": // NaturalBreaks naclassify = new NaturalBreaksClass(); // naclassify.Classify(vValues, longvalues, ref numClasses); // classify = naclassify as IClassify; // break; // } // //switch (classMethod) // //{ // // case "等间距分级": // // classify = new EqualIntervalClass(); // // break; // // case "自然断点分级": // // classify = new NaturalBreaksClass(); // // break; // //} // //classify.Classify(vValues, longvalues, ref numClasses); // double[] Classes = classify.ClassBreaks as double[]; // UID pUid = classify.ClassID; // IRasterClassifyUIProperties rasClassifyUI = rasClassifyRender as IRasterClassifyUIProperties; // rasClassifyUI.ClassificationMethod = pUid; // rasClassifyRender.ClassCount = count; // IColor pColor; // ISimpleFillSymbol pSym; // for (int j = 0; j < count; j++) // { // pColor = ramp.get_Color(j * (ramp.Size / count)); // pSym = new SimpleFillSymbolClass(); // pSym.Color = pColor; // rasClassifyRender.set_Symbol(j, (ISymbol)pSym); // rasRender.Update(); // if (Classes[j] == 0) // { // rasClassifyRender.set_Label(j, Classes[j].ToString() + "-" + Classes[j + 1].ToString("0.000")); // rasRender.Update(); // } // else // { // rasClassifyRender.set_Label(j, Classes[j].ToString("0.000") + "-" + Classes[j + 1].ToString("0.000")); // rasRender.Update(); // } // } // rastlayer.Renderer = rasClassifyRender as IRasterRenderer; public void RasterClassify(IRasterLayer rastlayer, string classMethod, int count, IColorRamp ramp) { try { //进行唯一值判断 IUniqueValues values = new UniqueValuesClass(); IRasterCalcUniqueValues unique = new RasterCalcUniqueValuesClass(); unique.AddFromRaster(rastlayer.Raster, 0, values); int uniquecount = values.get_UniqueCount(0); //计算统计图 IRasterBand band = GetBand(rastlayer); if (band.Histogram == null) { band.ComputeStatsAndHist(); } IRasterClassifyColorRampRenderer rasClassifyRender = new RasterClassifyColorRampRendererClass(); IRasterRenderer rasRender = rasClassifyRender as IRasterRenderer; rasRender.Raster = rastlayer.Raster; rasRender.Update(); int numClasses = count; IRasterHistogram pRasterHistogram = band.Histogram; double[] dblValues = pRasterHistogram.Counts as double[]; int intValueCount = dblValues.GetUpperBound(0) + 1; double[] vValues = new double[intValueCount]; IRasterStatistics pRasterStatistic = band.Statistics; double dMaxValue = pRasterStatistic.Maximum; double dMinValue = pRasterStatistic.Minimum; if (dMinValue == 0) { pRasterStatistic.IgnoredValues = pRasterStatistic.Minimum; pRasterStatistic.Recalculate(); dMinValue = pRasterStatistic.Minimum; } double BinInterval = Convert.ToDouble((dMaxValue - dMinValue) / intValueCount); for (int i = 0; i < intValueCount; i++) { vValues[i] = i * BinInterval + pRasterStatistic.Minimum; } long[] longvalues = new long[dblValues.Length]; for (int i = 0; i <= dblValues.Length - 1; i++) { longvalues[i] = long.Parse(Convert.ToString(dblValues[i])); } //IClassifyGEN classify = null; IClassify classify = null; switch (classMethod) { case "等间距分级": EqualInterval eqclassify = new EqualIntervalClass(); eqclassify.Classify(vValues, longvalues, ref numClasses); classify = eqclassify as IClassify; break; case "自然断点分级": NaturalBreaks naclassify = new NaturalBreaksClass(); naclassify.Classify(vValues, longvalues, ref numClasses); classify = naclassify as IClassify; break; } #region //switch (classMethod) //{ // case "等间距分级": // classify = new EqualIntervalClass(); // break; // case "自然断点分级": // classify = new NaturalBreaksClass(); // break; //} //classify.Classify(vValues, longvalues, ref numClasses); #endregion double[] Classes = classify.ClassBreaks as double[]; int n = Classes.Count(); double dn = Classes[0]; UID pUid = classify.ClassID; IRasterClassifyUIProperties rasClassifyUI = rasClassifyRender as IRasterClassifyUIProperties; rasClassifyUI.ClassificationMethod = pUid; rasClassifyRender.ClassCount = count; IColor pColor; ISimpleFillSymbol pSym; //排除数值 double[] exdouble = new double[2] { 0, Classes[0] }; IRasterDataExclusion ex = rasClassifyRender as IRasterDataExclusion; ex.ExcludeValues = exdouble; ex.ExcludeColor = GET(255, 255, 255); for (int j = 0; j < count; j++) { pColor = ramp.get_Color(j * (ramp.Size / count)); pSym = new SimpleFillSymbolClass(); pSym.Color = pColor; rasClassifyRender.set_Symbol(j, (ISymbol)pSym); rasRender.Update(); rasClassifyRender.set_Break(j, rasClassifyRender.get_Break(j)); rasClassifyRender.set_Label(j, Classes[j].ToString("0.000") + "-" + Classes[j + 1].ToString("0.000")); rasRender.Update(); } //IRasterProps rasterProps = (IRasterProps)rastlayer.Raster; //rasterProps.NoDataValue = 0; //IRasterDisplayProps props = rasClassifyRender as IRasterDisplayProps; //props.NoDataColor = GET(255, 255, 255); //rasRender.Update(); rastlayer.Renderer = rasClassifyRender as IRasterRenderer; } catch (Exception ex) { //MessageBox.Show(ex.ToString()); if (ex.ToString().Contains("唯一值过多")) { MessageBox.Show("唯一值数量已达到限制(65536)"); } else { MessageBox.Show("还未计算唯一值,进行唯一值计算!"); } } //catch //{ // MessageBox.Show("数据需要先计算统计值,请点击确定进行计算!"); //} }
public void RasterClassify(IRasterLayer rastlayer, string classMethod, int count, IColorRamp ramp) { IRasterBand band = GetBand(rastlayer); if (band.Histogram == null) { band.ComputeStatsAndHist(); } IRasterClassifyColorRampRenderer rasClassifyRender = new RasterClassifyColorRampRendererClass(); IRasterRenderer rasRender = rasClassifyRender as IRasterRenderer; rasRender.Raster = rastlayer.Raster; rasRender.Update(); int numClasses = count; IRasterHistogram pRasterHistogram = band.Histogram; double[] dblValues = pRasterHistogram.Counts as double[]; int intValueCount = dblValues.GetUpperBound(0) + 1; double[] vValues = new double[intValueCount]; IRasterStatistics pRasterStatistic = band.Statistics; double dMaxValue = pRasterStatistic.Maximum; double dMinValue = pRasterStatistic.Minimum; if (dMinValue == 0) { pRasterStatistic.IgnoredValues = pRasterStatistic.Minimum; pRasterStatistic.Recalculate(); dMinValue = pRasterStatistic.Minimum; } double BinInterval = Convert.ToDouble((dMaxValue - dMinValue) / intValueCount); for (int i = 0; i < intValueCount; i++) { vValues[i] = i * BinInterval + pRasterStatistic.Minimum; } long[] longvalues = new long[dblValues.Length]; for (int i = 0; i <= dblValues.Length - 1; i++) { longvalues[i] = long.Parse(Convert.ToString(dblValues[i])); } //IClassifyGEN classify = null; IClassify classify = null; switch (classMethod) { case "等间距分级": EqualInterval eqclassify = new EqualIntervalClass(); eqclassify.Classify(vValues, longvalues, ref numClasses); classify = eqclassify as IClassify; break; case "自然断点分级": NaturalBreaks naclassify = new NaturalBreaksClass(); naclassify.Classify(vValues, longvalues, ref numClasses); classify = naclassify as IClassify; break; } //switch (classMethod) //{ // case "等间距分级": // classify = new EqualIntervalClass(); // break; // case "自然断点分级": // classify = new NaturalBreaksClass(); // break; //} //classify.Classify(vValues, longvalues, ref numClasses); double[] Classes = classify.ClassBreaks as double[]; UID pUid = classify.ClassID; IRasterClassifyUIProperties rasClassifyUI = rasClassifyRender as IRasterClassifyUIProperties; rasClassifyUI.ClassificationMethod = pUid; rasClassifyRender.ClassCount = count; IColor pColor; ISimpleFillSymbol pSym; for (int j = 0; j < count; j++) { IRasterProps rasterProps = (IRasterProps)rastlayer.Raster; rasterProps.NoDataValue = 0; pColor = ramp.get_Color(j * (ramp.Size / count)); pSym = new SimpleFillSymbolClass(); pSym.Color = pColor; rasClassifyRender.set_Symbol(j, (ISymbol)pSym); rasRender.Update(); rasClassifyRender.set_Break(j, rasClassifyRender.get_Break(j)); rasClassifyRender.set_Label(j, Classes[j].ToString("0.000") + "-" + Classes[j + 1].ToString("0.000")); rasRender.Update(); } rastlayer.Renderer = rasClassifyRender as IRasterRenderer; }
public static void UsingRasterClassifyRendered(IRasterLayer irasterLayer_0, int int_0, string string_0) { try { bool flag; IRaster raster = irasterLayer_0.Raster; IRasterBand band = (raster as IRasterBandCollection).Item(0); band.HasTable(out flag); if (flag) { int num2; bool flag2; IRasterClassifyColorRampRenderer renderer = new RasterClassifyColorRampRenderer(); IRasterRenderer renderer2 = renderer as IRasterRenderer; renderer2.Raster = raster; ITable attributeTable = band.AttributeTable; ITableHistogram tableHistogram = new BasicTableHistogram() as ITableHistogram; tableHistogram.Field = string_0; tableHistogram.Table = attributeTable; ITableHistogram histogram = tableHistogram as ITableHistogram; double maximum = (histogram as IStatisticsResults).Maximum; IClassify classify = new EqualInterval() as IClassify; (classify as IClassifyMinMax).Minimum = (histogram as IStatisticsResults).Minimum; (classify as IClassifyMinMax).Maximum = (histogram as IStatisticsResults).Maximum; int_0--; classify.Classify(ref int_0); object classBreaks = classify.ClassBreaks; UID classID = classify.ClassID; IRasterClassifyUIProperties properties = renderer as IRasterClassifyUIProperties; properties.ClassificationMethod = classID; renderer.ClassCount = int_0; renderer.ClassField = string_0; for (num2 = 0; num2 < int_0; num2++) { renderer.set_Break(num2, ((double[])classBreaks)[num2]); } IColorRamp ramp = ColorManage.CreateColorRamp(); ramp.Size = int_0; ramp.CreateRamp(out flag2); IFillSymbol symbol = new SimpleFillSymbol(); for (num2 = 0; num2 < renderer.ClassCount; num2++) { double num4; symbol.Color = ramp.get_Color(num2); renderer.set_Symbol(num2, symbol as ISymbol); double num3 = ((double[])classBreaks)[num2]; if (num2 == (renderer.ClassCount - 1)) { num4 = maximum; } else { num4 = ((double[])classBreaks)[num2 + 1]; } renderer.set_Label(num2, num3.ToString() + "-" + num4.ToString()); } renderer2.Update(); irasterLayer_0.Renderer = renderer as IRasterRenderer; } else { UsingRasterClassifyRendered1(irasterLayer_0, int_0, string_0); } } catch (Exception exception) { CErrorLog.writeErrorLog(null, exception, "栅格渲染"); } }
public void RasterClassify(IRasterLayer rastlayer, string classMethod, int count, IColorRamp ramp) { try { //计算统计图 IRasterBand band = GetBand(rastlayer); if (band.Histogram == null) { band.ComputeStatsAndHist(); } IRasterClassifyColorRampRenderer rasClassifyRender = new RasterClassifyColorRampRendererClass(); IRasterRenderer rasRender = rasClassifyRender as IRasterRenderer; rasRender.Raster = rastlayer.Raster; rasRender.Update(); int numClasses = count; IRasterHistogram pRasterHistogram = band.Histogram; double[] dblValues = pRasterHistogram.Counts as double[]; int intValueCount = dblValues.GetUpperBound(0) + 1; double[] vValues = new double[intValueCount]; IRasterStatistics pRasterStatistic = band.Statistics; double dMaxValue = pRasterStatistic.Maximum; double dMinValue = pRasterStatistic.Minimum; double BinInterval = Convert.ToDouble((dMaxValue - dMinValue) / intValueCount); for (int i = 0; i < intValueCount; i++) { vValues[i] = i * BinInterval + pRasterStatistic.Minimum; } long[] longvalues = new long[dblValues.Length]; for (int i = 0; i <= dblValues.Length - 1; i++) { longvalues[i] = long.Parse(Convert.ToString(dblValues[i])); } //IClassifyGEN classify = null; IClassify classify = null; switch (classMethod) { case "等间距分级": classify = new EqualIntervalClass(); break; case "自然断点分级": classify = new NaturalBreaksClass(); break; } classify.Classify(ref numClasses); double[] Classes = classify.ClassBreaks as double[]; UID pUid = classify.ClassID; IRasterClassifyUIProperties rasClassifyUI = rasClassifyRender as IRasterClassifyUIProperties; rasClassifyUI.ClassificationMethod = pUid; rasClassifyRender.ClassCount = count; IColor pColor; ISimpleFillSymbol pSym; for (int j = 0; j < count; j++) { pColor = ramp.get_Color(j * (ramp.Size - 1) / (count - 1)); pSym = new SimpleFillSymbolClass(); pSym.Color = pColor; rasClassifyRender.set_Symbol(j, (ISymbol)pSym); rasRender.Update(); rasClassifyRender.set_Break(j, rasClassifyRender.get_Break(j)); //rasClassifyRender.set_Label(j, Classes[j].ToString("0.000") + "-" + Classes[j + 1].ToString("0.000")); rasRender.Update(); } //IRasterProps rasterProps = (IRasterProps)rastlayer.Raster; //rasterProps.NoDataValue = 0; //IRasterDisplayProps props = rasClassifyRender as IRasterDisplayProps; //props.NoDataColor = GET(255, 255, 255); //rasRender.Update(); rastlayer.Renderer = rasClassifyRender as IRasterRenderer; } catch { MessageBox.Show("唯一值数量已达到限制(65536)"); } }