Arcgis Engine二次开发C#常用库封装:Github源码
获取栅格字段的唯一值:
/// <summary>
/// 获取栅格字段的唯一值
/// </summary>
/// <param name="pLayer">栅格图层</param>
/// <param name="field">字段</param>
/// <returns>唯一值</returns>
public static string[] GetRasterUniqueValue(ILayer pLayer, string field)
{
IRasterLayer pRlyr = pLayer as IRasterLayer;
if (pRlyr == null) return null;
//判断是否存在属性表
if (!IsRasterLayerHaveTable(pRlyr.Raster)) return null;
ITable pRTable = (ITable)pRlyr;
//获得栅格游标
ICursor pCursor = pRTable.Search(null, false);
//IDataStatistics对象实例生成
IDataStatistics pData = new DataStatisticsClass();
pData.Field = field; //字段
pData.Cursor = pCursor;
//枚举唯一值
IEnumerator pEnumVar = pData.UniqueValues;
//记录总数
int recordCount = pData.UniqueValueCount;
//字符数组
string[] strValue = new string[recordCount];
pEnumVar.Reset(); //将游标重置到第一个成员前面
int i = 0;
while (pEnumVar.MoveNext()) //将游标的内部位置向前移动
{
if (pEnumVar.Current != null) strValue[i++] = pEnumVar.Current.ToString(); //获取当前的项(只读属性)
}
return strValue;
}
判断栅格图层是否存在属性表:
/// <summary>
/// 判断栅格图层是否拥有属性表
/// </summary>
/// <param name="pRaster">栅格</param>
/// <returns>是否拥有属性表</returns>
public static bool IsRasterLayerHaveTable(IRaster pRaster)
{
IRasterProps pProp = pRaster as IRasterProps;
if (pProp == null)
{
return false;
}
if (pProp.PixelType == rstPixelType.PT_FLOAT || pProp.PixelType == rstPixelType.PT_DOUBLE) //判断栅格像元值是否是整型
{
return false;
}
IRasterBandCollection pRasterbandCollection = (IRasterBandCollection)pRaster;
IRasterBand rasterBand = pRasterbandCollection.Item(0);
ITable rTable = rasterBand.AttributeTable;
return rTable != null;
}