• [转] AE之分级颜色专题图渲染


    原文 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] + " "; } 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();
    
            }
    View Code

    参考代码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();
    
     
    
     
    
            }
    View Code
  • 相关阅读:
    Redis 客户端
    Redis 数据库
    Redis 对象
    Redis 跳跃表
    Redis 字典
    Redis 链表实现
    Redis 事务
    winform,自定义文本框控件 实现文本框验证加水印功能
    WinForm中,每隔一段时间(参数)调用一次函数(使用定时器)
    GMap.Net 实现离线地图
  • 原文地址:https://www.cnblogs.com/arxive/p/5903535.html
Copyright © 2020-2023  润新知