ArcEngine中有許多需要數據統計的地方,例如在矢量數據唯一值渲染的時候,需要統計出該矢量數據中包含哪些惟一值,如果我們用代碼讀出來去遍歷的話速度是很慢的,這時候就可以使用ArcEngine提供的DataStatistics類,通過該類可以很快的統計出我們要渲染的矢量數據指定字段包含的唯一值有哪些。
DataSratistics類的成員定義如下:
public class DataStatisticsClass : DataStatistics, IDataStatistics
{
public DataStatisticsClass();
public virtual bool Cancelled { get; }
public virtual bool Continue { get; }
//要統計的 遊標,該遊標就是該類要統計的目標
public virtual ICursor Cursor { set; }
//要統計的字段名稱
public virtual string Field { get; set; }
//採樣率
public virtual int SampleRate { get; set; }
//是否是簡單統計
public virtual bool SimpleStats { get; set; }
//得到統計的結果
public virtual IStatisticsResults Statistics { get; }
//唯一之的個數
public virtual int UniqueValueCount { get; }
//惟一值 列表
public virtual IEnumerator UniqueValues { get; }
}
因爲統計類使用的數據源是遊標ICursor,所以繼承該接口FeatureCursor遊標也是可以進行統計的。我們經常使用的Table和FeatureClass通過查詢都可以得到遊標,所以這些數據都是可以統計的,其他的一些數據通過查詢只要能通過查詢得到遊標實例,理論上是都可以統計的。
例如我們要統計一個矢量數據中包含的惟一值,代碼如下:
DataStatisticsClass myDataStatistics = new DataStatisticsClass();
ICursor myCursor = this._FeatureClass.Search(null, false) as ICursor;
myDataStatistics.Cursor = myCursor;
myDataStatistics.Field = "字段名稱";
IEnumerator myEnumerator = myDataStatistics.UniqueValues;
List<string> myValueList = new List<string>();
myEnumerator.Reset();
while (myEnumerator.MoveNext())
{
myValueList.Add(myEnumerator.Current.ToString ());
}
當然我們還可以得到更多的統計值,通過Statistics屬性可以得到IStatisticsResults的實例,通過該實例我們可以得到一些其他的統計信息。IStatisticsResults接口的定義如下: public interface IStatisticsResults
{
//值總數
int Count { get; }
//最大值
double Maximum { get; }
//算術平均值
double Mean { get; }
//最小值
double Minimum { get; }
//標準差
double StandardDeviation { get; }
//和
double Sum { get; }
}