GIS-ArcGIS应用与开发技术(32)

分级符号化

1.添加菜单

2.编写代码

private void 分级符号化ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int breakIndex;
            string sFieldName = "cz";
            object dataFrequency;
            object dataValues;
            int numclasses = 5;
            IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();
            pClassBreaksRenderer.Field = sFieldName; //设置分级字段
            pClassBreaksRenderer.BreakCount = 5; //设置分级数目
            pClassBreaksRenderer.SortClassesAscending = true;//分级后的图例是否按升级顺序排列
            //创建一个新AlgorithmicColorRampClass对象
            IAlgorithmicColorRamp algColorRamp = new AlgorithmicColorRampClass();
            //创建起始颜色对象
            IRgbColor startColor = new RgbColor();
            startColor.Red = 255;
            startColor.Green = 0;
            startColor.Blue = 0;
            //创建终止颜色对象
            IRgbColor endColor = new RgbColor();
            endColor.Red = 0;
            endColor.Green = 255;
            endColor.Blue = 0;
            //设置AlgorithmicColorRampClass的起止颜色属性
            algColorRamp.ToColor = startColor;
            algColorRamp.FromColor = endColor;
            //设置梯度类型
            algColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;

            //设置颜色带颜色数量
            algColorRamp.Size = 5;

            //创建颜色带

            bool bture = true;
            algColorRamp.CreateRamp(out bture);
            //使用IEnumColors获取颜色带

            IEnumColors pEnumColors = null;
            pEnumColors = algColorRamp.Colors;
            //设置5个picturebox的背景色为产生颜色带的5个颜色
            IFeatureLayer pFeatLyr = axMapControl1.get_Layer(1) as IFeatureLayer;
            IGeoFeatureLayer pGeoFeatureL = pFeatLyr as IGeoFeatureLayer;
            //分级方法,用于根据获得的值计算得出符合要求的数据     
            ITable pTable = pGeoFeatureL.FeatureClass as ITable;
            ITableHistogram pTableHistogram = new BasicTableHistogramClass();
            IBasicHistogram pBasicHistogram = (IBasicHistogram)pTableHistogram;
            pTableHistogram.Field = sFieldName;
            pTableHistogram.Table = pTable;
            pBasicHistogram.GetHistogram(out dataValues, out dataFrequency);     //获取渲染字段的值及其出现的频率      
            IClassifyGEN pClassify = new EqualIntervalClass();
            try
            {
                pClassify.Classify(dataValues, dataFrequency, ref numclasses);//根据获取字段的值和出现的频率对其进行等级划分 
            }
            catch (Exception ex)
            {
            }
            //需要注意的是分级着色对象中的symbol和break的下标都是从0开始

            double[] Classes = (double[])pClassify.ClassBreaks;
            for (breakIndex = 0; breakIndex <= 5 - 1; breakIndex++)
            {
                IColor pColor = pEnumColors.Next();
                switch (pGeoFeatureL.FeatureClass.ShapeType)
                {
                    case esriGeometryType.esriGeometryPolygon:
                        {
                            ISimpleFillSymbol pSimpleFillS = new SimpleFillSymbolClass();
                            pSimpleFillS.Color = pColor;
                            pSimpleFillS.Style = esriSimpleFillStyle.esriSFSSolid;
                            pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleFillS);//设置填充符号
                            pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);//设定每一分级的分级断点
                            break;
                        }
                    case esriGeometryType.esriGeometryPolyline:
                        {
                            ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbolClass();
                            pSimpleLineSymbol.Color = pColor;
                            pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleLineSymbol);
                            pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);
                            break;
                        }
                    case esriGeometryType.esriGeometryPoint:
                        {
                            ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass();
                            pSimpleMarkerSymbol.Color = pColor;
                            pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleMarkerSymbol);//设置填充符号
                            pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);//设定每一分级的分级断点
                            break;
                        }
                }
            }
            pGeoFeatureL.Renderer = (IFeatureRenderer)pClassBreaksRenderer;
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }

 

 

 

3.添加的dll引用

using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Display;

using ESRI.ArcGIS.Carto;

using ESRI.ArcGIS.esriSystem;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值