Václav Klusák wrote:
They weren't of course. Mainly because gdal_translate (which I have been using for testing) doesn't even call Dataset::RasterIO. It loops through the raster bands and adds them one after each other to the output dataset. Exactly what it must not do in order to achieve optimality. And this is not an exception. The notion of raster band seems to be pilar, and the various parts of GDAL code use them frequently.

So, what do I do?

One theoreticaly possible way to optimise writing is to just store IO requests in some data structure and only in the FlushCache method optimise and actualy do them. But nothing like this is possible for reading since the caller expects the data to be transferred at the end of the call. I don't see a way out, the TMS driver will be slow and will thrash the hard drive.

To sum up what I have in my hands right now:

Reading TMS datasets works. The infrastructure for writing blocks is mostly in place (ten or so lines missing) but I don't have the code that creates new datasets in the filesystem yet. The cache works but should be improved a little. All this could be finished in a day or two. After that comes the rest of GDALDataset boilerplate: transformations, GCPs etc. These I haven't studied much yet.

Keo,

A few suggestions:

1) Per http://trac.osgeo.org/gdal/wiki/rfc14_imagestructure try setting
   the IMAGE_STRUCTURE INTERLEAVE metadata item to PIXEL if the data
   is pixel interleaved.  Some applications and CreateCopy() implementations
   will take advantage of this clue.

2) In your IReadBlock() method try pushing the other bands than the one
   requested into the cache.  This will of course result in extra cache
   churn, but with a big enough cache, and depending on the application
   io strategy this can mean the other bands are already in the cache
   when they are needed.

3) We might consider possible changes to GDALDatasetCopyWholeRaster() for
   tiled data so that whole rows of tiles do not need to be cached.  It
   is in gdal/gcore/rasterio.cpp.  It is used by some of the CreateCopy()
   implementations.

4) To some extent we may just need to educate users to use large cache
   size settings for wide TMS datasets.

The problems you are encountering aren't that different than faced by any
other pixel interleaved tiled format.  They are just a bit more severe with
TMS because we expect large images, the tiles are unusually large, and we
need two rows instead of one.

Best regards,
--
---------------------------------------+--------------------------------------
I set the clouds in motion - turn up   | Frank Warmerdam, [EMAIL PROTECTED]
light and sound - activate the windows | http://pobox.com/~warmerdam
and watch the world go round - Rush    | President OSGeo, http://osgeo.org

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

Reply via email to