获取唯一值可作为唯一值符号化的参数
方法1 使用IQueryDef (只支持geodatabase,不支持shpfile)
//方法1 使用IQueryDef (只支持geodatabase,不支持shpfile)
IDataset dataset = (featureClass as IDataset);
IWorkspace workspace = dataset.Workspace;
IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
IQueryDef queryDef = featureWorkspace.CreateQueryDef();
queryDef.Tables = dataset.Name;
queryDef.SubFields = string.Format("DISTINCT {0}", renderField);
cursor = queryDef.Evaluate();
IRow row = cursor.NextRow();
while (row != null)
{
string renderValue = row.get_Value(0).ToString();
ISymbol symbol = SymbolWrapper.GetDefaultSymbol((esriGeometryType)featureClass.ShapeType);
renderer.AddValue(renderValue, renderValue, symbol);
renderer.set_Label(renderValue, renderValue);
renderer.set_Symbol(renderValue, symbol);
row = cursor.NextRow();
}
方法2 使用IDataStatistics
//方法2 使用IDataStatistics
IEnumerator pEnumerator = GetUniqueValues(featureClass, renderField);
while (pEnumerator.MoveNext())
{
string renderValue = pEnumerator.Current.ToString();
ISymbol symbol = SymbolWrapper.GetDefaultSymbol((esriGeometryType)featureClass.ShapeType);
renderer.AddValue(renderValue, renderValue, symbol);
renderer.set_Label(renderValue, renderValue);
renderer.set_Symbol(renderValue, symbol);
}
/// <summary>
/// 枚举字段唯一值
/// </summary>
/// <param name="featureClass">FeatureClass</param>
/// <param name="fieldName">字段名</param>
/// <returns>字段唯一值枚举器</returns>
public static IEnumerator GetUniqueValues(IFeatureClass featureClass, string fieldName)
{
if (featureClass == null) throw new ArgumentNullException("featureClass");
IFeatureCursor featureCursor = null;
try
{
IDataStatistics dataStatistics = new DataStatisticsClass();
dataStatistics.SampleRate = -1;
dataStatistics.SimpleStats = true;
dataStatistics.Field = fieldName;
featureCursor = featureClass.Search(null, false);
dataStatistics.Cursor = featureCursor as ICursor;
IEnumerator uniqueValues = dataStatistics.UniqueValues;
uniqueValues.Reset();
return uniqueValues;
}
finally
{
ComObject.Release(ref featureCursor);
}
}
方法3 使用IQueryFilter、ISpatialFilter接口,利用IFeatureClass.search(null,true)进行查询后,遍历获取唯一值。