From 2799a2ed8092718323f13b645b2a4446fdecdaf2 Mon Sep 17 00:00:00 2001 From: Pierre Racine Date: Mon, 13 Feb 2012 18:28:45 +0000 Subject: [PATCH] Fix for ticket #1572. ST_PixelAsPolygons() return NULL values when the requested band or no band exist. git-svn-id: http://svn.osgeo.org/postgis/trunk@9176 b70326c6-7e19-0410-871a-916f4a2858ee --- raster/rt_pg/rtpostgis.sql.in.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/raster/rt_pg/rtpostgis.sql.in.c b/raster/rt_pg/rtpostgis.sql.in.c index 21bebbda4..cc9467295 100644 --- a/raster/rt_pg/rtpostgis.sql.in.c +++ b/raster/rt_pg/rtpostgis.sql.in.c @@ -2476,20 +2476,24 @@ CREATE OR REPLACE FUNCTION ST_PixelAsPolygons(rast raster, band integer DEFAULT var_h integer; var_x integer; var_y integer; + value float8 := NULL; + hasband boolean := TRUE; BEGIN - IF rast IS NOT NULL THEN + IF rast IS NOT NULL AND NOT ST_IsEmpty(rast) THEN IF ST_HasNoBand(rast, band) THEN - RAISE NOTICE 'Raster do not have band %. Returning null', band; - ELSE - SELECT ST_Width(rast), ST_Height(rast) - INTO var_w, var_h; - FOR var_x IN 1..var_w LOOP - FOR var_y IN 1..var_h LOOP - SELECT ST_PixelAsPolygon(rast, var_x, var_y), ST_Value(rast, band, var_x, var_y), var_x, var_y INTO geom,val,x,y; - RETURN NEXT; - END LOOP; - END LOOP; + RAISE NOTICE 'Raster do not have band %. Returning null values', band; + hasband := false; END IF; + SELECT ST_Width(rast), ST_Height(rast) INTO var_w, var_h; + FOR var_x IN 1..var_w LOOP + FOR var_y IN 1..var_h LOOP + IF hasband THEN + value := ST_Value(rast, band, var_x, var_y); + END IF; + SELECT ST_PixelAsPolygon(rast, var_x, var_y), value, var_x, var_y INTO geom,val,x,y; + RETURN NEXT; + END LOOP; + END LOOP; END IF; RETURN; END; -- 2.40.0