arcengine 的几种统计图绘制

来源:互联网 发布:洛奇英雄传mac版 编辑:程序博客网 时间:2024/05/23 00:41
        //获取颜色对象        static public IRgbColor getRGB(int r, int g, int b)        {            IRgbColor pColor;            pColor = new RgbColorClass();            pColor.Red = r;            pColor.Green = g;            pColor.Blue = b;            return pColor;        }        static public IGeoFeatureLayer GetLevelMap(IGeoFeatureLayer geoFeatureLayer, string field, int classCount)        {            ITableHistogram tableHistogram;            IBasicHistogram basicHistogram;            ITable table;            ILayer layer = geoFeatureLayer as ILayer;            table = layer as ITable;            tableHistogram = new BasicTableHistogramClass();            //按照 数值字段分级            tableHistogram.Table = table;            tableHistogram.Field = field;            basicHistogram = tableHistogram as IBasicHistogram;            object values;            object frequencys;            //先统计每个值和各个值出现的次数            basicHistogram.GetHistogram(out values, out frequencys);            //创建平均分级对象            IClassifyGEN classifyGEN = new QuantileClass();            //用统计结果进行分级 ,级别数目为classCount            classifyGEN.Classify(values, frequencys, ref classCount);            //获得分级结果,是个 双精度类型数组             double[] classes;            classes = classifyGEN.ClassBreaks as double[];            IEnumColors enumColors = CreateAlgorithmicColorRamp(classes.Length).Colors;            IColor color;            IClassBreaksRenderer classBreaksRenderer = new ClassBreaksRendererClass();            classBreaksRenderer.Field = field;            classBreaksRenderer.BreakCount = classCount;            classBreaksRenderer.SortClassesAscending = true;            ISimpleFillSymbol simpleFillSymbol;            for (int i = 0; i < classes.Length - 1; i++)            {                color = enumColors.Next();                simpleFillSymbol = new SimpleFillSymbolClass();                simpleFillSymbol.Color = color;                simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;                classBreaksRenderer.set_Symbol(i, simpleFillSymbol as ISymbol);                classBreaksRenderer.set_Break(i, classes[i + 1]);                //构造显示的文字                classBreaksRenderer.set_Label(i, classes[i].ToString() + "——" + classes[i + 1].ToString());                classBreaksRenderer.set_Description(i, "sfhskdfks");                //着色对象的断点                          }            if (geoFeatureLayer != null)            {                geoFeatureLayer.Renderer = classBreaksRenderer as IFeatureRenderer;            }            return geoFeatureLayer;        }        static public IGeoFeatureLayer GetChartMap(IGeoFeatureLayer geofeatureLayer, List<string> fields, List<string> alias)        {            //   IGeoFeatureLayer geofeatureLayer = Lib.Layer.getShpLayer(path, layerName)  as IGeoFeatureLayer;              ITable table = geofeatureLayer as ITable;            geofeatureLayer.ScaleSymbols = true;            IChartRenderer chartRenderer = new ChartRendererClass();            IRendererFields rendererFields = chartRenderer as IRendererFields;            for (int i = 0; i < fields.Count; i++)            {                rendererFields.AddField(fields[i], alias[i]);            }            double maxValue = 0;            ICursor cursor = table.Search(null, true);            IRowBuffer rowBuffer = cursor.NextRow();            while (rowBuffer != null)            {                for (int i = 0; i < fields.Count; i++)                {                    double fieldValue;                    try                    {                        fieldValue = double.Parse(rowBuffer.get_Value(table.FindField(fields[i])).ToString());                    }                    catch (Exception ex)                    {                        fieldValue = 0;                    }                    maxValue = Math.Max(maxValue, fieldValue);                }                rowBuffer = cursor.NextRow();            }            IBarChartSymbol barChartSymbol = new BarChartSymbolClass();            barChartSymbol.Width = 5;            IMarkerSymbol markerSymbol = barChartSymbol as IMarkerSymbol;            markerSymbol.Size = 50;            IChartSymbol chartSymbol = barChartSymbol as IChartSymbol;            chartSymbol.MaxValue = maxValue;            //添加渲染符号            ISymbolArray symbolArray = barChartSymbol as ISymbolArray;            IFillSymbol fillSymbol;            IColorRamp colors = CreateRandomColorRamp(fields.Count);            for (int i = 0; i < fields.Count; i++)            {                fillSymbol = new SimpleFillSymbolClass();                fillSymbol.Color = colors.get_Color(i);                symbolArray.AddSymbol(fillSymbol as ISymbol);            }            //设置柱状图符号            chartRenderer.ChartSymbol = barChartSymbol as IChartSymbol;            fillSymbol = new SimpleFillSymbolClass();            fillSymbol.Color = getRGB(0, 255, 255);            fillSymbol.Color.Transparency = 2;            chartRenderer.BaseSymbol = fillSymbol as ISymbol;            chartRenderer.UseOverposter = false;            //创建图例                      chartRenderer.CreateLegend();            geofeatureLayer.Renderer = chartRenderer as IFeatureRenderer;            return geofeatureLayer;        }        ////生成颜色带          static public IColorRamp CreateAlgorithmicColorRamp(int count)        {            //IUniqueValueRenderer pUniqueValueR;            IEnumColors pEnumRamp;            AlgorithmicColorRamp pColorRamp;            //pUniqueValueR = new UniqueValueRendererClass();            //pUniqueValueR.FieldCount = 1;            //pUniqueValueR.set_Field(0, FielName);            pColorRamp = new AlgorithmicColorRampClass();            pColorRamp.FromColor = getRGB(255, 255, 255);            pColorRamp.ToColor = getRGB(32, 200, 150);            pColorRamp.Size = count;            bool ok = true;            pColorRamp.CreateRamp(out ok);            pEnumRamp = pColorRamp.Colors;            return pColorRamp;        }        //生成颜色带          static public IColorRamp CreateRandomColorRamp(int count)        {            //IUniqueValueRenderer pUniqueValueR;            IEnumColors pEnumRamp;            IRandomColorRamp pColorRamp;            //pUniqueValueR = new UniqueValueRendererClass();            //pUniqueValueR.FieldCount = 1;            //pUniqueValueR.set_Field(0, FielName);            pColorRamp = new RandomColorRampClass();            pColorRamp.StartHue = 0;            pColorRamp.MinValue = 99;            pColorRamp.MinSaturation = 15;            pColorRamp.EndHue = 360;            pColorRamp.MaxValue = 100;            pColorRamp.MaxSaturation = 30;            pColorRamp.Size = count * 2;            bool ok = true;            pColorRamp.CreateRamp(out ok);            pEnumRamp = pColorRamp.Colors;            return pColorRamp;        }        static public IGeoFeatureLayer GetSimpleSymbolLayer(IGeoFeatureLayer geoFeatureLayer, string field)        {            //  getGeoLayer("sichuan_county_landuse");            IUniqueValueRenderer uniqueValueRenderer = new UniqueValueRendererClass();            uniqueValueRenderer.FieldCount = 1;            uniqueValueRenderer.set_Field(0, field);            //简单填充符号            ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass();            simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;            int areaNum = geoFeatureLayer.FeatureClass.FeatureCount(null);            IFeatureCursor featureCursor = geoFeatureLayer.FeatureClass.Search(null, false);            IFeature feature;            if (featureCursor != null)            {                IEnumColors enumColors = CreateRandomColorRamp(areaNum).Colors;                int fieldIndex = geoFeatureLayer.FeatureClass.Fields.FindField(field);                feature = featureCursor.NextFeature();                while (feature != null)                {                    string nameValue = feature.get_Value(fieldIndex).ToString();                    simpleFillSymbol = new SimpleFillSymbolClass();                    simpleFillSymbol.Color = enumColors.Next();                    uniqueValueRenderer.AddValue(nameValue, field, simpleFillSymbol as ISymbol);                    feature = featureCursor.NextFeature();                }            }            geoFeatureLayer.Renderer = uniqueValueRenderer as IFeatureRenderer;            return geoFeatureLayer;        }