[gdal-dev] flipping raster in python

Jamie Adams jaadfoo at gmail.com
Fri Mar 26 17:24:21 EDT 2010


Thanks Even,

I had (sort of) come to that conclusion myself, as I started looking into
what blocksize actually meant.  I'll modify to work in row order.

Thanks!

Jamie

On Fri, Mar 26, 2010 at 2:10 PM, Even Rouault
<even.rouault at mines-paris.org>wrote:

> Jamie,
>
> I'm not sure why it slowdowns after the first 2 bands, but I can say your
> way
> of proceeding is very inefficient and you can achieve the same results by
> processing by rows instead of columns. As your input file is scanline
> oriented (block size is 20000x1 - which is pretty standard), reading a
> column
> will cause the whole file to be read at each time !
>
> Try instead the following version which read line by line and horizontally
> flip the buffer : it should complete in a few minutes.
>
> for band in range(1, indataset.RasterCount + 1):
>  ## Print the current band
>  print 'Band %s' % band
>
>  inband = indataset.GetRasterBand(band)
>  outband = outdataset.GetRasterBand(band)
>
>  count = 0
>  print count
>
>   for i in range(inband.YSize):
>
>    ## print the current interval of 1k lines
>    new_count = int(i / 1000)
>    if new_count > count:
>      print new_count
>      count = new_count
>
>     inline = inband.ReadAsArray(0, i, inband.XSize, 1)
>    flipline = numpy.fliplr(inline)
>    outband.WriteArray(flipline, 0, i)
>
>    inline = None
>
>  inband = None
>  outband = None
>
> Best regards,
>
> Even
>
> Le Friday 26 March 2010 21:22:54 Jamie Adams, vous avez écrit :
> > I've written some simple Python code to flip a raster in relation to the
> > y-axis.  The raster is 20000x19459 and has 4 bands of type Byte, and is
> > written east to west (I have no idea why).  The script proceeds normally
> > for the first 2 bands, but slows way down after starting band 3.  I let
> it
> > run overnight, and it had processed less than 1000 columnsin band 3,
> > whereas the previous pace for bands 1&2 was around 1000 columns every 10
> > seconds.  Here is the relevant code with a few debugging statements
> > followed by the gdalinfo output.  The only thing I'm noticing is that the
> > input image is INTERLEAVED=BAND whereas the output is INTERLEAVED=PIXEL.
> > Any help is appreciated.
> >
> >
> ---------------------------------------------------------------------------
> >--- for band in range(1, indataset.RasterCount + 1):
> >   ## Print the current band
> >   print 'Band %s' % band
> >
> >   inband = indataset.GetRasterBand(band)
> >   outband = outdataset.GetRasterBand(band)
> >
> >   count = 0
> >   print count
> >
> >   for i in range(inband.XSize):
> >
> >     ## print the current interval of 1k lines
> >     new_count = int(i / 1000)
> >     if new_count > count:
> >       print new_count
> >       count = new_count
> >
> >     inline = inband.ReadAsArray(i, 0, 1, inband.YSize)
> >
> >     outband.WriteArray(inline, inband.XSize - i - 1, 0)
> >
> >     inline = None
> >
> >   inband = None
> >   outband = None
> >
> >
> ---------------------------------------------------------------------------
> >--- Driver: GTiff/GeoTIFF
> > Files: test.tif
> > Size is 20000, 19459
> > Coordinate System is:
> > GEOGCS["WGS 84",
> >     DATUM["WGS_1984",
> >         SPHEROID["WGS 84",6378137,298.257223563,
> >             AUTHORITY["EPSG","7030"]],
> >         AUTHORITY["EPSG","6326"]],
> >     PRIMEM["Greenwich",0],
> >     UNIT["degree",0.0174532925199433],
> >     AUTHORITY["EPSG","4326"]]
> > Origin = (-175.536864949200321,33.666235092496755)
> > Pixel Size = (-0.000062579160220,-0.000054370391310)
> > Metadata:
> >   AREA_OR_POINT=Area
> > Image Structure Metadata:
> >   INTERLEAVE=BAND
> > Corner Coordinates:
> > Upper Left  (-175.5368649,  33.6662351) (175d32'12.71"W, 33d39'58.45"N)
> > Lower Left  (-175.5368649,  32.6082416) (175d32'12.71"W, 32d36'29.67"N)
> > Upper Right (-176.7884482,  33.6662351) (176d47'18.41"W, 33d39'58.45"N)
> > Lower Right (-176.7884482,  32.6082416) (176d47'18.41"W, 32d36'29.67"N)
> > Center      (-176.1626566,  33.1372384) (176d 9'45.56"W, 33d 8'14.06"N)
> > Band 1 Block=20000x1 Type=Byte, ColorInterp=Red
> >   Mask Flags: PER_DATASET ALPHA
> > Band 2 Block=20000x1 Type=Byte, ColorInterp=Green
> >   Mask Flags: PER_DATASET ALPHA
> > Band 3 Block=20000x1 Type=Byte, ColorInterp=Blue
> >   Mask Flags: PER_DATASET ALPHA
> > Band 4 Block=20000x1 Type=Byte, ColorInterp=Alpha
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/gdal-dev/attachments/20100326/080d3821/attachment-0001.html


More information about the gdal-dev mailing list