Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用GDAL 1.6.1创建CFloat64 ENVI文件时出现问题_Python_Image Processing_Numpy_Gdal - Fatal编程技术网

Python 使用GDAL 1.6.1创建CFloat64 ENVI文件时出现问题

Python 使用GDAL 1.6.1创建CFloat64 ENVI文件时出现问题,python,image-processing,numpy,gdal,Python,Image Processing,Numpy,Gdal,我正在尝试使用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_

我正在尝试使用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
;但是,会创建空文件。你知道我做错了什么吗


编辑:我应该指定我可以读写EnviFloat32文件,这样驱动程序就在那里了。简而言之,当
driver.Create(…)
gdal.Open(…)
等返回
None
时,只有CFloat64我不能写…

,这是gdal引发
IOError
或指示给定驱动程序名称无效的方式。(或可能表明发生了另一种错误,但这两种情况似乎最有可能发生)

(我将跳过关于我多么不喜欢gdal的python绑定的咆哮…)

很明显,您没有做错任何事情(该示例在我的机器上创建了一个带全零的.bin文件和一个格式正确的.hdr文件)

假设它创建了一个空文件,那么您似乎拥有写入该文件的权限,因此这不是IO问题

这意味着:

  • 您的gdal版本不支持ENVI文件(例如,
    gdal.GetDriverByName(“随机的”)
    也将返回
    None
  • Gdal在为ENVI数据集创建驱动程序时遇到某种内部错误 检查
    gdalinfo--formats
    的输出,并确保gdal是在支持ENVI文件的情况下编译的(不过我认为默认情况下应该是这样)

    如果没有,请检查是否可以使用所有零值编写geotiff(或任何其他格式)。如果没有工作,则需要重新安装gdal


    希望这能为你指明正确的方向

    我认为问题与GDAL由于与ArcGIS冲突而放弃对该格式的支持有关(难以置信!),请参见此。简单的回答是:我不能这样做,因为我的版本是不可能的


    不幸的是,目前还没有适用于较新版本的windows安装程序(到1.8版为止),而且在windows上从源代码构建几乎是不可能的。

    我的版本默认支持ENVI格式,gdal.GetDriverByName(“ENVI”)可以正常工作。我可以编写ENVI Float32文件没有问题,问题似乎只是在使用GDT_CFloat64编写文件时。对于事后添加ENVI标记方式的人来说,这与ENVI软件或编程无关,而是一种称为“ENVI”的格式。标记没有用处。