[gdal-dev] subblock of gdal source code

Even Rouault even.rouault at mines-paris.org
Sun Jun 7 04:56:07 EDT 2009


Unless you want to hack into gdalrasterband.cpp, you generally don't have to 
care about that concept of subblocking. It is just an internal implementation 
detail to improve memory usage when a raster has a big number of blocks.

Usually, GDAL will create an array of pointers to blocks of size nBlocksPerRow 
x nBlocksPerColumn, stored in the papoBlocks member. Let's say your raster is 
of dimension 1000 x 1000 and the block size is 10x10. This would lead to the 
creation of an array of 100 x 100 pointers.

If the number of blocks in one dimension is greater than SUBBLOCK_SIZE/2, then 
GDAL will create instead an array of ceil(nBocksPerRow / SUBBLOCK_SIZE) * 
ceil(nBocksPerColumn / SUBBLOCK_SIZE) where SUBBLOCK_SIZE = 64. In the 
example, as 100 > 32, an array of 4 x 4 is created in papoBlocks. Each 
element of this array can contain a sub-array of 64x64 pointer to blocks. But 
at the beginning those sub-arrays are not created, in order to save memory.

When you need to access block (i, j), GDAL will first compute the subblock in 
which the block is contained : (i', j') = (i / 64, j / 64). If the element at 
(i', j') is NULL, GDAL will first instanciate the 64x64 array. Then it will 
reserve memory for the block located at (i'', j'') = (i % 64, j % 64) in the 
subblock.

In case of huge rasters, this concept could be extended to a third level of 
indirection ("sub-sub-blocks"), but this has not been implemented.

Not sure I've been very clear. But now if you read the code, you should 
understand what I mean ;-)

Le Sunday 07 June 2009 09:21:57 gispowerfan, vous avez écrit :
> hi,
>       Recently I read the sorce code of gdal, and I found that there are
> subblocking in GDALRasterBand, can anyone give some examples of subblock,
> and how to use it? some doc in detail will be better!
>
> thanks in advance!
>
> gispowerfan
>
> 2009-06-07
>
>
>
> gispowerfan




More information about the gdal-dev mailing list