通过GDAL的C#-bindings支持Arc / Info二进制网格格式

时间:2013-05-07 23:08:06

标签: gdal c#

我想阅读Arc / Info二进制网格,并使用GDAL的C#绑定将它们转换为其他图像格式。我从here安装了FWTools 2.4.7和当前二进制文件(MSVC2010(Win64)-stable)。然后我开始测试作为FWTools一部分的示例C#程序,特别是GDALRead.cs和GDALReadDirect.cs。当我使用演示数据集utm.tif时,一切正常。

然后我使用ArcMap 10(转换工具 - 转栅格 - 栅格转换为其他格式)将utm.tif转换为Arc / Info二进制网格格式。当我尝试使用GDALRead.csGDALReadDirect.cs时,我收到以下错误消息:

GDALRead.cs:

Using driver Arc/Info Binary Grid
Band 1 :
DataType: GDT_Int16
Size (512,512)
PaletteInterp: GCI_Undefined
  OverView 0 :
     DataType: GDT_Int16
     Size (256,256)
     PaletteInterp: GCI_GrayIndex
  OverView 1 :
     DataType: GDT_Int16
     Size (128,128)
     PaletteInterp: GCI_GrayIndex
Non RGB images are not supported by this sample! ColorInterp = GCI_Undefined

GDALReadDirect.cs:

Using driver Arc/Info Binary Grid
Band 1 :
   DataType: GDT_Int16
   Size (512,512)
   PaletteInterp: GCI_Undefined
      OverView 0 :
         DataType: GDT_Int16
         Size (256,256)
         PaletteInterp: GCI_GrayIndex
      OverView 1 :
         DataType: GDT_Int16
         Size (128,128)
         PaletteInterp: GCI_GrayIndex
The number of the raster bands is not enough to run this sample

这种行为对我来说有点令人惊讶,因为我没有更改数据集,我只是将其转换为新格式。有关此行为原因的任何提示以及如何通过C#使用GDAL将ArcInfo二进制网格转换为其他图像格式。

1 个答案:

答案 0 :(得分:0)

GDALReadDirect.cs有一个名为SaveBitMapDirect的错误方法,首先检查可用的颜色解释,然后检查频段数。将文件转换为Arc / Info二进制网格格式后,有关颜色解释的信息将丢失,因此只有程序检查可用波段数并返回错误消息。如果修改第157行,SaveBitMapDirect适用于所描述的案例:

if (redBand.GetRasterColorInterpretation() == ColorInterp.GCI_GrayIndex || redBand.GetRasterColorInterpretation() == ColorInterp.GCI_Undefined)

这不是一般修复,仅针对当前问题。