[gdal-dev] Cannot use in memory raster object with gdal warp (GDAL Python API)

Armin Schmidt armin.r.schmidt at gmail.com
Thu Feb 27 04:57:38 PST 2020


Hi Umberto,

There isn't information in your question about the size of the raster 
image, but as you are reading it in chunks, it probably is large. Hence 
my guess is that your in-memory raster is not big enough to hold the 
data, without giving an error message. And the subsequent gdal.Warp 
simply cannot handle this.

If the file-raster weren't large, you could simply load it into memory 
in one command.

Armin

On 21/02/2020 16:52, umbertofilippo wrote:
> Sorry if this is a copy of a question I already asked on 
> gis.stackexchange (
> here
> <https://gis.stackexchange.com/questions/351577/cannot-use-in-memory-raster-object-with-gdal-warp-gdal-python-api>
> ), but I thought I might get more chance to receive an answer here.
>
> These are the operations I am doing in my code:
>
> 1 - reading an existing raster (tif)
> 2 - creating a in memory raster object
> 3 - reading the existing raster object in chunk as array
> 4 - making some calculations
> 5 - writing the array to my in memory object
>
> What I want to do now is, with the in memory raster object ready to be 
> used,
> feed it to gdal warp, which should also output an intermediate raster 
> object
> that I'll be use afterwards.
>
> However, when I try to GetRasterBand() out of this latter raster object, I
> receive an error because it is actually equal to None:
>
> AttributeError: 'NoneType' object has no attribute 'GetRasterBand'
>
> I am pretty sure it is about saving/updating/flushing the status of the
> raster object after the calculations but I could not find out if this 
> is the
> actual problem.
>
> How can I use in memory (intermediate) files in my script?
> Here is the code code I am using (the error is at the very last line):
>
> from osgeo import gdal, gdalconst
> import numpy as np
>
> in_raster = gdal.Open(r'/my/raster.tif', gdalconst.GA_ReadOnly)
> in_b = in_r.GetRasterBand(1)
>
> b1 = in_raster.GetRasterBand(1)
> xsize = b1.XSize
> ysize = b1.YSize
> step = 10 # THIS IS THE CHUNK SIZE!
> ystep = ysize / step
> ystep = int(ystep)
> yresidual = ysize - (ystep * step)
>
> driver = gdal.GetDriverByName("MEM")
> temp_calc = driver.Create('',
> xsize,
> ysize,
> 1,
> gdal.GDT_Float32)
>
> temp_b = temp_calc.GetRasterBand(1)
>
> for i in range(step):
> if i != step-1:
> arr_part = in_b.ReadAsArray(
> 0, ystep * i, xsize, ystep).astype('float32')
>
> data = np.nan_to_num(arr_part)
>
> temp_b.WriteArray(data, 0, ystep * i)
> else:
> arr_part = in_b.ReadAsArray(
> 0, ystep * i, xsize, ystep + yresidual).astype('float32')
>
> # replace nan with zeros
> #
> https://docs.scipy.org/doc/numpy/reference/generated/numpy.nan_to_num.html
> data = np.nan_to_num(arr_part)
>
> # write array chunk to (in memory) file
> # https://gdal.org/python/osgeo.gdal.Band-class.html#WriteArray
> temp_b.WriteArray(data, 0, ystep * i)
>
> # get raster resolution
> in_gt = in_raster.GetGeoTransform()
> in_x = in_gt[1]
> in_y = -in_gt[5]
>
> kwargs = {'xRes': in_x,
> 'yRes': in_y,
> 'targetAlignedPixels': True,
> 'resampleAlg': 'average',
> 'format': 'MEM'
> }
>
> ds = gdal.Warp('',
> temp_calc,
> **kwargs)
> b1 = ds.GetRasterBand(1)
> # ds is None and the above line throws the exception
>
>
>
> --
> Sent from: http://osgeo-org.1560.x6.nabble.com/GDAL-Dev-f3742093.html
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/gdal-dev
>

-- 
__________________________________________________________________
Dr Armin Schmidt
  Dipl.-Phys., Dr. rer. nat.
GeodataWIZ: Geo Data + Visualisation
  www.GeodataWIZ.com
  www.GeodataWIZ.com/armin-schmidt
Honorary Secretary ISAP
  International Society for Archaeological Prospection
  www.archprospection.org
Honorary Visiting Research Fellow, University of Bradford
  School of Archaeological and Forensic Sciences
Honorary Fellow, Durham University
  Department of Archaeology
http://orcid.org/0000-0002-4241-5381

Email: A.Schmidt at GeodataWIZ.com

Available in print:
  Guidelines for the use of Geophysics in Archaeology (2015). Namur: EAC.
  Earth Resistance for Archaeologists (2013). Lanham: AltaMira Press
  Geophysical Data in Archaeology (2013). Oxford: Oxbow Books.
http://www.amazon.co.uk/-/e/B0034QC4OW
__________________________________________________________________

Disclaimer
==========
This email and any attachments to it may be confidential and are
intended solely for the use of the individual to whom it is
addressed. If you are not the intended recipient of this email,
you must neither take any action based upon its contents, nor
copy or show it to anyone.

Please contact the sender if you believe you have received this
email in error.
__________________________________________________________________




More information about the gdal-dev mailing list