使用GDAL 1.6.1创建CFloat64 ENVI文件的问题
我正在尝试用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)
,因为outfile
是None
;不过,空文件确实被创建了。你们觉得我哪里出错了?
补充说明:我可以读取和写入ENVI Float32文件,所以驱动是存在的。只有CFloat64我无法写入...
2 个回答
1
简单来说,当你使用 driver.Create(...)
或 gdal.Open(...)
等方法时,如果返回 None
,这意味着 gdal 发现了一个问题,可能是你提供的驱动名称不对,或者发生了其他错误,但这两种情况最常见。
(我就不多说我有多不喜欢 gdal 的 Python 接口了……)
看起来你并没有做错什么(在我的电脑上,这个例子会创建一个全是零的 .bin 文件和一个格式正确的 .hdr 文件,正如它应该的那样)。
既然它能创建一个空文件,说明你有权限写入这个文件,所以这不是输入输出的问题。
这意味着可能是以下两种情况:
- 你的 gdal 版本不支持 ENVI 文件(比如
gdal.GetDriverByName("something random")
也会返回None
)。 - gdal 在为 ENVI 数据集创建驱动时遇到了内部错误。
你可以检查一下 gdalinfo --formats
的输出,确保 gdal 是支持 ENVI 文件的(我觉得默认应该是支持的)。
如果不支持,试着看看能否创建一个全是零值的 geotiff(或者其他格式)。如果都不行,那就需要重新安装 gdal 了。
希望这些信息能帮你找到解决办法!
1
我觉得这个问题跟GDAL不再支持某种格式有关,因为它和ArcGIS发生了冲突(真让人难以置信!),你可以看看这个错误报告。简单来说就是:我做不到,因为我这个版本根本不支持。
不幸的是,现在还没有适用于新版本的Windows安装程序(现在最新是1.8),而在Windows上从源代码编译几乎是不可能的。