統計方法
概述
一般常用的統計功能例如:唯一字段統計、資料行數統計、資料值求和統計等。
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);
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());