Hi,

I am having some troubles in writing a sub-region on an array with GDALRasterIO.

The story is this. GMT internal grid arrays have a padding of 2 rows and 2 columns around the 'true data region' that is used for boundary conditions but that need to be striped off upon saving on file.

The following works well when I previously moved all real data in the 'data' array to the beginning of the array. That is, when I sort of removed the the padding zone.

  hDstDS = GDALCreate( hDriver, "mem", nx, ny, n_bands, typeCLASS, NULL );
....
GDALRasterIO( hBand, GF_Write, 0, 0, nx, ny, data, nx, ny, typeCLASS, 0, 0 );

However, I would like to avoid that step and read directly the zone of interest from 'data', which because of the padding has actually (nx+4)x(ny+4) elements. So I tried

GDALRasterIO( hBand, GF_Write, 2, 2, nx, ny, data, nx+4, ny+4, typeCLASS, 0, 0 );

but get this error:

ERROR 5: mem, band 1: Access window out of range in RasterIO().  Requested
(2,2) of size 37x19 on raster of 37x19.

This happens because of the test on gdalrasterband.cpp

if( nXOff < 0 || nXOff > INT_MAX - nXSize || nXOff + nXSize > nRasterXSize

but this means I'm stuck here because the nRasterXSize ('nx' in this case) comes from the GDALCreate() and that I cannot change and so
   nXOff + nXSize > nRasterXSize is always true.

Any way out of this gotcha?

Thanks

Joaquim


_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to