无法在Python中使用Gdal写入光栅。错误:dict';对象没有属性';形状';

无法在Python中使用Gdal写入光栅。错误:dict';对象没有属性';形状';,python,gdal,Python,Gdal,在Python中使用gdal填充没有数据的值之后,我尝试创建一个光栅文件 我有一个函数可以得到光栅阵列 def raster2array(rasterfn): try: bndNum_Val_Dic={} raster = gdal.Open(rasterfn) for bandNum in range(raster.RasterCount): bandNum += 1 band=raster.GetRasterBand(bandNum)

在Python中使用gdal填充没有数据的值之后,我尝试创建一个光栅文件

我有一个函数可以得到光栅阵列

def raster2array(rasterfn):
try:
    bndNum_Val_Dic={}
    raster = gdal.Open(rasterfn)
    for bandNum in range(raster.RasterCount):
        bandNum += 1
        band=raster.GetRasterBand(bandNum)
        bandVal=band.ReadAsArray()
        bndNum_Val_Dic[bandNum]=bandVal
    raster=None
    return bndNum_Val_Dic
except Exception as e:
    print(e)
使用此函数生成的数组,我试图写入光栅,这会在“outband.WriteArray(array)”处引发一个错误,即dict对象没有属性“shape”

import numpy as np
import gdal
from osgeo import osr
rasterfn ="MAH_20.tif"
newRasterfn ="MAH_FND.tif"
array= raster2array(rasterfn)
newValue = 100
Driver= 'GTiff'
bandNumber=1
raster = gdal.Open(rasterfn)
geotransform = raster.GetGeoTransform()
originX = geotransform[0]
originY = geotransform[3]
pixelWidth = geotransform[1]
pixelHeight = geotransform[5]
cols = raster.RasterXSize
rows = raster.RasterYSize
bandCount=raster.RasterCount
rasterDataType=raster.GetRasterBand(bandNumber).DataType
global Flag
if(Flag):
    driver = gdal.GetDriverByName(Driver)
    global outRaster
    outRaster = driver.Create(newRasterfn, cols, rows, bandCount, rasterDataType)
    Flag=False

outband = outRaster.GetRasterBand(bandNumber)
outRaster.SetGeoTransform((originX, pixelWidth, 0, originY, 0, pixelHeight))
outband = outRaster.GetRasterBand(bandNumber)
outband.WriteArray(array)
outRasterSRS = osr.SpatialReference()
outRasterSRS.ImportFromWkt(raster.GetProjectionRef())
outRaster.SetProjection(outRasterSRS.ExportToWkt())
outRaster.GetRasterBand(bandNumber).SetNoDataValue(newValue)
raster=None
if(bandNumber==bandCount):
    outRaster=None
    outband=None
    raster=None
我正在使用python 3.5和GDAL 3.0.2。有办法解决这个问题吗?
任何帮助都将不胜感激

您正在尝试编写一本词典,而
GDAL
需要一个Numpy数组。您试图写入哪些数据还不完全清楚,但将write语句更改为如下所示的内容至少可以消除错误消息。但一定要写正确的波段

outband.WriteArray(array[bandNumber])