From: Bborie Park Date: Tue, 25 Sep 2012 19:23:43 +0000 (+0000) Subject: Changed behavior when there is no pixels in the neighborhood for X-Git-Tag: 2.1.0beta2~621 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5cc2737a76ffb20548a37d0f8ea3c2027903525b;p=postgis Changed behavior when there is no pixels in the neighborhood for 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 --- diff --git a/raster/rt_pg/rt_pg.c b/raster/rt_pg/rt_pg.c index 558f06126..b1ba2157e 100644 --- a/raster/rt_pg/rt_pg.c +++ b/raster/rt_pg/rt_pg.c @@ -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 */ diff --git a/raster/test/regress/rt_neighborhood_expected b/raster/test/regress/rt_neighborhood_expected index a45cdbd3b..3844e3c13 100644 --- a/raster/test/regress/rt_neighborhood_expected +++ b/raster/test/regress/rt_neighborhood_expected @@ -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}}