ArcGis 統計方法


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

 

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM