]> granicus.if.org Git - postgis/commitdiff
Copied from ST_Union
authorPierre Racine <Pierre.Racine@sbf.ulaval.ca>
Thu, 1 Dec 2011 01:10:24 +0000 (01:10 +0000)
committerPierre Racine <Pierre.Racine@sbf.ulaval.ca>
Thu, 1 Dec 2011 01:10:24 +0000 (01:10 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@8271 b70326c6-7e19-0410-871a-916f4a2858ee

raster/scripts/plpgsql/st_multibandmapalgebra.sql [new file with mode: 0644]

diff --git a/raster/scripts/plpgsql/st_multibandmapalgebra.sql b/raster/scripts/plpgsql/st_multibandmapalgebra.sql
new file mode 100644 (file)
index 0000000..d69d204
--- /dev/null
@@ -0,0 +1,29 @@
+-----------------------------------------------------------------------\r
+-- ST_MultiBandMapAlgebra\r
+-- Return the same map algebra expression to all the band of a raster. \r
+-----------------------------------------------------------------------\r
+CREATE OR REPLACE FUNCTION ST_MultiBandMapAlgebra(rast1 raster, \r
+                                                 rast2 raster, \r
+                                                  expression text, \r
+                                                 extentexpr text) \r
+    RETURNS raster AS \r
+    $$\r
+    DECLARE\r
+               numband int;\r
+               newrast raster;\r
+               pixeltype text;\r
+               nodataval float;\r
+    BEGIN\r
+        numband := ST_NumBands(rast1);\r
+        IF numband != ST_NumBands(rast2) THEN\r
+            RAISE EXCEPTION 'ST_MultiBandMapAlgebra: Rasters do not have the same number of band';\r
+        END IF;\r
+        newrast := ST_MakeEmptyRaster(rast1);\r
+        FOR b IN 1..numband LOOP\r
+            pixeltype := ST_BandPixelType(rast1, b);\r
+            nodataval := ST_BandNodataValue(rast1, b);\r
+            newrast := ST_AddBand(newrast, NULL, ST_MapAlgebraExpr(rast1, b, rast2, b, expression, pixeltype, extentexpr, nodataval), 1);\r
+        END LOOP;\r
+    END;\r
+    $$\r
+    LANGUAGE 'plpgsql';
\ No newline at end of file