I'm currently writing optimisations for a raster viewer program which uses gdal 
as it's base. It's currently written purely in python, and has some major speed 
issues which cause problems when we are reading many files at a time. After 
making some optimisations in the python, and getting quite a minimal speed 
increase, I proceeded to profile the program quite heavily and found that our 
getImage method was our slowest call. I had already performed some 
optimisations on this function so decided to write a C-Extension so that we 
could get some speed increases through a lower level language.

This has worked for the most part, however there is still one issue, we have 
found a speed increase of ~2s for some of our larger files in the bulk of the 
code. But this is negated by the GDALRasterIO call, which is actually about 3s 
slower than the python ReadAsArray.

This doesn't make any sense to me as ReadAsArray is a wrapper around a C++ call 
to GDALRasterIO, and thus should be slower than having a call straight to 
GDALRasterIO.

I was hoping someone here might know of a way to read the rasters more 
efficiently. I have tried to implement a method using ReadBlock rather than 
RasterIO, but due to the replication that RasterIO does it didn't work at all. 
(I'm currently trying to figure out a way to do that replication without losing 
too much speed).

The RasterIO call i'm using is

band->RasterIO(GF_Read, this->ovleft, this->ovtop, this->ovxsize,
               this->ovysize, dataTmp, this->ovxsize, this->ovysize,
               band->GetRasterDataType(), 0, 0);

The old python call was:

dataTmp = band.ReadAsArray(ovleft, ovtop,
    ovxsize, ovysize,
    dspRastXSize, dspRastYSize)


Thanks in advance

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

Reply via email to