您的位置:首页 > 编程语言 > C#

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

2014-03-25 20:07 183 查看
   前几天在网上查找资料想实现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--求和
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: