From 0e17e93920a7d5b62a9243654ff20c760b76bbae Mon Sep 17 00:00:00 2001 From: Bborie Park Date: Tue, 6 Dec 2011 16:48:12 +0000 Subject: [PATCH] Removed attempt to duplicate entire band in rt_raster_from_gdal_dataset git-svn-id: http://svn.osgeo.org/postgis/trunk@8309 b70326c6-7e19-0410-871a-916f4a2858ee --- raster/rt_core/rt_api.c | 135 ++++++++++++++-------------------------- 1 file changed, 45 insertions(+), 90 deletions(-) diff --git a/raster/rt_core/rt_api.c b/raster/rt_core/rt_api.c index 76651ac58..deaa3e486 100644 --- a/raster/rt_core/rt_api.c +++ b/raster/rt_core/rt_api.c @@ -6643,7 +6643,6 @@ rt_raster_from_gdal_dataset(GDALDatasetH ds) { int nXValid, nYValid; int iY, iX; double *values = NULL; - int byblock = 0; assert(NULL != ds); @@ -6757,106 +6756,62 @@ rt_raster_from_gdal_dataset(GDALDatasetH ds) { } band = rt_raster_get_band(rast, idx); - /* copy data from gdband to band */ - /* try to duplicate entire band data at once */ - do { - values = rtalloc(width * height * sizeof(double)); - if (NULL == values) { - byblock = 1; - break; - } - - cplerr = GDALRasterIO( - gdband, GF_Read, - 0, 0, - width, height, - values, width, height, - GDT_Float64, - 0, 0 - ); - - if (cplerr != CE_None) { - byblock = 1; - rtdealloc(values); - break; - } - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - value = values[x + y * width]; - - RASTER_DEBUGF(5, "(x, y, value) = (%d, %d, %f)", x, y, value); - - if (rt_band_set_pixel(band, x, y, value) < 0) { - rterror("rt_raster_from_gdal_dataset: Unable to save data from transformed raster\n"); - rt_raster_destroy(rast); - return NULL; - } - } - } - - rtdealloc(values); - } - while (0); - /* this makes use of GDAL's "natural" blocks */ - if (byblock) { - GDALGetBlockSize(gdband, &nXBlockSize, &nYBlockSize); - nXBlocks = (width + nXBlockSize - 1) / nXBlockSize; - nYBlocks = (height + nYBlockSize - 1) / nYBlockSize; - RASTER_DEBUGF(4, "(nXBlockSize, nYBlockSize) = (%d, %d)", nXBlockSize, nYBlockSize); - RASTER_DEBUGF(4, "(nXBlocks, nYBlocks) = (%d, %d)", nXBlocks, nYBlocks); - - values = rtalloc(nXBlockSize * nYBlockSize * sizeof(double)); - for (iYBlock = 0; iYBlock < nYBlocks; iYBlock++) { - for (iXBlock = 0; iXBlock < nXBlocks; iXBlock++) { - x = iXBlock * nXBlockSize; - y = iYBlock * nYBlockSize; - - cplerr = GDALRasterIO( - gdband, GF_Read, - x, y, - nXBlockSize, nYBlockSize, - values, nXBlockSize, nYBlockSize, - GDT_Float64, - 0, 0 - ); - if (cplerr != CE_None) { - rterror("rt_raster_from_gdal_dataset: Unable to get data from transformed raster\n"); - rt_raster_destroy(rast); - return NULL; - } + GDALGetBlockSize(gdband, &nXBlockSize, &nYBlockSize); + nXBlocks = (width + nXBlockSize - 1) / nXBlockSize; + nYBlocks = (height + nYBlockSize - 1) / nYBlockSize; + RASTER_DEBUGF(4, "(nXBlockSize, nYBlockSize) = (%d, %d)", nXBlockSize, nYBlockSize); + RASTER_DEBUGF(4, "(nXBlocks, nYBlocks) = (%d, %d)", nXBlocks, nYBlocks); + + values = rtalloc(nXBlockSize * nYBlockSize * sizeof(double)); + for (iYBlock = 0; iYBlock < nYBlocks; iYBlock++) { + for (iXBlock = 0; iXBlock < nXBlocks; iXBlock++) { + x = iXBlock * nXBlockSize; + y = iYBlock * nYBlockSize; + + cplerr = GDALRasterIO( + gdband, GF_Read, + x, y, + nXBlockSize, nYBlockSize, + values, nXBlockSize, nYBlockSize, + GDT_Float64, + 0, 0 + ); + if (cplerr != CE_None) { + rterror("rt_raster_from_gdal_dataset: Unable to get data from transformed raster\n"); + rt_raster_destroy(rast); + return NULL; + } - if ((iXBlock + 1) * nXBlockSize > width) - nXValid = width - (iXBlock * nXBlockSize); - else - nXValid = nXBlockSize; + if ((iXBlock + 1) * nXBlockSize > width) + nXValid = width - (iXBlock * nXBlockSize); + else + nXValid = nXBlockSize; - if ((iYBlock + 1) * nYBlockSize > height) - nYValid = height - (iYBlock * nYBlockSize); - else - nYValid = nYBlockSize; + if ((iYBlock + 1) * nYBlockSize > height) + nYValid = height - (iYBlock * nYBlockSize); + else + nYValid = nYBlockSize; - for (iY = 0; iY < nYValid; iY++) { - for (iX = 0; iX < nXValid; iX++) { - x = iX + (nXBlockSize * iXBlock); - y = iY + (nYBlockSize * iYBlock); - value = values[iX + iY * nXBlockSize]; + for (iY = 0; iY < nYValid; iY++) { + for (iX = 0; iX < nXValid; iX++) { + x = iX + (nXBlockSize * iXBlock); + y = iY + (nYBlockSize * iYBlock); + value = values[iX + iY * nXBlockSize]; - RASTER_DEBUGF(5, "(x, y, value) = (%d, %d, %f)", x, y, value); + RASTER_DEBUGF(5, "(x, y, value) = (%d, %d, %f)", x, y, value); - if (rt_band_set_pixel(band, x, y, value) < 0) { - rterror("rt_raster_from_gdal_dataset: Unable to save data from transformed raster\n"); - rt_raster_destroy(rast); - return NULL; - } + if (rt_band_set_pixel(band, x, y, value) < 0) { + rterror("rt_raster_from_gdal_dataset: Unable to save data from transformed raster\n"); + rt_raster_destroy(rast); + return NULL; } } } } - - rtdealloc(values); } + + rtdealloc(values); } return rast; -- 2.40.0