arcengine 的几种统计图绘制

        //获取颜色对象
        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;
        }

 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值