]> granicus.if.org Git - postgis/commitdiff
Added ST_StdDev function
authorBborie Park <bkpark at ucdavis.edu>
Mon, 16 May 2011 19:32:16 +0000 (19:32 +0000)
committerBborie Park <bkpark at ucdavis.edu>
Mon, 16 May 2011 19:32:16 +0000 (19:32 +0000)
- added SQL functions for ST_StdDev
- added regression tests

Associated ticket is #932

git-svn-id: http://svn.osgeo.org/postgis/trunk@7150 b70326c6-7e19-0410-871a-916f4a2858ee

raster/rt_pg/rtpostgis.sql.in.c
raster/test/regress/Makefile.in
raster/test/regress/rt_stddev.sql [new file with mode: 0644]
raster/test/regress/rt_stddev_expected [new file with mode: 0644]

index ac04e995f4a9c5c685f76aea9bedccc4834f3334..f2dc5a031f3191a5d45a2859dcc5c5f1ce3de814 100644 (file)
@@ -542,6 +542,99 @@ CREATE OR REPLACE FUNCTION st_approxmean(rastertable text, rastercolumn text, OU
        AS $$ SELECT mean FROM _st_summarystats($1, $2, 1, FALSE, 0.1) $$
        LANGUAGE 'SQL' IMMUTABLE STRICT;
 
+-----------------------------------------------------------------------
+-- ST_StdDev and ST_ApproxStdDev
+-----------------------------------------------------------------------
+CREATE OR REPLACE FUNCTION st_stddev(rast raster, nband int, hasnodata boolean, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, $2, $3, 1) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_stddev(rast raster, nband int, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, $2, FALSE, 1) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_stddev(rast raster, hasnodata boolean, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, 1, $2, 1) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_stddev(rast raster, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, 1, FALSE, 1) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_approxstddev(rast raster, nband int, hasnodata boolean, sample_percent double precision, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, $2, $3, $4) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_approxstddev(rast raster, nband int, sample_percent double precision, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, $2, FALSE, $3) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_approxstddev(rast raster, hasnodata boolean, sample_percent double precision, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, 1, $2, $3) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_approxstddev(rast raster, sample_percent double precision, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, 1, FALSE, $2) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_approxstddev(rast raster, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, 1, FALSE, 0.1) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_stddev(rastertable text, rastercolumn text, nband int, hasnodata boolean, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, $2, $3, $4, 1) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_stddev(rastertable text, rastercolumn text, nband int, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, $2, $3, FALSE, 1) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_stddev(rastertable text, rastercolumn text, hasnodata boolean, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, $2, 1, $3, 1) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_stddev(rastertable text, rastercolumn text, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, $2, 1, FALSE, 1) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_approxstddev(rastertable text, rastercolumn text, nband int, hasnodata boolean, sample_percent double precision, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, $2, $3, $4, $5) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_approxstddev(rastertable text, rastercolumn text, nband int, sample_percent double precision, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, $2, $3, FALSE, $4) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_approxstddev(rastertable text, rastercolumn text, hasnodata boolean, sample_percent double precision, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, $2, 1, $3, $4) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_approxstddev(rastertable text, rastercolumn text, sample_percent double precision, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, $2, 1, FALSE, $3) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_approxstddev(rastertable text, rastercolumn text, OUT stddev double precision)
+       RETURNS double precision
+       AS $$ SELECT stddev FROM _st_summarystats($1, $2, 1, FALSE, 0.1) $$
+       LANGUAGE 'SQL' IMMUTABLE STRICT;
+
 -----------------------------------------------------------------------
 -- MapAlgebra
 -----------------------------------------------------------------------
index 7ca250521152ef2e28c4bd0ad7b9f29dc6364f5a..c163103fd5f3070d10424a61af967f9ac1e0242b 100644 (file)
@@ -63,6 +63,7 @@ TEST_BANDPROPS = \
        rt_set_band_properties.sql \
        rt_summarystats.sql \
        rt_mean.sql \
+       rt_stddev.sql \
        $(NULL)
 
 TEST_PIXEL = \
diff --git a/raster/test/regress/rt_stddev.sql b/raster/test/regress/rt_stddev.sql
new file mode 100644 (file)
index 0000000..48bc993
--- /dev/null
@@ -0,0 +1,93 @@
+SELECT * FROM ST_StdDev(
+       ST_SetValue(
+               ST_SetValue(
+                       ST_SetValue(
+                               ST_AddBand(
+                                       ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+                                       , 1, '64BF', 0, 0
+                               )
+                               , 1, 1, 1, -10
+                       )
+                       , 1, 5, 4, 0
+               )
+               , 1, 5, 5, 3.14159
+       )
+       , FALSE
+);
+SELECT ST_StdDev(
+       ST_SetValue(
+               ST_SetValue(
+                       ST_SetValue(
+                               ST_AddBand(
+                                       ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+                                       , 1, '64BF', 0, 0
+                               )
+                               , 1, 1, 1, -10
+                       )
+                       , 1, 5, 4, 0
+               )
+               , 1, 5, 5, 3.14159
+       )
+       , FALSE
+);
+SELECT stddev FROM ST_StdDev(
+       ST_SetValue(
+               ST_SetValue(
+                       ST_SetValue(
+                               ST_AddBand(
+                                       ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+                                       , 1, '64BF', 0, 0
+                               )
+                               , 1, 1, 1, -10
+                       )
+                       , 1, 5, 4, 0
+               )
+               , 1, 5, 5, 3.14159
+       )
+       , FALSE
+);
+SELECT stddev FROM ST_StdDev(
+       ST_SetValue(
+               ST_SetValue(
+                       ST_SetValue(
+                               ST_AddBand(
+                                       ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+                                       , 1, '64BF', 0, 0
+                               )
+                               , 1, 1, 1, -10
+                       )
+                       , 1, 5, 4, 0
+               )
+               , 1, 5, 5, 3.14159
+       )
+       , TRUE
+);
+BEGIN;
+CREATE TEMP TABLE test
+       ON COMMIT DROP AS
+       SELECT
+               rast.rast
+       FROM (
+               SELECT ST_SetValue(
+                       ST_SetValue(
+                               ST_SetValue(
+                                       ST_AddBand(
+                                               ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+                                               , 1, '64BF', 0, 0
+                                       )
+                                       , 1, 1, 1, -10
+                               )
+                               , 1, 5, 4, 0
+                       )
+                       , 1, 5, 5, 3.14159
+               ) AS rast
+       ) AS rast
+       FULL JOIN (
+               SELECT generate_series(1, 10) AS id
+       ) AS id
+               ON 1 = 1;
+SELECT * FROM ST_StdDev('test', 'rast', 1, FALSE);
+SELECT * FROM ST_StdDev('test', 'rast', 1, TRUE);
+SELECT * FROM ST_StdDev('test', 'rast', 1);
+SELECT * FROM ST_StdDev('test', 'rast');
+ROLLBACK;
diff --git a/raster/test/regress/rt_stddev_expected b/raster/test/regress/rt_stddev_expected
new file mode 100644 (file)
index 0000000..956fdc5
--- /dev/null
@@ -0,0 +1,11 @@
+6.570795
+6.570795
+6.570795
+1.045941
+BEGIN
+SELECT 10
+6.570795
+1.045941
+6.570795
+6.570795
+COMMIT