用C#+AE实现ArcGIS中的字段统计功
2014-03-25 20:07
183 查看
前几天在网上查找资料想实现ArcGIS中的统计功能,也就是Summarise,在费尽一番波折之后,终于在网上找到了解决方案:http://blog.csdn.net/gisoracle/article/details/4297823
通过这个案例的介绍,我自己整理下,封装成自己所需的函数,方法如下:
这里总结下几个功能模块:
Count--值总数
Maximum --最大值
Mean--算术平均值
Minimum--最小值
StandardDeviation--标准差
Sum--求和
通过这个案例的介绍,我自己整理下,封装成自己所需的函数,方法如下:
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--求和
相关文章推荐
- c#——运算符和表达式。
- c#——变量的命名
- c#——常用的基本数类型
- C#开发编码规范
- C#字符串处理类
- c#.net常用函数和方法集
- C#中string与byte[]的转换帮助类
- 转义符"\""
- C# 和 Win32API
- C#中使用Win32和其他库
- C#笔记19:多线程之线程启动、参数、返回值
- C#笔记21:多线程之线程同步中的锁定lock、Monitor
- C#笔记28:I/O操作
- C#笔记24:善用Visual Studio
- C#笔记23:多线程之Task(并行编程)
- C#笔记22:多线程之停止或取消线程
- C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent
- C#线程通信和异步委托
- 在 C# 中通过 P/Invoke 调用Win32 DLL
- C# 2.0 的partial