From: Bborie Park Date: Thu, 23 Jun 2011 20:46:32 +0000 (+0000) Subject: Removed rt_raster_transform from rt_api.c and any calls to it since rt_raster_gdal_wa... X-Git-Tag: 2.0.0alpha1~1372 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=04bbd059b21a02dd181c6481ad5fcd86a909da56;p=postgis Removed rt_raster_transform from rt_api.c and any calls to it since rt_raster_gdal_warp has same results for reprojections. git-svn-id: http://svn.osgeo.org/postgis/trunk@7455 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/raster/rt_core/rt_api.c b/raster/rt_core/rt_api.c index b925a6cee..8263f2085 100644 --- a/raster/rt_core/rt_api.c +++ b/raster/rt_core/rt_api.c @@ -5896,156 +5896,6 @@ rt_raster_from_gdal_dataset(GDALDatasetH ds) { return rast; } -/** - * Return a transformed raster using GDALAutoCreateWarpedVRT() - * - * @param raster : raster to transform - * @param src_srs : the raster's coordinate system in OGC WKT or PROJ.4 - * @param dst_srs : the transformed raster's coordinate system - * @param resample_alg : the resampling algorithm - * @param max_err : maximum error measured in input pixels permitted - * (0.0 for exact calculations) - * - * @return the transformed raster - */ -rt_raster -rt_raster_transform(rt_raster raster, char *src_srs, char *dst_srs, - GDALResampleAlg resample_alg, double max_err) { - GDALDriverH src_drv = NULL; - GDALDatasetH src_ds = NULL; - GDALWarpOptions *wopts = NULL; - GDALDatasetH dst_ds = NULL; - - rt_raster rast = NULL; - rt_band band = NULL; - int i = 0; - int numBands = 0; - int hasnodata = 0; - - RASTER_DEBUG(3, "starting"); - - assert(NULL != raster); - assert(NULL != src_srs); - assert(NULL != dst_srs); - - /* - max_err must be gte zero - - the value 0.125 is the default used in gdalwarp.cpp on line 283 - */ - if (max_err < 0.) max_err = 0.125; - RASTER_DEBUGF(4, "max_err = %f", max_err); - - /* load raster into a GDAL MEM dataset */ - src_ds = rt_raster_to_gdal_mem(raster, src_srs, NULL, 0, &src_drv); - if (NULL == src_ds) { - rterror("rt_raster_transform: Unable to convert raster to GDAL MEM format\n"); - if (NULL != src_drv) { - GDALDeregisterDriver(src_drv); - GDALDestroyDriver(src_drv); - } - return NULL; - } - RASTER_DEBUG(3, "raster loaded into GDAL MEM dataset"); - - /* set nodata mapping */ - RASTER_DEBUG(3, "Setting nodata mapping"); - numBands = rt_raster_get_num_bands(raster); - wopts = GDALCreateWarpOptions(); - wopts->nBandCount = numBands; - wopts->padfSrcNoDataReal = (double *) CPLMalloc(numBands * sizeof(double)); - wopts->padfDstNoDataReal = (double *) CPLMalloc(numBands * sizeof(double)); - wopts->padfSrcNoDataImag = (double *) CPLMalloc(numBands * sizeof(double)); - wopts->padfDstNoDataImag = (double *) CPLMalloc(numBands * sizeof(double)); - if ( - NULL == wopts || - NULL == wopts->padfSrcNoDataReal || - NULL == wopts->padfDstNoDataReal || - NULL == wopts->padfSrcNoDataImag || - NULL == wopts->padfDstNoDataImag - ) { - rterror("rt_raster_transform: Out of memory allocating nodata mapping\n"); - GDALDestroyWarpOptions(wopts); - GDALClose(src_ds); - GDALDeregisterDriver(src_drv); - GDALDestroyDriver(src_drv); - return NULL; - } - for (i = 0; i < numBands; i++) { - band = rt_raster_get_band(raster, i); - if (!band) { - rterror("rt_raster_transform: Unable to process bands for nodata values\n"); - GDALDestroyWarpOptions(wopts); - GDALClose(src_ds); - GDALDeregisterDriver(src_drv); - GDALDestroyDriver(src_drv); - return NULL; - } - - if (!rt_band_get_hasnodata_flag(band)) { - /* - based on line 1004 of gdalwarp.cpp - the problem is that there is a chance that this number is a legitimate value - */ - wopts->padfSrcNoDataReal[i] = -123456.789; - } - else { - hasnodata = 1; - wopts->padfSrcNoDataReal[i] = rt_band_get_nodata(band); - RASTER_DEBUGF(4, "Added nodata value %f for band %d", wopts->padfSrcNoDataReal[i], i); - } - - wopts->padfDstNoDataReal[i] = wopts->padfSrcNoDataReal[i]; - wopts->padfDstNoDataImag[i] = wopts->padfSrcNoDataImag[i] = 0.0; - } - if (!hasnodata) { - RASTER_DEBUG(3, "No nodata mapping found"); - GDALDestroyWarpOptions(wopts); - wopts = NULL; - } - - /* - for now, just use GDALAutoCreateWarpedVRT as it gets the job done - in the future, it may be better to go down the more flexible but challenging path - of gdal/apps/gdalwarp.cpp - */ - RASTER_DEBUG(3, "Reprojecting raster"); - dst_ds = GDALAutoCreateWarpedVRT( - src_ds, - NULL, dst_srs, - resample_alg, max_err, - wopts - ); - RASTER_DEBUG(3, "Raster reprojected"); - if (NULL == dst_ds) { - rterror("rt_raster_transform: Unable to transform raster\n"); - if (hasnodata) GDALDestroyWarpOptions(wopts); - GDALClose(src_ds); - GDALDeregisterDriver(src_drv); - GDALDestroyDriver(src_drv); - return NULL; - } - - /* convert gdal dataset to raster */ - RASTER_DEBUG(3, "Converting GDAL dataset to raster"); - rast = rt_raster_from_gdal_dataset(dst_ds); - - if (hasnodata) GDALDestroyWarpOptions(wopts); - GDALClose(dst_ds); - GDALClose(src_ds); - GDALDeregisterDriver(src_drv); - GDALDestroyDriver(src_drv); - - if (NULL == rast) { - rterror("rt_raster_transform: Unable to transform raster\n"); - return NULL; - } - - RASTER_DEBUG(3, "done"); - - return rast; -} - /** * Return a warped raster using GDAL Warp API * diff --git a/raster/rt_core/rt_api.h b/raster/rt_core/rt_api.h index e70448530..086bf7816 100644 --- a/raster/rt_core/rt_api.h +++ b/raster/rt_core/rt_api.h @@ -927,21 +927,6 @@ GDALDatasetH rt_raster_to_gdal_mem(rt_raster raster, char *srs, */ rt_raster rt_raster_from_gdal_dataset(GDALDatasetH ds); -/** - * Return a transformed raster using GDALAutoCreateWarpedVRT() - * - * @param raster : raster to transform - * @param src_srs : the raster's coordinate system in OGC WKT or PROJ.4 - * @param dst_srs : the transformed raster's coordinate system - * @param resample_alg : the resampling algorithm - * @param max_err : maximum error measured in input pixels permitted - * (0.0 for exact calculations) - * - * @return the transformed raster - */ -rt_raster rt_raster_transform(rt_raster raster, char *src_srs, - char *dst_srs, GDALResampleAlg resample_alg, double max_err); - /** * Return a warped raster using GDAL Warp API * diff --git a/raster/rt_pg/rt_pg.c b/raster/rt_pg/rt_pg.c index c4297ad06..b640c727b 100644 --- a/raster/rt_pg/rt_pg.c +++ b/raster/rt_pg/rt_pg.c @@ -4990,9 +4990,6 @@ Datum RASTER_transform(PG_FUNCTION_ARGS) SPI_finish(); pfree(sql); - /* - rast = rt_raster_transform(raster, src_srs, dst_srs, alg, max_err); - */ rast = rt_raster_gdal_warp(raster, src_srs, dst_srs, NULL, NULL, diff --git a/raster/test/core/testapi.c b/raster/test/core/testapi.c index 6352d3ae9..a0a593a38 100644 --- a/raster/test/core/testapi.c +++ b/raster/test/core/testapi.c @@ -1459,7 +1459,7 @@ static void testGDALToRaster() { deepRelease(raster); } -static void testTransform() { +static void testGDALWarp() { rt_raster raster; rt_raster rast; rt_band band; @@ -1490,31 +1490,6 @@ static void testTransform() { } } - /* - rast = rt_raster_transform( - raster, - src_srs, - dst_srs, - GRA_NearestNeighbour, - -1 - ); - CHECK(rast); - CHECK((rt_raster_get_width(rast) == 124)); - CHECK((rt_raster_get_height(rast) == 117)); - CHECK((rt_raster_get_num_bands(rast) != 0)); - - band = rt_raster_get_band(rast, 0); - CHECK(band); - - CHECK(rt_band_get_hasnodata_flag(band)); - CHECK((fabs(rt_band_get_nodata(band) - 0.) < FLT_EPSILON)); - - CHECK(rt_band_get_pixel(band, 0, 0, &value) == 0); - CHECK(fabs(value - 0.) < FLT_EPSILON); - - deepRelease(rast); - */ - rast = rt_raster_gdal_warp( raster, src_srs, dst_srs, @@ -1927,9 +1902,9 @@ main() testGDALToRaster(); printf("Successfully tested rt_raster_from_gdal_dataset\n"); - printf("Testing rt_raster_transform\n"); - testTransform(); - printf("Successfully tested rt_raster_transform\n"); + printf("Testing rt_raster_gdal_warp\n"); + testGDALWarp(); + printf("Successfully tested rt_raster_gdal_warp\n"); deepRelease(raster);