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());   }
posted @ 2012-07-16 16:06  adodo1  Views(474)  Comments(0Edit  收藏  举报