GDAL光栅输出

时间:2011-07-15 16:42:42

标签: python io arcgis raster gdal

我正在尝试在python中使用GDAL创建一个.tif文件。它正在创建一个文件,但每当我浏览它时都会说“无法预览”。现在,我只是想让它来制作输入文件的副本。这是我的代码:

gdal.AllRegister()

inDs = gdal.Open("C:\\Documents and Settings\\patrick\\Desktop\\tiff elevation\\EBK1KM\\color_a2.tif")
if inDs is None:
  print 'Could not open image file'
  sys.exit(1)
else:
    print "successfully opened input file"

rows = inDs.RasterYSize
cols = inDs.RasterXSize
myband = inDs.GetRasterBand(1)
elev_data = myband.ReadAsArray(0,0,cols,rows)
driver = inDs.GetDriver()
outDs = driver.Create('C:\\Documents and Settings\\patrick\\Desktop\\tiff elevation\\EBK1KM\\new.tif', cols, rows, 1, GDT_Int32)

if outDs is None:
    print "couldn't open output file"
    sys.exit(1)

outBand = outDs.GetRasterBand(1)
outData = numpy.zeros((rows,cols),numpy.int16)
outBand.WriteArray(elev_data)
outBand.FlushCache()
outBand.SetNoDataValue(-99)
outDs.SetGeoTransform(inDs.GetGeoTransform())
outDs.SetProjection(inDs.GetProjection())
del outData

============================更新===================== ==================== 做了一些发现...... 我研究了使用统计规范化从一种数字格式转换为另一种数字格式的方法。我处理输入数据并使用以下算法将其转换为uint8:

gdal.AllRegister()

inDs = gdal.Open("C:\\Documents and Settings\\patrick\\Desktop\\tiff elevation\\EBK1KM\\color_a2.tif")
if inDs is None:
  print 'Could not open image file'
  sys.exit(1)
else:
    print "successfully opened input file"

rows = inDs.RasterYSize
cols = inDs.RasterXSize
myband = inDs.GetRasterBand(1)
elev_data = myband.ReadAsArray(0,0,cols,rows)
driver = inDs.GetDriver()
outDs = driver.Create('C:\\Documents and Settings\\patrick\\Desktop\\tiff elevation\\EBK1KM\\new.tif', cols, rows, 1, GDT_Int32)

if outDs is None:
    print "couldn't open output file"
    sys.exit(1)

outBand = outDs.GetRasterBand(1)
outData = numpy.zeros((rows,cols),numpy.int16)
outBand.WriteArray(elev_data)
outBand.FlushCache()
outBand.SetNoDataValue(-99)
outDs.SetGeoTransform(inDs.GetGeoTransform())
outDs.SetProjection(inDs.GetProjection())
del outData

我想要复制的主要原因是为了证明我可以读入,然后根据计算写出更新的数据。

我可以使用颜色渐变来写出输出数据,而不是只使用一种颜色的阴影?

2 个答案:

答案 0 :(得分:2)

在尝试将TIFF文件预览为图像时,是否意味着您从Windows图片和传真查看器应用程序中“无法预览”? (见下面的截图。)

No preview available screenshot

请记住有many different flavors of TIFF,并非所有都是一样的。特别是,Windows图片和传真查看器不支持所有类型的TIFF。

Microsoft知识库文章You Cannot View TIFF Images Using Windows Picture and Fax Viewer部分说明:

  

Windows XP中的Windows图片和传真查看器使用Windows图形设备接口(GDI +)。 GDI +支持许多传真的标准压缩算法。但是,它可能与一些不经常使用的编码方案不兼容。

如果您正在寻找用于查看栅格数据的工具(包括GeoTIFF栅格),我建议免费提供OpenEV,您可以将其作为FWTools包的一部分获取。< / p>

答案 1 :(得分:1)

我注意到的一些事情:

  1. 您只复制源数据集的一个波段。如果是一种颜色 图像,它可能有3个波段,或彩色图。如果它有彩色地图, 你需要复制它。如果它是3或4个乐队,你有 复制所有数据。
  2. CreateCopy()是一种更轻松的方式来完成您所需的工作。