天天看點

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);

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());