使用GDAL 1.6.1创建CFloat64 ENVI文件的问题

1 投票
2 回答
752 浏览
提问于 2025-04-16 11:52

我正在尝试用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),因为outfileNone;不过,空文件确实被创建了。你们觉得我哪里出错了?

补充说明:我可以读取和写入ENVI Float32文件,所以驱动是存在的。只有CFloat64我无法写入...

2 个回答

1

简单来说,当你使用 driver.Create(...)gdal.Open(...) 等方法时,如果返回 None,这意味着 gdal 发现了一个问题,可能是你提供的驱动名称不对,或者发生了其他错误,但这两种情况最常见。

(我就不多说我有多不喜欢 gdal 的 Python 接口了……)

看起来你并没有做错什么(在我的电脑上,这个例子会创建一个全是零的 .bin 文件和一个格式正确的 .hdr 文件,正如它应该的那样)。

既然它能创建一个空文件,说明你有权限写入这个文件,所以这不是输入输出的问题。

这意味着可能是以下两种情况:

  1. 你的 gdal 版本不支持 ENVI 文件(比如 gdal.GetDriverByName("something random") 也会返回 None)。
  2. gdal 在为 ENVI 数据集创建驱动时遇到了内部错误。

你可以检查一下 gdalinfo --formats 的输出,确保 gdal 是支持 ENVI 文件的(我觉得默认应该是支持的)。

如果不支持,试着看看能否创建一个全是零值的 geotiff(或者其他格式)。如果都不行,那就需要重新安装 gdal 了。

希望这些信息能帮你找到解决办法!

1

我觉得这个问题跟GDAL不再支持某种格式有关,因为它和ArcGIS发生了冲突(真让人难以置信!),你可以看看这个错误报告。简单来说就是:我做不到,因为我这个版本根本不支持。

不幸的是,现在还没有适用于新版本的Windows安装程序(现在最新是1.8),而在Windows上从源代码编译几乎是不可能的。

撰写回答