用C#+AE实现ArcGIS中的字段统计功

   前几天在网上查找资料想实现ArcGIS中的统计功能,也就是Summarise,在费尽一番波折之后,终于在网上找到了解决方案:http://blog.csdn.net/gisoracle/article/details/4297823

   通过这个案例的介绍,我自己整理下,封装成自己所需的函数,方法如下:

        public static DataTable Summar(ILayer pLayer, string SummField, string OutField, string Method)
        {
            IFeatureLayer pFLayer = pLayer as IFeatureLayer;
            IFeatureClass pFC = pFLayer.FeatureClass;
            ICursor cursor = (ICursor)pFC.Search(null, false);//游标
            IDataStatistics pDatdaS = new DataStatisticsClass();

            pDatdaS.Field = SummField;
            pDatdaS.Cursor=cursor;
            System.Collections.IEnumerator Em = pDatdaS.UniqueValues;
            Em.Reset();
            //IFields pField = new FieldClass();4
            //IFieldEdit pFieldEdit=pField as p

            DataTable pTable = new DataTable();
            pTable.Columns.Add(SummField);
            pTable.Columns.Add(OutField);
            //……

            while (Em.MoveNext())
            {
                string OutStr=null;
                DataRow pRow = pTable.NewRow();
                object obj=Em.Current;

                IQueryFilter pQueryFilter = new QueryFilterClass();
                pQueryFilter.WhereClause = SummField + "=" + obj;

                ICursor pCursorOut = (ICursor)pFC.Search(pQueryFilter, false);
                IDataStatistics pDataSOut = new DataStatisticsClass();
                pDataSOut.Field = OutField;
                pDataSOut.Cursor = pCursorOut;
                ESRI.ArcGIS.esriSystem.IStatisticsResults pResults = pDataSOut.Statistics;
                pRow[SummField] = obj;
                //
                if(Method=="Minimum")
                {
                   OutStr=pResults.Minimum.ToString();
                }
                else if(Method=="Maximum")
                {
                    OutStr=pResults.Maximum.ToString();
                }
                else if(Method=="Mean")
                {
                    OutStr=pResults.Mean.ToString();
                }
                else if(Method=="Sum")
                {
                    OutStr=pResults.Sum.ToString();
                }
                else
                {

                    OutStr = pResults.StandardDeviation.ToString();
                }
                pRow[OutField] = OutStr;
                pTable.Rows.Add(pRow);
                
            }
            return pTable;
        }

     这里总结下几个功能模块:

     一、获取唯一值

                唯一字段统计,GeoDatabase没有提供DISTINCT这样的关键字进行唯一值查询,只有通过IDataStatistics::UniqueValues方式来获取唯一值

        ICursor cursor = (ICursor)featureClass.Search(null, false);

        IDataStatistics dataStatistics = new DataStatisticsClass();
        dataStatistics.Field = "PIP_SIZE";

        dataStatistics.Cursor = cursor;

        //求唯一值

        System.Collections.IEnumerator enumerator = dataStatistics.UniqueValues;
        enumerator.Reset();

        while (enumerator.MoveNext())
        {
            object myObject = enumerator.Current;
            Console.WriteLine("Value - {0}", myObject.ToString());

        }

     二、调用IStatisticsResults

属性

Count--值总数

Maximum --最大值

Mean--算术平均值

Minimum--最小值

StandardDeviation--标准差

Sum--求和






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值