AE二次开发-判断栅格图层是否存在属性表,获取栅格字段的唯一值

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;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值