From: Bborie Park Date: Mon, 16 May 2011 19:30:20 +0000 (+0000) Subject: Added ST_Mean function. X-Git-Tag: 2.0.0alpha1~1662 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4b63289341b29540de37e2a8ecd33bb2b8fa5b75;p=postgis Added ST_Mean function. - added SQL functions for ST_Mean to rt_pg/rtpostgis.sql.in.c - added regression tests Associated ticket is #931 git-svn-id: http://svn.osgeo.org/postgis/trunk@7149 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/raster/rt_pg/rtpostgis.sql.in.c b/raster/rt_pg/rtpostgis.sql.in.c index 11937523b..ac04e995f 100644 --- a/raster/rt_pg/rtpostgis.sql.in.c +++ b/raster/rt_pg/rtpostgis.sql.in.c @@ -449,6 +449,99 @@ CREATE OR REPLACE FUNCTION st_approxsummarystats(rastertable text, rastercolumn AS $$ SELECT count, mean, stddev, min, max FROM _st_summarystats($1, $2, 1, FALSE, 0.1) $$ LANGUAGE 'SQL' IMMUTABLE STRICT; +----------------------------------------------------------------------- +-- ST_Mean and ST_ApproxMean +----------------------------------------------------------------------- +CREATE OR REPLACE FUNCTION st_mean(rast raster, nband int, hasnodata boolean, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, $2, $3, 1) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_mean(rast raster, nband int, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, $2, FALSE, 1) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_mean(rast raster, hasnodata boolean, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, 1, $2, 1) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_mean(rast raster, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, 1, FALSE, 1) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_approxmean(rast raster, nband int, hasnodata boolean, sample_percent double precision, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, $2, $3, $4) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_approxmean(rast raster, nband int, sample_percent double precision, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, $2, FALSE, $3) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_approxmean(rast raster, hasnodata boolean, sample_percent double precision, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, 1, $2, $3) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_approxmean(rast raster, sample_percent double precision, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, 1, FALSE, $2) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_approxmean(rast raster, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, 1, FALSE, 0.1) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_mean(rastertable text, rastercolumn text, nband int, hasnodata boolean, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, $2, $3, $4, 1) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_mean(rastertable text, rastercolumn text, nband int, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, $2, $3, FALSE, 1) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_mean(rastertable text, rastercolumn text, hasnodata boolean, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, $2, 1, $3, 1) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_mean(rastertable text, rastercolumn text, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, $2, 1, FALSE, 1) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_approxmean(rastertable text, rastercolumn text, nband int, hasnodata boolean, sample_percent double precision, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, $2, $3, $4, $5) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_approxmean(rastertable text, rastercolumn text, nband int, sample_percent double precision, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, $2, $3, FALSE, $4) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_approxmean(rastertable text, rastercolumn text, hasnodata boolean, sample_percent double precision, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, $2, 1, $3, $4) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_approxmean(rastertable text, rastercolumn text, sample_percent double precision, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean FROM _st_summarystats($1, $2, 1, FALSE, $3) $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + +CREATE OR REPLACE FUNCTION st_approxmean(rastertable text, rastercolumn text, OUT mean double precision) + RETURNS double precision + AS $$ SELECT mean 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 96c8679b8..7ca250521 100644 --- a/raster/test/regress/Makefile.in +++ b/raster/test/regress/Makefile.in @@ -62,6 +62,7 @@ TEST_BANDPROPS = \ rt_band_properties.sql \ rt_set_band_properties.sql \ rt_summarystats.sql \ + rt_mean.sql \ $(NULL) TEST_PIXEL = \ diff --git a/raster/test/regress/rt_mean.sql b/raster/test/regress/rt_mean.sql new file mode 100644 index 000000000..9155154e6 --- /dev/null +++ b/raster/test/regress/rt_mean.sql @@ -0,0 +1,94 @@ +SELECT * FROM ST_Mean( + 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_Mean( + 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 mean FROM ST_Mean( + 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 mean FROM ST_Mean( + 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_Mean('test', 'rast', 1, FALSE); +SELECT * FROM ST_Mean('test', 'rast', 1, TRUE); +SELECT * FROM ST_Mean('test', 'rast', 1); +SELECT * FROM ST_Mean('test', 'rast'); +ROLLBACK; + diff --git a/raster/test/regress/rt_mean_expected b/raster/test/regress/rt_mean_expected new file mode 100644 index 000000000..ca88317f9 --- /dev/null +++ b/raster/test/regress/rt_mean_expected @@ -0,0 +1,11 @@ +-3.429205 +-3.429205 +-3.429205 +-0.068584 +BEGIN +SELECT 10 +-3.429205 +-0.068584 +-3.429205 +-3.429205 +COMMIT