]> granicus.if.org Git - postgis/commitdiff
Additional fixups to not increase extent if an alignment is to take place in rt_raste...
authorBborie Park <bkpark at ucdavis.edu>
Fri, 24 Feb 2012 19:24:02 +0000 (19:24 +0000)
committerBborie Park <bkpark at ucdavis.edu>
Fri, 24 Feb 2012 19:24:02 +0000 (19:24 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@9289 b70326c6-7e19-0410-871a-916f4a2858ee

raster/rt_core/rt_api.c

index ef5d60bc271a8d5599dcca78e529e2411f4e6b1a..91784f009f544f4b90bc2aa1bd7c14ebfab3dcd4 100644 (file)
@@ -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 */