[gdal-dev] efficiently slicing tiles

Jesse Crocker jesse at gaiagps.com
Wed Apr 10 12:55:59 PDT 2013


Hello,
Im working a project using gdal to slice TMS style png tiles.  The code currently works, but I'm running into some trouble optimizing to run fast enough for use on mobile devices.
My current strategy:
Open the source data(currently testing with BSB):
Get the transform, using GDALGetGeoTransform, and get the inverse transform
get coordinate transformers from dataset coordinates to lat/lon
store all that for when tiles are needed

When a tile is needed:
Determine the pixel coordinates of the source data that is needed, taking into account a clip line for the data that is not at the edge of the source image.
Create a new VRT using VRTCreate(tileSize, tileSize)
Copy data to the VRT: 
    VRTAddSimpleSource(destBand, sourceBand,
                       sourceDataRegion.origin.x, sourceDataRegion.origin.y,
                       sourceDataRegion.size.width, sourceDataRegion.size.height,
                       destDataRegion.origin.x, destDataRegion.origin.y,
                       destDataRegion.size.width,  destDataRegion.size.height,
                       "NEAREST",
                       VRT_NODATA_UNSET
                       );

Create a copy the VRT slice as PNG
  GDALDriverH pngDriver = GDALGetDriverByName("PNG");
  GDALDatasetH pngCopy = GDALCreateCopy(pngDriver, path.UTF8String, datasetToWrite, false, NULL, NULL, NULL);
  GDALClose(pngCopy);


Currently GDALCreateCopy is using 70% of the total CPU time

I've tried reusing the same VRT, but did not see a significant speed increase from that.

Is there a more CPU efficient way to do this?  Should I be creating a vet of the whole dataset warped to the target CRS using GDALAutoCreateWarpedVRT then slicing tiles from that?

Any suggestions for optimizing this would be greatly appreciated.

Also see that attached screenshot at https://s3.amazonaws.com/com.gaiagps.static/Screenshot_4_9_13_4_58_PM.png for a breakdown of CPU usage

Thanks,
Jesse Crocker
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20130410/e032be6e/attachment.html>


More information about the gdal-dev mailing list