等级渲染

来源:互联网 发布:晴天软件 编辑:程序博客网 时间:2024/04/28 09:41

等级渲染

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;            //////////////////////////////////////////////////////////////////////            /* We're going to retrieve frequency data from a population               field and then classify this data*/            ITable pTable;            pTable = pFeatureClass as ITable;            IBasicHistogram pBasicHist = new BasicTableHistogram();            ITableHistogram pTableHist;            pTableHist = (ITableHistogram)pBasicHist;            //Get values and frequencies for the population field into a table histogram object            pTableHist.Field = "ID";            pTableHist.Table = pTable;            pBasicHist.GetHistogram(out dataValues, out dataFrequency);            IClassifyGEN pClassifyGEN = new Quantile();            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 ClassBreaksRenderer();            pClassBreaksRenderer.Field = "ID";            //pClassBreaksRenderer.BreakCount = ClassesCount;            pClassBreaksRenderer.MinimumBreak = Classes[0];            pClassBreaksRenderer.SortClassesAscending = true;            //设置着色对象的分级数目            pClassBreaksRenderer.BreakCount = int.Parse(ClassesCount.ToString());            //创建并设置随机色谱            IAlgorithmicColorRamp pColorRamp = new AlgorithmicColorRamp();            pColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;            IEnumColors pEnumColors;            IRgbColor pColor1 = new RgbColor();            IRgbColor pColor2 = new RgbColor();            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);            pEnumColors = pColorRamp.Colors;            pEnumColors.Reset();// use this interface to set dialog properties             pUIProperties = pClassBreaksRenderer as IClassBreaksUIProperties;            pUIProperties.ColorRamp = "Custom";            ISimpleFillSymbol pSimpleMarkerSymbol = new SimpleFillSymbol();            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 SimpleFillSymbol();                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();        }


0 0