ArcEngine 唯一值获取
问题:
唯一值无法获取
1、命名空间
using System.Collections.Generic;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using System.Collections;
2、获取唯一值
官网示例:
//IDataStatistics Example
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);
}
文明改造示例:
public static IList<string> GetUniqueValue(ILayer Layer,string field)
{
//存储唯一值字段
IList<string> listValues = new List<string>();
ICursor cursor = layer.FeatureClass.Search(null, false) as ICursor;
//获取唯一值
IDataStatistics dataStatistics = new DataStatisticsClass
{
//统计字段
Field = field,
Cursor = cursor
};
//获取唯一值枚举
IEnumerator enumerator = dataStatistics.UniqueValues;
if (dataStatistics.UniqueValueCount==0)
return listValues ;
enumerator.Reset();
while (enumerator.MoveNext())
{
//获取唯一值字段
listValues.Add(enumerator.Current.ToString());
}
return listValues ;
}
3、获取唯一值失败
1】无数据
2】数据存在空
3】字段不存在
添加一下判断,对数据进行判断
public static IList<string> GetUniqueValue(ILayer Layer,string field)
{
IList<string> listValues = new List<string>();
//判断字段是否存在
if (flayer.FeatureClass.FindField(field)==-1)
return listValues ;
//去除字段为NULL字段
IQueryFilter queryFilter = new QueryFilterClass();
queryFilter.WhereClause = field + " IS NOT NULL";
ICursor cursor = flayer.FeatureClass.Search(queryFilter , false) as ICursor;
//获取唯一值
IDataStatistics dataStatistics = new DataStatisticsClass
{
//统计字段
Field = field,
Cursor = cursor
};
//获取唯一值枚举
System.Collections.IEnumerator enumerator = dataStatistics.UniqueValues;
if (dataStatistics.UniqueValueCount==0)
return listValues ;
enumerator.Reset();
while (enumerator.MoveNext())
{
//获取唯一值字段
listValues.Add(enumerator.Current.ToString());
}
return listValues ;
}