From 9cd7a3972d1fb665e1194d52e405c73b6ec3e9b5 Mon Sep 17 00:00:00 2001 From: Pierre Racine Date: Thu, 1 Dec 2011 01:10:24 +0000 Subject: [PATCH] Copied from ST_Union git-svn-id: http://svn.osgeo.org/postgis/trunk@8271 b70326c6-7e19-0410-871a-916f4a2858ee --- .../plpgsql/st_multibandmapalgebra.sql | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 raster/scripts/plpgsql/st_multibandmapalgebra.sql diff --git a/raster/scripts/plpgsql/st_multibandmapalgebra.sql b/raster/scripts/plpgsql/st_multibandmapalgebra.sql new file mode 100644 index 000000000..d69d20493 --- /dev/null +++ b/raster/scripts/plpgsql/st_multibandmapalgebra.sql @@ -0,0 +1,29 @@ +----------------------------------------------------------------------- +-- ST_MultiBandMapAlgebra +-- Return the same map algebra expression to all the band of a raster. +----------------------------------------------------------------------- +CREATE OR REPLACE FUNCTION ST_MultiBandMapAlgebra(rast1 raster, + rast2 raster, + expression text, + extentexpr text) + RETURNS raster AS + $$ + DECLARE + numband int; + newrast raster; + pixeltype text; + nodataval float; + BEGIN + numband := ST_NumBands(rast1); + IF numband != ST_NumBands(rast2) THEN + RAISE EXCEPTION 'ST_MultiBandMapAlgebra: Rasters do not have the same number of band'; + END IF; + newrast := ST_MakeEmptyRaster(rast1); + FOR b IN 1..numband LOOP + pixeltype := ST_BandPixelType(rast1, b); + nodataval := ST_BandNodataValue(rast1, b); + newrast := ST_AddBand(newrast, NULL, ST_MapAlgebraExpr(rast1, b, rast2, b, expression, pixeltype, extentexpr, nodataval), 1); + END LOOP; + END; + $$ + LANGUAGE 'plpgsql'; \ No newline at end of file -- 2.40.0