from:http://blog.sina.com.cn/s/blog_4177d50b0100fjbg.html
概述
一般常用的統計功能例如:唯一字段統計、數據行數統計、數據值求和統計等。
1、基礎統計(BaseStatistics)組件用來生成和報告統計結果。
2、IFrequencyStatistics接口提供對用來報告頻率統計的成員的訪 問。
3、IGenerateStatistics接口提供對用來生成統計結果的成員的訪問。
4、IStatisticsResults提供對用來報告統計結果的成員的訪問。
可訪問的屬性有Count,Sum,Maximum,Minimum,Meanm,StandardDeviation(標准差)
DataStatistics組件允許返回統計結果及單個字段的唯一值。組件創建后,用來分析的數據通過IDataStatistics::Cursor屬性,以光標形式的傳入。注意ICursor的對象只能使用一次,如果要獲取多個結果,應當再次創建光標。IDataStatistics是數據統計組件中唯一的接口
1、IDataStatistics
屬性
Cursor--通過游標來生成統計表
Field--要統計的字段
UniquueCount--統計表中唯一值總數
Uniquues--唯一值枚舉
Statistics-- IStatisticsResults對象,用於返回統計信息
2、IStatisticsResults
屬性
Count--值總數
Maximum --最大值
Mean--算術平均值
Minimum--最小值
StandardDeviation--標准差
Sum--求和
示例:唯一字段統計,GeoDatabase沒有提供DISTINCT這樣的關鍵字進行唯一值查詢,只有通過IDataStatistics::Uniquues方式來獲取唯一值
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.Uniquues;
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());
}