From d1a99c694b880ae4d301c42bdfbc6b6ccbf0d9f7 Mon Sep 17 00:00:00 2001 From: Bborie Park Date: Fri, 24 Feb 2012 19:24:02 +0000 Subject: [PATCH] Additional fixups to not increase extent if an alignment is to take place in rt_raster_gdal_rasterize(). git-svn-id: http://svn.osgeo.org/postgis/trunk@9289 b70326c6-7e19-0410-871a-916f4a2858ee --- raster/rt_core/rt_api.c | 77 +++++++++++++++++++++++++++++++++++------ 1 file changed, 67 insertions(+), 10 deletions(-) diff --git a/raster/rt_core/rt_api.c b/raster/rt_core/rt_api.c index ef5d60bc2..91784f009 100644 --- a/raster/rt_core/rt_api.c +++ b/raster/rt_core/rt_api.c @@ -8914,15 +8914,28 @@ rt_raster_gdal_rasterize(const unsigned char *wkb, ) { #if POSTGIS_GDAL_VERSION > 18 - RASTER_DEBUG(3, "Adjusting extent for GDAL > 1.8 by half the scale"); if ( FLT_EQ((src_env.MaxX - src_env.MinX), 0) || (wkbtype == wkbMultiPoint) || (wkbtype == wkbMultiLineString) ) { - src_env.MinX -= (_scale[0] / 2.); - src_env.MaxX += (_scale[0] / 2.); + + /* check alignment flag: grid_xw */ + if ( + (NULL == ul_xw && NULL == ul_yw) && + (NULL != grid_xw && NULL != grid_xw) && + FLT_NEQ(*grid_xw, src_env.MinX) + ) { + // do nothing + RASTER_DEBUG(3, "Skipping extent adjustment on X-axis due to upcoming alignment"); + } + else { + RASTER_DEBUG(3, "Adjusting extent for GDAL > 1.8 by half the scale on X-axis"); + src_env.MinX -= (_scale[0] / 2.); + src_env.MaxX += (_scale[0] / 2.); + } + } if ( @@ -8930,20 +8943,47 @@ rt_raster_gdal_rasterize(const unsigned char *wkb, (wkbtype == wkbMultiPoint) || (wkbtype == wkbMultiLineString) ) { - src_env.MinY -= (_scale[1] / 2.); - src_env.MaxY += (_scale[1] / 2.); + + /* check alignment flag: grid_yw */ + if ( + (NULL == ul_xw && NULL == ul_yw) && + (NULL != grid_xw && NULL != grid_xw) && + FLT_NEQ(*grid_yw, src_env.MaxY) + ) { + // do nothing + RASTER_DEBUG(3, "Skipping extent adjustment on Y-axis due to upcoming alignment"); + } + else { + RASTER_DEBUG(3, "Adjusting extent for GDAL > 1.8 by half the scale on Y-axis"); + src_env.MinY -= (_scale[1] / 2.); + src_env.MaxY += (_scale[1] / 2.); + } + } #else - RASTER_DEBUG(3, "Adjusting extent for GDAL <= 1.8 by the scale"); if ( FLT_EQ((src_env.MaxX - src_env.MinX), 0) || (wkbtype == wkbMultiPoint) || (wkbtype == wkbMultiLineString) ) { - src_env.MinX -= _scale[0]; - src_env.MaxX += _scale[0]; + + /* check alignment flag: grid_xw */ + if ( + (NULL == ul_xw && NULL == ul_yw) && + (NULL != grid_xw && NULL != grid_xw) && + FLT_NEQ(*grid_xw, src_env.MinX) + ) { + // do nothing + RASTER_DEBUG(3, "Skipping extent adjustment on X-axis due to upcoming alignment"); + } + else { + RASTER_DEBUG(3, "Adjusting extent for GDAL <= 1.8 by the scale on X-axis"); + src_env.MinX -= _scale[0]; + src_env.MaxX += _scale[0]; + } + } if ( @@ -8951,11 +8991,28 @@ rt_raster_gdal_rasterize(const unsigned char *wkb, (wkbtype == wkbMultiPoint) || (wkbtype == wkbMultiLineString) ) { - src_env.MinY -= _scale[1]; - src_env.MaxY += _scale[1]; + + /* check alignment flag: grid_yw */ + if ( + (NULL == ul_xw && NULL == ul_yw) && + (NULL != grid_xw && NULL != grid_xw) && + FLT_NEQ(*grid_yw, src_env.MaxY) + ) { + // do nothing + RASTER_DEBUG(3, "Skipping extent adjustment on Y-axis due to upcoming alignment"); + } + else { + RASTER_DEBUG(3, "Adjusting extent for GDAL <= 1.8 by the scale on Y-axis"); + src_env.MinY -= _scale[1]; + src_env.MaxY += _scale[1]; + } + } #endif + RASTER_DEBUGF(3, "Adjusted extent: %f, %f, %f, %f", + src_env.MinX, src_env.MaxY, src_env.MaxX, src_env.MinY); + } /* reprocess extent if skewed */ -- 2.40.0