From: Bborie Park Date: Mon, 16 May 2011 19:32:16 +0000 (+0000) Subject: Added ST_StdDev function X-Git-Tag: 2.0.0alpha1~1661 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e8f6b54e70bfaf00fe8f27297f95c80277557090;p=postgis Added ST_StdDev function - 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 --- diff --git a/raster/rt_pg/rtpostgis.sql.in.c b/raster/rt_pg/rtpostgis.sql.in.c index ac04e995f..f2dc5a031 100644 --- a/raster/rt_pg/rtpostgis.sql.in.c +++ b/raster/rt_pg/rtpostgis.sql.in.c @@ -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 ----------------------------------------------------------------------- diff --git a/raster/test/regress/Makefile.in b/raster/test/regress/Makefile.in index 7ca250521..c163103fd 100644 --- a/raster/test/regress/Makefile.in +++ b/raster/test/regress/Makefile.in @@ -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 index 000000000..48bc9935e --- /dev/null +++ b/raster/test/regress/rt_stddev.sql @@ -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 index 000000000..956fdc5e6 --- /dev/null +++ b/raster/test/regress/rt_stddev_expected @@ -0,0 +1,11 @@ +6.570795 +6.570795 +6.570795 +1.045941 +BEGIN +SELECT 10 +6.570795 +1.045941 +6.570795 +6.570795 +COMMIT