原文 AE之分级颜色专题图渲染
参考代码1
private void 分级渲染ToolStripMenuItem_Click(object sender, EventArgs e) { //值分级 IBasicHistogram pBasicHis = new BasicTableHistogramClass(); ITableHistogram pTabHis = (ITableHistogram)pBasicHis; pTabHis.Field = "w1"; ITable pTab = (ITable)axMapControl1.get_Layer(0); pTabHis.Table = pTab; object doubleArrVal, longArrFreq; pBasicHis.GetHistogram(out doubleArrVal, out longArrFreq); IClassifyGEN pClassify = new EqualIntervalClass(); //NaturalBreaksClass int nDes = 5; pClassify.Classify(doubleArrVal, longArrFreq, ref nDes); object classes = pClassify.ClassBreaks; System.Array pArr = (System.Array)classes; //算法梯度颜色 IAlgorithmicColorRamp pAlgoColorRamp = new AlgorithmicColorRampClass(); pAlgoColorRamp.Size = pArr.Length; IRgbColor pFromColor = new RgbColorClass(), pToColor = new RgbColorClass(); pFromColor.Red = 0; pFromColor.Green = 255; pFromColor.Blue = 0; pToColor.Red = 255; pToColor.Green = 0; pToColor.Blue = 255; pAlgoColorRamp.FromColor = pFromColor; pAlgoColorRamp.ToColor = pToColor; bool ok = true; pAlgoColorRamp.CreateRamp(out ok); //颜色梯度结束 IClassBreaksRenderer pRender = new ClassBreaksRendererClass(); pRender.BreakCount = pArr.Length; pRender.Field = "w1"; ISimpleFillSymbol pSym; for (int i = 0; i < pArr.Length; i++) { pRender.set_Break(i, (double)pArr.GetValue(i)); pSym = new SimpleFillSymbolClass(); pSym.Color = pAlgoColorRamp.get_Color(i); pRender.set_Symbol(i, (ISymbol)pSym); } IGeoFeatureLayer pGeoLyr = (IGeoFeatureLayer)axMapControl1.get_Layer(0); pGeoLyr.Renderer = (IFeatureRenderer)pRender; axMapControl1.Refresh(); axTOCControl1.Update(); }
参考代码2
private void 分层设色ToolStripMenuItem_Click(object sender, EventArgs e) { //获取当前图层 ,并把它设置成IGeoFeatureLayer的实例 IMap pMap = axMapControl1.Map; ILayer pLayer = pMap.get_Layer(0) as IFeatureLayer; IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer; IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFeatureLayer; //获取图层上的feature IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass; IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false); IFeature pFeature = pFeatureCursor.NextFeature(); // IFeatureRenderer PR=pGeoFeatureLayer.Renderer; //JoinData("县级区域", "DZGB", "sectioncode"); //join外部表 // int DC ; int desiredClasses = 5; string fieldName = "w1"; int classesCount; double[] classes; string strOutput = ""; bool ok; object dataFrequency; object dataValues; ITable pTable ; //IClassify pClassify; EqualIntervalClass pClassify; //IBasicHistogram pTableHistogram = new BasicTableHistogramClass(); //IHistogram pTableHistogram = new BasicTableHistogramClass(); ITableHistogram pTableHistogram = new BasicTableHistogramClass() as ITableHistogram; IBasicHistogram pHistogram; IClassBreaksRenderer pClassBreaksRenderer; IHsvColor pFromColor; IHsvColor pToColor; IAlgorithmicColorRamp pAlgorithmicColorRamp; IEnumColors pEnumColors; IColor pColor; ISimpleFillSymbol pSimpleFillSymbol; pLayer = (IFeatureLayer)axMapControl1.get_Layer(0); pGeoFeatureLayer = (IGeoFeatureLayer)pLayer; pTable = (ITable)pGeoFeatureLayer; pHistogram = (IBasicHistogram)pTableHistogram; // Get values and frequencies for the field pTableHistogram.Field = fieldName; pTableHistogram.Table = pTable; pHistogram.GetHistogram(out dataValues, out dataFrequency); // Put values and frequencies into an Equal Interval Classify Object pClassify = new EqualIntervalClass(); //pClassify = new NaturalBreaksClass(); pClassify.SetHistogramData(dataValues, dataFrequency); pClassify.Classify(dataValues, dataFrequency, ref desiredClasses); //pClassify.Classify(ref desiredClasses); classes = (double[])pClassify.ClassBreaks; classesCount = classes.Length; // Initialise a new Class Breaks renderer // Supply the number of Class Breaks and the field to perform. the class breaks on pClassBreaksRenderer = new ClassBreaksRendererClass(); pClassBreaksRenderer.Field = fieldName; pClassBreaksRenderer.BreakCount = classesCount; pClassBreaksRenderer.SortClassesAscending = true; // Use algorithmic color ramp to generate an range of colors between YELLOW to RED // Initial color: YELLOW pFromColor = new HsvColorClass(); pFromColor.Hue = 60; pFromColor.Saturation = 100; pFromColor.Value = 96; // Final color: RED pToColor = new HsvColorClass(); pToColor.Hue = 0; pToColor.Saturation = 100; pToColor.Value = 96; // Set up HSV Color ramp to span from YELLOW to RED pAlgorithmicColorRamp = new AlgorithmicColorRampClass(); pAlgorithmicColorRamp.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm; pAlgorithmicColorRamp.FromColor = pFromColor; pAlgorithmicColorRamp.ToColor = pToColor; pAlgorithmicColorRamp.Size = classesCount; pAlgorithmicColorRamp.CreateRamp(out ok); pEnumColors = pAlgorithmicColorRamp.Colors; for (int index = 0; index < classesCount - 1; index++) { pColor = pEnumColors.Next(); pSimpleFillSymbol = new SimpleFillSymbolClass(); pSimpleFillSymbol.Color = pColor; pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid; pClassBreaksRenderer.set_Symbol(index, (ISymbol)pSimpleFillSymbol); pClassBreaksRenderer.set_Break(index, classes[index + 1]); // Store each break value for user output strOutput += "-" + classes[index + 1] + "\n"; } pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer; //this.axMapControl1.Refresh(); ///////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////// //get the custom property from which is supposed to be the layer to be saved object customProperty = null; //IMapControl3 mapControl = null; customProperty = axMapControl1.CustomProperty; //ask the user to set a name for the new layer file SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Layer File|*.lyr|All Files|*.*"; saveFileDialog.Title = "生成专题图"; saveFileDialog.RestoreDirectory = true; saveFileDialog.FileName = System.IO.Path.Combine(saveFileDialog.InitialDirectory, pGeoFeatureLayer.Name + ".lyr"); //get the layer name from the user DialogResult dr = saveFileDialog.ShowDialog(); if (saveFileDialog.FileName != "" && dr == DialogResult.OK) { if (System.IO.File.Exists(saveFileDialog.FileName)) { //try to delete the existing file System.IO.File.Delete(saveFileDialog.FileName); } //create a new LayerFile instance ILayerFile layerFile = new LayerFileClass(); //create a new layer file layerFile.New(saveFileDialog.FileName); //attach the layer file with the actual layer layerFile.ReplaceContents((ILayer)pGeoFeatureLayer); //save the layer file layerFile.Save(); //ask the user whether he‘d like to add the layer to the map if (DialogResult.Yes == MessageBox.Show("Would you like to add the layer to the map?", "Message", MessageBoxButtons.YesNo,MessageBoxIcon.Question)) { axMapControl1.AddLayerFromFile(saveFileDialog.FileName, 0); } } IActiveView pActiveView = axMapControl1.Map as IActiveView; pActiveView.Refresh(); axTOCControl1.Update(); }
参考代码3
private void 等级专题图ToolStripMenuItem_Click(object sender, EventArgs e) { // 获取当前图层,并把它设置成IGeoFeatureLayer的实例 ILayer pLayer = axMapControl1.get_Layer(0); IFeatureLayer pFeatLayer = (IFeatureLayer)pLayer; IGeoFeatureLayer pGeoFeatLayer = (IGeoFeatureLayer)pLayer; IFeatureClass pFeatClass = pFeatLayer.FeatureClass; // We‘re going to retrieve frequency data from a population // field and then clasify this data ITable pTable = (ITable)pFeatClass; IBasicHistogram pBasicHistogram = new BasicTableHistogramClass(); ITableHistogram pTableHistogram = (ITableHistogram)pBasicHistogram; // Get values and frequencies for the population field into a table histogram object string fieldName = "w1"; pTableHistogram.Field = fieldName; pTableHistogram.Table = pTable; object dataValues; object dataFrequency; pBasicHistogram.GetHistogram(out dataValues, out dataFrequency); IClassifyGEN pClassifyGEN = new QuantileClass(); int numClass = 3; pClassifyGEN.Classify(dataValues, dataFrequency, ref numClass); double[] classes = (double[])pClassifyGEN.ClassBreaks; long classesCount = long.Parse(classes.GetUpperBound(0).ToString()); // Initialize a new class breaks renderer and supply the number of class breaks // and the field to perform the class breaks on IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass(); pClassBreaksRenderer.Field = fieldName; pClassBreaksRenderer.MinimumBreak = classes[0]; pClassBreaksRenderer.SortClassesAscending = true; // 设置着色对象的分级数目 pClassBreaksRenderer.BreakCount = int.Parse(classesCount.ToString()); // 创建并设置随机色谱 IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRampClass(); pAlgorithmicColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm; IEnumColors pEnumColors; IRgbColor pColor1 = new RgbColorClass(); IRgbColor pColor2 = new RgbColorClass(); pColor1.Red = 255; pColor1.Green = 210; pColor1.Blue = 210; pColor2.Red = 190; pColor2.Green = 0; pColor2.Blue = 170; pAlgorithmicColorRamp.FromColor = pColor1; pAlgorithmicColorRamp.ToColor = pColor2; pAlgorithmicColorRamp.Size = numClass; bool ok = true; pAlgorithmicColorRamp.CreateRamp(out ok); pEnumColors = pAlgorithmicColorRamp.Colors; pEnumColors.Reset(); IClassBreaksUIProperties pUIProperties = (IClassBreaksUIProperties)pClassBreaksRenderer; pUIProperties.ColorRamp = "Custom"; ISimpleFillSymbol pSimpleMarkerSymbol = new SimpleFillSymbolClass(); IColor pColor; int[] colors = new int[numClass]; // be careful, indices are different for the different lists for (int breakIndex = 0; breakIndex < classesCount; breakIndex++) { pClassBreaksRenderer.set_Label(breakIndex, classes[breakIndex] + "-" + classes[breakIndex + 1]); pUIProperties.set_LowBreak(breakIndex, classes[breakIndex]); ISimpleFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pColor = pEnumColors.Next(); pFillSymbol.Color = pColor; colors[breakIndex] = pColor.RGB; pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pFillSymbol); pClassBreaksRenderer.set_Break(breakIndex, classes[breakIndex + 1]); } // 将等级图渲染对象与渲染图层挂钩 pGeoFeatLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer; axMapControl1.ActiveView.Refresh(); axTOCControl1.Update(); }
参考代码4
private void 等级图ToolStripMenuItem_Click(object sender, EventArgs e) { //获取当前图层 ,并把它设置成IGeoFeatureLayer的实例 IMap pMap = axMapControl1.Map; ILayer pLayer = pMap.get_Layer(0) as IFeatureLayer; IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer; IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFeatureLayer; //获取图层上的feature IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass; IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false); IFeature pFeature = pFeatureCursor.NextFeature(); ////////////////////////////////////////////////////////////////////// //定义所需的接口对象和相关变量 IClassBreaksUIProperties pUIProperties; object dataValues; object dataFrequency; //double[] cb; int breakIndex; long ClassesCount; int numClass; numClass = 10; double[] Classes; ////////////////////////////////////////////////////////////////////// ITable pTable; pTable = pFeatureClass as ITable; IBasicHistogram pBasicHist = new BasicTableHistogramClass(); ITableHistogram pTableHist; pTableHist = (ITableHistogram)pBasicHist; //Get values and frequencies for the population field into a table histogram object pTableHist.Field = "w1"; pTableHist.Table = pTable; pBasicHist.GetHistogram(out dataValues, out dataFrequency); IClassifyGEN pClassifyGEN = new QuantileClass(); pClassifyGEN.Classify(dataValues, dataFrequency, ref numClass); Classes = (double[])pClassifyGEN.ClassBreaks; ClassesCount = long.Parse(Classes.GetUpperBound(0).ToString()); //Initialise a new class breaks renderer and supply the number of class breaks and the field to perform. the class breaks on. IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass(); pClassBreaksRenderer.Field = "w1"; //pClassBreaksRenderer.BreakCount = ClassesCount; pClassBreaksRenderer.MinimumBreak = Classes[0]; pClassBreaksRenderer.SortClassesAscending = true; //设置着色对象的分级数目 pClassBreaksRenderer.BreakCount = int.Parse(ClassesCount.ToString()); //创建并设置随机色谱 IAlgorithmicColorRamp pColorRamp = new AlgorithmicColorRampClass(); pColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm; IEnumColors pEnumColors; IRgbColor pColor1 = new RgbColorClass(); IRgbColor pColor2 = new RgbColorClass(); pColor1.Red = 255; pColor1.Green = 210; pColor1.Blue = 210; pColor2.Red = 190; pColor2.Green = 0; pColor2.Blue = 170; pColorRamp.FromColor = pColor1; pColorRamp.ToColor = pColor2; pColorRamp.Size = numClass; bool ok = true; //pColorRamp.CreateRamp(out ok); pColorRamp.CreateRamp(out ok); pEnumColors = pColorRamp.Colors; pEnumColors.Reset();// use this interface to set dialog properties pUIProperties = pClassBreaksRenderer as IClassBreaksUIProperties; pUIProperties.ColorRamp = "Custom"; ISimpleFillSymbol pSimpleMarkerSymbol = new SimpleFillSymbolClass(); IColor pColor; int[] colors = new int[numClass]; // be careful, indices are different for the diff lists for (breakIndex = 0; breakIndex < ClassesCount; breakIndex++) { pClassBreaksRenderer.set_Label(breakIndex, Classes[breakIndex] + " - " + Classes[breakIndex + 1]); pUIProperties.set_LowBreak(breakIndex, Classes[breakIndex]); pSimpleMarkerSymbol = new SimpleFillSymbolClass(); pColor = pEnumColors.Next(); pSimpleMarkerSymbol.Color = pColor; colors[breakIndex] = pColor.RGB; pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleMarkerSymbol); pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]); } //将等级图渲染对象与渲染图层挂钩 pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer; //刷新地图和TOOCotrol IActiveView pActiveView = axMapControl1.Map as IActiveView; pActiveView.Refresh(); axTOCControl1.Update(); }
时间: 2024-10-21 20:51:24