我正在尝试使用 GDAL 编写 ENVI CFloat64 文件:
import numpy
from osgeo import gdal
from osgeo.gdalconst import GDT_CFloat64
a = numpy.zeros((1000, 1000), dtype='complex64')
driver = gdal.GetDriverByName("ENVI")
outfile = driver.Create("test.bin", 1000, 1000, 1, GDT_CFloat64)
outfile.GetRasterBand(1).WriteArray(a, 0, 0)
outfile = None
但我无法将数组写入 outfile.GetRasterBand(1).WriteArray(a, 0, 0)
中的 band,因为 outfile
是 无
;但是,空文件确实被创建了。有什么想法我做错了吗?
编辑:我应该指定我可以读取和写入 ENVI Float32 文件,因此驱动程序就在那里。只有CFloat64我不会写...
最佳答案
简而言之,当 driver.Create(...)
或 gdal.Open(...)
等返回 None
,这是 gdal 引发 IOError 或指示给定驱动程序名称无效的方式。 (或者可能表明发生了另一种错误,但这两种错误似乎最有可能)
(我会跳过关于我有多不喜欢 gdal 的 python 绑定(bind)的咆哮......)
您显然没有做错任何事情(该示例在我的计算机上创建了一个全零的 .bin 文件和一个格式正确的 .hdr 文件,正如它应该的那样。)。
鉴于它创建了一个空文件,您似乎有权写入该文件,因此这不是 IO 问题。
这意味着:
- 您的 gdal 版本不支持 ENVI 文件(例如
gdal.GetDriverByName("something random")
也会返回None
。) - Gdal 在为 ENVI 数据集创建驱动程序时遇到某种内部错误。
检查gdalinfo --formats
的输出,并确保gdal编译时支持ENVI文件(不过我认为应该是默认的)。
如果没有,请检查是否可以编写全零值的 geotiff(或任何其他格式)。如果没有任何效果,您需要重新安装 gdal。
希望能为您指明正确的方向!
关于python - 使用 GDAL 1.6.1 创建 CFloat64 ENVI 文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5006911/