我一直在尝试将输入(多波段)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。有人知道哪里出了问题吗?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐