private IClassBreaksRenderer CreateClassBreaksRenderer(IFeatureClass featureClass, string breakMethod)
        {
            ITable pTable = (ITable)featureClass;

            //从pTable的strRendererField字段中得到信息给datavalues和datafrequency两个数组
            ITableHistogram pTableHistogram = new BasicTableHistogramClass();
            IBasicHistogram pHistogram = (IBasicHistogram)pTableHistogram;
            pTableHistogram.Field = strRendererField;
            if (strNormalizeField.ToLower() != "none")
                pTableHistogram.NormField = strNormalizeField;
            pTableHistogram.Table = pTable;
            object dataFrequency;
            object dataValues;
            pHistogram.GetHistogram(out dataValues, out dataFrequency);

            //下面是分级方法,用于根据获得的值计算得出符合要求的数据
            //根据条件计算出Classes和ClassesCount,numDesiredClasses为预定的分级数目
            IClassifyGEN pClassify = null;
            int numDesiredClasses = classCount;
            switch (breakMethod)
            {
                case "等间隔":
                    pClassify = new EqualIntervalClass();
                    break;
                case "已定义的间隔":
                    pClassify = new DefinedIntervalClass();
                    IIntervalRange2 intervalRange = pClassify as IIntervalRange2;
                    intervalRange.IntervalRange = dblDefinedInterval;
                    break;
                case "分位数":
                    pClassify = new QuantileClass();
                    break;
                case "自然裂点":
                    pClassify = new NaturalBreaksClass();
                    break;
                case "标准差":
                    pClassify = new StandardDeviationClass();
                    IStatisticsResults pStatRes = pHistogram as IStatisticsResults;
                    IDeviationInterval pStdDev = pClassify as IDeviationInterval;
                    pStdDev.Mean = pStatRes.Mean;
                    pStdDev.StandardDev = pStatRes.StandardDeviation;
                    pStdDev.DeviationInterval = dblStdDevInterval;
                    break;
                default:
                    break;
            }

            if (pClassify == null) return null;
            pClassify.Classify(dataValues, dataFrequency, ref numDesiredClasses);
            //返回一个数组
            double[] classBreaks = (double[])pClassify.ClassBreaks;
            int ClassesCount = classBreaks.GetUpperBound(0);
            nudClassCount.Value = ClassesCount;
            IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();
            pClassBreaksRenderer.Field = strRendererField;
            if (strNormalizeField.ToLower() != "none")
                pClassBreaksRenderer.NormField = strNormalizeField;
            //设置着色对象的分级数目
            pClassBreaksRenderer.BreakCount = ClassesCount;
            pClassBreaksRenderer.SortClassesAscending = true;
            if (colorRamp == null)
            {
                MessageBox.Show("请先选择色带!!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return null;
            }
            //通过色带设置各级分类符号的颜色
            colorRamp.Size = ClassesCount;
            bool createRamp;
            colorRamp.CreateRamp(out createRamp);
            IEnumColors enumColors = colorRamp.Colors;
            enumColors.Reset();
            IColor pColor = null;
            ISymbol symbol = null;
            if (gloabalSymbol == null)
            {
                MessageBox.Show("请选择符号...", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return null;
            }
            //需要注意的是分级着色对象中的symbol和break的下标都是从0开始
            for (int i = 0; i < ClassesCount; i++)
            {
                pColor = enumColors.Next();
                switch (featureClass.ShapeType)
                {
                    case esriGeometryType.esriGeometryPoint:
                        IMarkerSymbol markerSymbol = gloabalSymbol as IMarkerSymbol;
                        markerSymbol.Color = pColor;
                        symbol = markerSymbol as ISymbol;
                        break;
                    case esriGeometryType.esriGeometryPolyline:
                        ILineSymbol lineSymbol = gloabalSymbol as ILineSymbol;
                        lineSymbol.Color = pColor;
                        symbol = lineSymbol as ISymbol;
                        break;
                    case esriGeometryType.esriGeometryPolygon:
                        IFillSymbol fillSymbol = gloabalSymbol as IFillSymbol;
                        fillSymbol.Color = pColor;
                        symbol = fillSymbol as ISymbol;
                        break;
                    default:
                        break;
                }
                pClassBreaksRenderer.set_Symbol(i, symbol);
                pClassBreaksRenderer.set_Break(i, classBreaks[i + 1]);
            }
            return pClassBreaksRenderer;
        }
示例#2
0
        private IClassBreaksRenderer CreateClassBreaksRenderer(IFeatureClass featureClass, string breakMethod)
        {
            ITable pTable = (ITable)featureClass;

            //从pTable的strRendererField字段中得到信息给datavalues和datafrequency两个数组
            ITableHistogram pTableHistogram = new BasicTableHistogramClass();
            IBasicHistogram pHistogram      = (IBasicHistogram)pTableHistogram;

            pTableHistogram.Field = strRendererField;
            if (strNormalizeField.ToLower() != "none")
            {
                pTableHistogram.NormField = strNormalizeField;
            }
            pTableHistogram.Table = pTable;
            object dataFrequency;
            object dataValues;

            pHistogram.GetHistogram(out dataValues, out dataFrequency);

            //下面是分级方法,用于根据获得的值计算得出符合要求的数据
            //根据条件计算出Classes和ClassesCount,numDesiredClasses为预定的分级数目
            IClassifyGEN pClassify         = null;
            int          numDesiredClasses = classCount;

            switch (breakMethod)
            {
            case "等间隔":
                pClassify = new EqualIntervalClass();
                break;

            case "已定义的间隔":
                pClassify = new DefinedIntervalClass();
                IIntervalRange2 intervalRange = pClassify as IIntervalRange2;
                intervalRange.IntervalRange = dblDefinedInterval;
                break;

            case "分位数":
                pClassify = new QuantileClass();
                break;

            case "自然裂点":
                pClassify = new NaturalBreaksClass();
                break;

            case "标准差":
                pClassify = new StandardDeviationClass();
                IStatisticsResults pStatRes = pHistogram as IStatisticsResults;
                IDeviationInterval pStdDev  = pClassify as IDeviationInterval;
                pStdDev.Mean              = pStatRes.Mean;
                pStdDev.StandardDev       = pStatRes.StandardDeviation;
                pStdDev.DeviationInterval = dblStdDevInterval;
                break;

            default:
                break;
            }

            if (pClassify == null)
            {
                return(null);
            }
            pClassify.Classify(dataValues, dataFrequency, ref numDesiredClasses);
            //返回一个数组
            double[] classBreaks  = (double[])pClassify.ClassBreaks;
            int      ClassesCount = classBreaks.GetUpperBound(0);

            nudClassCount.Value = ClassesCount;
            IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();

            pClassBreaksRenderer.Field = strRendererField;
            if (strNormalizeField.ToLower() != "none")
            {
                pClassBreaksRenderer.NormField = strNormalizeField;
            }
            //设置着色对象的分级数目
            pClassBreaksRenderer.BreakCount           = ClassesCount;
            pClassBreaksRenderer.SortClassesAscending = true;
            if (colorRamp == null)
            {
                MessageBox.Show("请先选择色带!!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return(null);
            }
            //通过色带设置各级分类符号的颜色
            colorRamp.Size = ClassesCount;
            bool createRamp;

            colorRamp.CreateRamp(out createRamp);
            IEnumColors enumColors = colorRamp.Colors;

            enumColors.Reset();
            IColor  pColor = null;
            ISymbol symbol = null;

            if (gloabalSymbol == null)
            {
                MessageBox.Show("请选择符号...", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return(null);
            }
            //需要注意的是分级着色对象中的symbol和break的下标都是从0开始
            for (int i = 0; i < ClassesCount; i++)
            {
                pColor = enumColors.Next();
                switch (featureClass.ShapeType)
                {
                case esriGeometryType.esriGeometryPoint:
                    IMarkerSymbol markerSymbol = gloabalSymbol as IMarkerSymbol;
                    markerSymbol.Color = pColor;
                    symbol             = markerSymbol as ISymbol;
                    break;

                case esriGeometryType.esriGeometryPolyline:
                    ILineSymbol lineSymbol = gloabalSymbol as ILineSymbol;
                    lineSymbol.Color = pColor;
                    symbol           = lineSymbol as ISymbol;
                    break;

                case esriGeometryType.esriGeometryPolygon:
                    IFillSymbol fillSymbol = gloabalSymbol as IFillSymbol;
                    fillSymbol.Color = pColor;
                    symbol           = fillSymbol as ISymbol;
                    break;

                default:
                    break;
                }
                pClassBreaksRenderer.set_Symbol(i, symbol);
                pClassBreaksRenderer.set_Break(i, classBreaks[i + 1]);
            }
            return(pClassBreaksRenderer);
        }
示例#3
0
        private void getBreaksValues(ClassifyMethodName ClassifyMethod,ILayer layer,string fieldName,double intervl,bool bfeuq)
        {
            ITableHistogram tableHistogram = new BasicTableHistogramClass();
            tableHistogram.Table = ((IDisplayTable)layer).DisplayTable;
            tableHistogram.Field = fieldName;
            object valueArray = null, freq = null;
            IBasicHistogram basicHistogram = (IBasicHistogram)tableHistogram;
            basicHistogram.GetHistogram(out valueArray, out freq);
            IClassify classify = null;
            int breakNum = (int)intervl;
            //���෽��
            switch (ClassifyMethod)
            {
                case ClassifyMethodName.EqualInterval:
                    {

                        EqualIntervalClass eq = new EqualIntervalClass();
                        eq.Classify(valueArray, freq, ref breakNum);
                        classify = (IClassify)eq;

                        break;
                    }
                case ClassifyMethodName.StandardDeviation:
                    {

                        StandardDeviationClass sd = new StandardDeviationClass();
                        IStatisticsResults stat = basicHistogram as IStatisticsResults;
                        classify = sd as IClassify;
                        classify.SetHistogramData(valueArray, freq);
                        IDeviationInterval di = sd as IDeviationInterval;
                        di.DeviationInterval = 1;
                        di.Mean = stat.Mean;
                        di.StandardDev = stat.StandardDeviation;
                        classify.Classify(ref breakNum);

                        break;
                    }
                case ClassifyMethodName.Quantile:
                    {

                        Quantile qc = new QuantileClass();
                        qc.Classify(valueArray, freq, ref breakNum);
                        classify = qc as IClassify;

                        break;
                    }
                case ClassifyMethodName.NaturalBreaks:
                    {

                        NaturalBreaksClass nb = new NaturalBreaksClass();
                        nb.Classify(valueArray, freq, ref breakNum);
                        classify = nb as IClassify;

                        break;
                    }
                case ClassifyMethodName.DefinedInterval:
                    {
                        DefinedIntervalClass di = new DefinedIntervalClass();
                        di.IntervalRange = intervl;
                        di.Classify(valueArray, freq, ref breakNum);
                        classify = di as IClassify;
                        break;
                    }
                default:
                    {

                        EqualIntervalClass eq = new EqualIntervalClass();
                        eq.Classify(valueArray, freq, ref breakNum);
                        classify = (IClassify)eq;
                        break;

                    }
            }
            object o = classify.ClassBreaks;
            System.Array breakArray = o as System.Array;

            IFrequencyStatistics freqstat = basicHistogram as IFrequencyStatistics;

            lscBreakValues.Items.Clear();
            foreach (object oo in breakArray)
            {
                lscBreakValues.Items.Add(oo.ToString());
            }
        }