]> granicus.if.org Git - postgis/commitdiff
Changed behavior when there is no pixels in the neighborhood for
authorBborie Park <bkpark at ucdavis.edu>
Tue, 25 Sep 2012 19:23:43 +0000 (19:23 +0000)
committerBborie Park <bkpark at ucdavis.edu>
Tue, 25 Sep 2012 19:23:43 +0000 (19:23 +0000)
ST_Neighborhood.  It should still return an array as the pixel of
interest could have a value... just surrounded by NODATA.

git-svn-id: http://svn.osgeo.org/postgis/trunk@10329 b70326c6-7e19-0410-871a-916f4a2858ee

raster/rt_pg/rt_pg.c
raster/test/regress/rt_neighborhood_expected

index 558f06126c2386d2d396ffbf615ffdaba44510f2..b1ba2157e85d00bea6c71c3120a885609bd7fde9 100644 (file)
@@ -3854,14 +3854,9 @@ Datum RASTER_neighborhood(PG_FUNCTION_ARGS)
                exclude_nodata_value,
                &npixels
        );
-       /* error or no neighbors */
-       if (count < 1) {
-               /* error */
-               if (count < 0)
-                       elog(NOTICE, "Unable to get the pixel's neighborhood for band at index %d", bandindex);
-               /* no neighbors */
-               else
-                       elog(NOTICE, "Pixel has no neighbors for band at distance %d x %d", distance[0], distance[1]);
+       /* error */
+       if (count < 0) {
+               elog(NOTICE, "Unable to get the pixel's neighborhood for band at index %d", bandindex);
                        
                rt_band_destroy(band);
                rt_raster_destroy(raster);
@@ -3898,7 +3893,28 @@ Datum RASTER_neighborhood(PG_FUNCTION_ARGS)
        }
        POSTGIS_RT_DEBUGF(4, "pixval: %f", pixval);
 
+
        /* add pixel to neighborhood */
+       count++;
+       if (count > 1)
+               npixels = (rt_pixel) repalloc(npixels, sizeof(struct rt_pixel_t) * count);
+       else
+               npixels = (rt_pixel) palloc(sizeof(struct rt_pixel_t));
+       if (npixels == NULL) {
+               elog(ERROR, "RASTER_neighborhood: Unable to reallocate memory for neighborhood");
+
+               rt_band_destroy(band);
+               rt_raster_destroy(raster);
+               PG_FREE_IF_COPY(pgraster, 0);
+
+               PG_RETURN_NULL();
+       }
+       npixels[count - 1].x = _x;
+       npixels[count - 1].y = _y;
+       npixels[count - 1].nodata = 1;
+       npixels[count - 1].value = pixval;
+
+       /* set NODATA */
        if (
                !exclude_nodata_value || 
                !rt_band_get_hasnodata_flag(band) || (
@@ -3909,22 +3925,7 @@ Datum RASTER_neighborhood(PG_FUNCTION_ARGS)
                        )
                )
        ) {
-               count++;
-               npixels = (rt_pixel) repalloc(npixels, sizeof(struct rt_pixel_t) * count);
-               if (npixels == NULL) {
-                       elog(ERROR, "RASTER_neighborhood: Unable to reallocate memory for neighborhood");
-
-                       rt_band_destroy(band);
-                       rt_raster_destroy(raster);
-                       PG_FREE_IF_COPY(pgraster, 0);
-
-                       PG_RETURN_NULL();
-               }
-
-               npixels[count - 1].x = _x;
-               npixels[count - 1].y = _y;
                npixels[count - 1].nodata = 0;
-               npixels[count - 1].value = pixval;
        }
 
        /* free unnecessary stuff */
index a45cdbd3b60cf041de9e4d30f65253bc683a98bf..3844e3c13ee2162f5f667db363cb7f3dd012ed88 100644 (file)
@@ -5,11 +5,11 @@ NOTICE:  table "raster_neighborhood" does not exist, skipping
 {{1,1,1},{1,1,NULL},{1,1,1}}
 {{1,1,NULL,1,1},{1,1,1,1,1},{NULL,1,1,NULL,1},{1,1,1,1,1},{1,NULL,1,1,NULL}}
 {{1,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}
-NOTICE:  Pixel has no neighbors for band at distance 1 x 1
-NOTICE:  Pixel has no neighbors for band at distance 1 x 1
+{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}
+{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}
 {{NULL,NULL,NULL},{NULL,NULL,1},{NULL,NULL,1}}
-NOTICE:  Pixel has no neighbors for band at distance 1 x 1
-NOTICE:  Pixel has no neighbors for band at distance 3 x 3
+{{NULL,NULL,NULL},{NULL,NULL,NULL},{NULL,NULL,NULL}}
+{{NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL,NULL,NULL}}
 {{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0}}
 {{1,1,NULL},{1,1,1},{NULL,1,1}}
 {{1,1,1,1,1},{NULL,1,1,1,NULL},{1,1,1,1,1}}