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);
}
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) || (
)
)
) {
- 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 */
{{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}}