ArcEngine 统计方法
http://blog.csdn.net/gisoracle/article/details/4297823
ArcEngine 统计方法
概述
一般常用的统计功能例如:唯一字段统计、数据行数统计、数据值求和统计等。
1、基础统计(BaseStatistics)组件用来生成和报告统计结果。
2、IFrequencyStatistics接口提供对用来报告频率统计的成员的访 问。
3、IGenerateStatistics接口提供对用来生成统计结果的成员的访问。
4、IStatisticsResults提供对用来报告统计结果的成员的访问。
可访问的属性有Count,Sum,Maximum,Minimum,Meanm,StandardDeviation(标准差)
DataStatistics 组件允许返回统计结果及单个字段的唯一值。组件创建后,用来分析的数据通过IDataStatistics::Cursor属性,以光标形式的传入。注意 ICursor的对象只能使用一次,如果要获取多个结果,应当再次创建光标。IDataStatistics是数据统计组件中唯一的接口
1、IDataStatistics
属性
Cursor--通过游标来生成统计表
Field--要统计的字段
UniqueValueCount--统计表中唯一值总数
UniqueValues--唯一值枚举
Statistics--IStatisticsResults对象,用于返回统计信息
2、IStatisticsResults
属性
Count--值总数
Maximum --最大值
Mean--算术平均值
Minimum--最小值
StandardDeviation--标准差
Sum--求和
示例:唯一字段统计,GeoDatabase没有提供DISTINCT这样的关键字进行唯一值查询,只有通过IDataStatistics::UniqueValues方式来获取唯一值
public void IDataStatistics_Example(IFeatureClass featureClass)
{
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());
}
//求算术平均值
cursor = (ICursor)featureClass.Search(null, false);
dataStatistics.Cursor = cursor;
ESRI.ArcGIS.esriSystem.IStatisticsResults statisticsResults = dataStatistics.Statistics;
Console.WriteLine("mean value - {0}", statisticsResults.Mean);
}
通过接口说明和示例可以看出,统计信息是基于数字字段的统计。
另外,关于查询与统计接口,还有IQueryDef、IQueryFilterDefinition、ITable等。例子如下:
//IQueryDef Example
public void IQueryDef_Example(IWorkspace workspace)
{
IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;
//create query definition
IQueryDef queryDef = featureWorkspace.CreateQueryDef();
//provide list of tables to join
queryDef.Tables = "datesjoin,dudatest";
//retrieve the fields from all tables
queryDef.SubFields = "sde.datesjoin.dt_field = sde.dudates.dt_field";
//set up join
queryDef.WhereClause = "datesjoin.dt_field = dudates.dt_field";
//Create FeatureDataset. Note the use of .OpenFeatureQuery.
//The name "MyJoin" is the name of the restult of the query def and
//is used in place of a feature class name.
IFeatureDataset featureDataset = featureWorkspace.OpenFeatureQuery("MyJoin", queryDef);
//open layer to test against
IFeatureClassContainer featureClassContainer = (IFeatureClassContainer)featureDataset;
IFeatureClass featureClass = featureClassContainer.get_ClassByName("MyJoin");
}
//IQueryFilterDefinition PostfixClause Example
public void IQueryFilterDefinition_PostfixClause_Example(IFeatureClass featureClass)
{
//this function uses the PostfixClause property to append an Order By clause to the query.
IQueryFilter queryFilter = new QueryFilterClass();
queryFilter.SubFields = "FULLNAME";
queryFilter.WhereClause = "OBJECTID > 10";
IQueryFilterDefinition queryFilterDefinition = (IQueryFilterDefinition)queryFilter;
queryFilterDefinition.PostfixClause = "ORDER BY FULLNAME";
IFeatureCursor featureCursor = featureClass.Search(queryFilter, true);
int fieldIndex = featureCursor.FindField("FULLNAME");
IFeature feature = featureCursor.NextFeature();
while (feature != null)
{
Console.WriteLine("The value of the {0} field is {1)",featureCursor.Fields.get_Field(fieldIndex).Name,feature.get_Value(fieldIndex));
feature = featureCursor.NextFeature();
}
}
//ITable Example
Public Void ITable_Example(IFeatureClass featureClass)
{
ITable pTable = featureClassas ITable;
Console.WriteLine("The Row Count is:{0}",pTable.RowCount.Tostring());
}