]> granicus.if.org Git - postgis/commitdiff
Added ST_StdDev4ma raster neighborhood processing function. #1318
authorDavid Zwarg <dzwarg@azavea.com>
Wed, 8 Feb 2012 17:23:14 +0000 (17:23 +0000)
committerDavid Zwarg <dzwarg@azavea.com>
Wed, 8 Feb 2012 17:23:14 +0000 (17:23 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@9101 b70326c6-7e19-0410-871a-916f4a2858ee

raster/rt_pg/rtpostgis.sql.in.c
raster/test/regress/rt_mapalgebrafctngb_userfunc.sql
raster/test/regress/rt_mapalgebrafctngb_userfunc_expected

index f166d87aded1459b2cf056e1f994cdd437076669..a69b46221e7b2afa67fd10992e2397fc177ceaf0 100644 (file)
@@ -2076,16 +2076,14 @@ CREATE OR REPLACE FUNCTION st_hillshade(rast raster, band integer, pixeltype tex
     LANGUAGE 'SQL' STABLE;
 
 CREATE OR REPLACE FUNCTION st_distinct4ma(matrix float[][], nodatamode TEXT, VARIADIC args TEXT[])
-    RETURNS float
-    AS
-    $$
-    DECLARE
-        _count integer;
-    BEGIN
-        RETURN (SELECT COUNT(DISTINCT unnest) FROM unnest(matrix));
-    END;
-    $$
-    LANGUAGE 'plpgsql' IMMUTABLE;
+    RETURNS float AS
+    $$ SELECT COUNT(DISTINCT unnest)::float FROM unnest($1) $$
+    LANGUAGE 'sql' IMMUTABLE;
+
+CREATE OR REPLACE FUNCTION st_stddev4ma(matrix float[][], nodatamode TEXT, VARIADIC args TEXT[])
+    RETURNS float AS
+    $$ SELECT stddev(unnest) FROM unnest($1) $$
+    LANGUAGE 'sql' IMMUTABLE;
 
 
 -----------------------------------------------------------------------
index 9a01380d93939238a251566c31561f5825197700..da0c5ffe23c0b7c78d4140bf060e5e5c2e1ada19 100644 (file)
@@ -237,3 +237,35 @@ SELECT
       ST_TestRasterNgb(3, 3, 1), 1, 1, 5
     ), 3, 3, 7
   ) AS rast;
+
+-- test st_stddev4ma, all one value
+SELECT
+  ST_Value(rast, 2, 2) = 10,
+  ST_Value(
+    ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_stddev4ma(float[][], text, text[])'::regprocedure, '1', NULL), 2, 2
+  ) = 0
+  FROM ST_TestRasterNgb(3, 3, 10) AS rast;
+
+-- test st_stddev4ma, all different values
+SELECT
+  ST_Value(rast, 2, 2) = 5,
+  round(ST_Value(
+    ST_MapAlgebraFctNgb(rast, 1, NULL, 1, 1, 'st_stddev4ma(float[][], text, text[])'::regprocedure, '1', NULL), 2, 2
+  ) * 1000000) = 2738613
+  FROM ST_SetValue(
+    ST_SetValue(
+      ST_SetValue(
+        ST_SetValue(
+          ST_SetValue(
+            ST_SetValue(
+              ST_SetValue(
+                ST_SetValue(
+                  ST_TestRasterNgb(3, 3, 1), 2, 1, 2
+                ), 3, 1, 3
+              ), 1, 2, 4
+            ), 2, 2, 5
+          ), 3, 2, 6
+        ), 1, 3, 7
+      ), 2, 3, 8
+    ), 3, 3, 9
+  ) AS rast;
index 9510b311809f225fb86ce5e28497ae400d8c728f..43d833328a08c7eb48a5f716388f0c6e90c03fc6 100644 (file)
@@ -31,3 +31,5 @@ t
 t
 t|t
 t|t
+t|t
+t|t