]> granicus.if.org Git - postgis/commitdiff
Fix for ticket #1572. ST_PixelAsPolygons() return NULL values when the requested...
authorPierre Racine <Pierre.Racine@sbf.ulaval.ca>
Mon, 13 Feb 2012 18:28:45 +0000 (18:28 +0000)
committerPierre Racine <Pierre.Racine@sbf.ulaval.ca>
Mon, 13 Feb 2012 18:28:45 +0000 (18:28 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@9176 b70326c6-7e19-0410-871a-916f4a2858ee

raster/rt_pg/rtpostgis.sql.in.c

index 21bebbda43ca1a955f9c73e41ba2058a1be229b3..cc9467295b295ab9b5f1cd1e0bf022c6ef61a202 100644 (file)
@@ -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;