AE构建获取栅格图层属性表(ITable)
2017-10-02 20:16
1626 查看
有时候生成的栅格图层没有属性表,需要自己构建属性表。其中,不能为 32 位浮点像素类型的栅格数据集构建栅格属性表。
因此,首先要判断栅格图层是否可以已存在属性表,已存在的话,就不需要重新构建。不存在的话,也要判断是否可以构建属性表,然后才能重新构建。
关键点:使用接口IRasterDatasetEdit2的BuildAttributeTable()方法。
代码如下:
获取栅格属性表:
因此,首先要判断栅格图层是否可以已存在属性表,已存在的话,就不需要重新构建。不存在的话,也要判断是否可以构建属性表,然后才能重新构建。
关键点:使用接口IRasterDatasetEdit2的BuildAttributeTable()方法。
代码如下:
/// <summary> /// 构建栅格图层属性表 /// </summary> /// <param name="pLayer">图层</param> /// <returns>属性表ITable</returns> public static ITable BuildRasterTable(ILayer pLayer) { if (!(pLayer is IRasterLayer)) return null; IRasterLayer rasterLayer = pLayer as IRasterLayer; IRaster pRaster = rasterLayer.Raster; IRasterProps rProp = pRaster as IRasterProps; if (rProp == null) { return null; } if (rProp.PixelType == rstPixelType.PT_FLOAT || rProp.PixelType == rstPixelType.PT_DOUBLE) //判断栅格像元值是否是整型 { return null; } IRasterBandCollection pRasterbandCollection = (IRasterBandCollection)pRaster; IRasterBand rasterBand = pRasterbandCollection.Item(0); ITable rTable = rasterBand.AttributeTable; if (rTable != null) return rasterBand.AttributeTable; //直接获取属性表 string strPath = rasterLayer.FilePath; string strDirName = System.IO.Path.GetDirectoryName(strPath); string strRasterName = System.IO.Path.GetFileName(strPath); //创建工作空间 IWorkspaceFactory pWork = new RasterWorkspaceFactoryClass(); //打开工作空间路径 ,工作空间的参数是目录,不是具体的文件名 IRasterWorkspace pRasterWs = (IRasterWorkspace)pWork.OpenFromFile(strDirName, 0); //打开工作空间下的文件, IRasterDataset rasterDataset = pRasterWs.OpenRasterDataset(strRasterName); IRasterDatasetEdit2 rasterDatasetEdit = (IRasterDatasetEdit2)rasterDataset; if (rasterDatasetEdit == null) { return null; } //Build default raster attribute table with VALUE and COUNT rasterDatasetEdit.BuildAttributeTable(); //建立属性表 //更新属性表 pRasterbandCollection = (IRasterBandCollection)rasterDataset; rasterBand = pRasterbandCollection.Item(0); return rasterBand.AttributeTable; //重新获取属性表 }
获取栅格属性表:
/// <summary> /// 获取栅格图层的属性表 /// </summary> /// <param name="layer">栅格图层</param> /// <returns></returns> public static DataTable GetRasterTableByLayer(ILayer layer) { ITable iTable = BuildRasterTable(layer); //ITable iTable = (ITable)layer; //若已存在属性表,直接用该行代码 if (iTable == null) { return null; } DataTable dataTable = new DataTable(); IFields fields = iTable.Fields; for (int i = 0; i < fields.FieldCount; i++) { dataTable.Columns.Add(fields.Field[i].Name); } ICursor pCursor = iTable.Search(null, false); IRow pRrow = pCursor.NextRow(); while (pRrow != null) { DataRow pRow = dataTable.NewRow(); for (int i = 0; i < pRrow.Fields.FieldCount; i++) { pRow[i] = pRrow.Value[i].ToString(); } dataTable.Rows.Add(pRow); pRrow = pCursor.NextRow(); } return dataTable; }
相关文章推荐
- AE IRasterCursor 获取栅格图层像素值
- AE二次开发-判断栅格图层是否存在属性表,获取栅格字段的唯一值
- 显示栅格图层和矢量图层的属性表(AE开发)
- 显示栅格图层和矢量图层的属性表(AE开发)
- AE中获取图层属性信息
- AE实现右键点击TOC控件任意图层显示属性表
- AE IRasterCursor 改变栅格图层像素值
- AE IRasterCursor 改变栅格图层像素值
- AE实现右键点击TOC控件任意图层显示属性表
- AE开发图层右键打开属性表
- AE_获取图层的SpatialRefrence
- 在Silverlight中通过WCF和ArcGIS SDE获取图层中的属性和要素List
- 移动端Skyline获取Feature图层属性的
- 获取栅格图层(Raster)的属性表
- AE开发中栅格图层实现分级渲染
- TerraExplorer 6.6 for JavaScript 通过图层获取地理要素,获取图层属性信息,矢量标注等通用方法
- ArcObjects c++ 获取栅格或矢量图层的范围
- AE+C# 图层中增加相应属性标注
- skyline 6.6.1 javascript实现遍历树,然后获取图层树中的属性数据
- 【iOS开发-图层】图层的获取与一些属性