在将GEOTIFF多波段光栅重新投影并写入GEOTIFF 3波段光栅时,如何处理GDALDatasetShadow TypeError?

2024-09-29 21:34:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试将输入(多波段)GEOTIFF文件重新投影到目标转换/投影,并将这些重新投影的波段写入新的3波段GEOTIFF文件(因为我不需要其他波段)。我尝试过组合两个独立工作的代码块(一个将3个带写入新的GEOTIFF,另一个将1个带的GEOTIFF重新投影到引用文件)。但是,我收到以下错误:

TypeError: in method 'ReprojectImage', argument 1 of type 'GDALDatasetShadow *'

找到我在下面使用的函数:

def reprojectRaster(inputfile, referencefile, outputfile):

if os.path.exists(outputfile):
    os.remove(outputfile)

input = gdal.Open(inputfile, gdalconst.GA_ReadOnly)
with rasterio.open(inputfile) as src:
    input_array = src.read((2,1,4)) #red band, green band, nir band
inputProj = input.GetProjection()
#inputTrans = input.GetGeoTransform


reference = gdal.Open(referencefile, gdalconst.GA_ReadOnly)
referenceProj = reference.GetProjection()
referenceTrans = reference.GetGeoTransform()
bandreference = reference.GetRasterBand(1)    
x = reference.RasterXSize 
y = reference.RasterYSize
no_bands = reference.RasterCount


driver= gdal.GetDriverByName('GTiff')
output = driver.Create(outputfile,x,y,no_bands, bandreference.DataType)
output.SetGeoTransform(referenceTrans)
output.SetProjection(referenceProj)
#I've been trying to make put this loop inside from the other code
for i, image in enumerate(input_array, 1):
    input.GetRasterBand(i).WriteArray( image )

gdal.ReprojectImage(inputfile,outputfile,inputProj,referenceProj,gdalconst.GRA_Bilinear)

del output

def CreateGeoTiff(outputfile, inputfile, referencefile):
with rasterio.open(inputfile) as src:
    input_array = src.read((2,1,4)) #red, green, nir bands
reference = gdal.Open(referencefile, gdalconst.GA_ReadOnly)
referenceProj = reference.GetProjection()
referenceTrans = reference.GetGeoTransform()

driver = gdal.GetDriverByName('GTiff')
no_bands, cols, rows = input_array.shape
DataSet = driver.Create(outputfile, cols, rows, no_bands, gdal.GDT_Float32)
DataSet.SetGeoTransform(referenceTrans)
DataSet.SetProjection(referenceProj)
for i, image in enumerate(input_array, 1):
    DataSet.GetRasterBand(i).WriteArray( image )

DataSet = None
return(gdal.Open(outputfile, gdalconst.GA_ReadOnly))

尝试将以下两个功能结合起来:

def reprojectRaster(inputfile, referencefile, outputfile):
input = gdal.Open(inputfile, gdalconst.GA_ReadOnly)
inputProj = input.GetProjection()
reference = gdal.Open(referencefile, gdalconst.GA_ReadOnly)
referenceProj = reference.GetProjection()
referenceTrans = reference.GetGeoTransform()
bandreference = reference.GetRasterBand(1)    
x = reference.RasterXSize 
y = reference.RasterYSize



driver= gdal.GetDriverByName('GTiff')
output = driver.Create(outputfile,x,y,1,bandreference.DataType)
output.SetGeoTransform(referenceTrans)
output.SetProjection(referenceProj)

gdal.ReprojectImage(input,output,inputProj,referenceProj,gdalconst.GRA_Bilinear)

del output

def CreateGeoTiff(outputfile, inputfile, referencefile):
with rasterio.open(inputfile) as src:
    input_array = src.read((2,1,4)) #red, green, nir bands
reference = gdal.Open(referencefile, gdalconst.GA_ReadOnly)
referenceProj = reference.GetProjection()
referenceTrans = reference.GetGeoTransform()

driver = gdal.GetDriverByName('GTiff')
no_bands, cols, rows = input_array.shape
DataSet = driver.Create(outputfile, cols, rows, no_bands, gdal.GDT_Float32)
DataSet.SetGeoTransform(referenceTrans)
DataSet.SetProjection(referenceProj)
for i, image in enumerate(input_array, 1):
    DataSet.GetRasterBand(i).WriteArray( image )

DataSet = None
return(gdal.Open(outputfile, gdalconst.GA_ReadOnly))

代码似乎签出了正确的输入并调用了正确的函数,但是Python引发了上面提到的TypeError。有人知道哪里出了问题吗?你知道吗


Tags: inputoutputopenarraydatasetreferencegagdal

热门问题