5

I'm trying to resample a GeoTIFF file to match another raster layer using python GDAL package. Most of the ways I found online is to use gdalwarp resample data from the command line. Is there a way to get cell resolution inside of python script and do the resample process inside of the python script? Maybe things like:

disout.SetGeoTransform(diskin.GetGeoTransform())
MaxG
  • 505
  • 3
  • 18

1 Answers1

9

I found that the easiest way is to create a new raster file with dimensions equal to the reference file, SetGeoTransofrm and SetProjection of the new raster file to match the reference file then re-project the file and output, sample code shown below:

from osgeo import gdal, gdalconst

inputfile = #Path to input file
input = gdal.Open(inputfile, gdalconst.GA_ReadOnly)
inputProj = input.GetProjection()
inputTrans = input.GetGeoTransform()

referencefile = #Path to reference file
reference = gdal.Open(referencefile, gdalconst.GAReadOnly)
referenceProj = reference.GetProjection()
referenceTrans = reference.GetGeoTransform()
bandreference = reference.GetRasterBand(1)    
x = reference.RasterXSize 
y = reference.RasterYSize


outputfile = #Path to output file
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
Yanofsky
  • 223
  • 2
  • 7
MaxG
  • 505
  • 3
  • 18
  • So which is the final pixel spacing (cell resolution)? How is computed? – eduardosufan Feb 13 '19 at 17:24
  • eduardosufan they are 'standard' (or commonly used) raster resampling techniques. all options laid out in gdal (https://gdal.org/programs/gdal_translate.html#cmdoption-gdal-translate-r). @yanofsky - I have noticed that this will resample a multi band image into a single value. is there a way to resample such that the output image has resample values for each band? –  Apr 27 '20 at 17:31