mirror of
https://git.osgeo.org/gitea/postgis/postgis
synced 2024-10-24 09:02:37 +00:00
Replaced the summarystatsstate type with the summarystats type to avoid defining a new type.
git-svn-id: http://svn.osgeo.org/postgis/trunk@8256 b70326c6-7e19-0410-871a-916f4a2858ee
This commit is contained in:
parent
d62d4df2e7
commit
65aab4a7c9
|
@ -1,63 +1,56 @@
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- ST_SummaryStatsAgg AGGREGATE
|
-- ST_SummaryStatsAgg AGGREGATE
|
||||||
-- Compute summary statistics for an aggregation of raster.
|
-- Compute summary statistics for an aggregation of raster.
|
||||||
--
|
--
|
||||||
-- Exemple
|
-- Exemple
|
||||||
-- SELECT (aws).count,
|
-- SELECT (ss).count,
|
||||||
-- (aws).sum,
|
-- (ss).sum,
|
||||||
-- (aws).mean,
|
-- (ss).mean,
|
||||||
-- (aws).min,
|
-- (ss).min,
|
||||||
-- (aws).max
|
-- (ss).max
|
||||||
-- FROM (SELECT ST_SummaryStatsAgg(gv) aws
|
-- FROM (SELECT ST_SummaryStatsAgg(gv) ss
|
||||||
-- FROM (SELECT ST_Clip(rt.rast, gt.geom) gv
|
-- FROM (SELECT ST_Clip(rt.rast, gt.geom) gv
|
||||||
-- FROM rasttable rt, geomtable gt
|
-- FROM rasttable rt, geomtable gt
|
||||||
-- WHERE ST_Intersects(rt.rast, gt.geom)
|
-- WHERE ST_Intersects(rt.rast, gt.geom)
|
||||||
-- ) foo
|
-- ) foo
|
||||||
-- GROUP BY gt.id
|
-- GROUP BY gt.id
|
||||||
-- ) foo2
|
-- ) foo2
|
||||||
---------------------------------------------------------------------
|
|
||||||
|
|
||||||
-- DROP TYPE summarystatsstate CASCADE;
|
|
||||||
CREATE TYPE summarystatsstate AS (
|
|
||||||
count int,
|
|
||||||
sum double precision,
|
|
||||||
min double precision,
|
|
||||||
max double precision
|
|
||||||
);
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- raster_summarystatsstate
|
-- raster_summarystatsstate
|
||||||
-- State function used by the ST_SummaryStatsAgg aggregate
|
-- State function used by the ST_SummaryStatsAgg aggregate
|
||||||
CREATE OR REPLACE FUNCTION raster_summarystatsstate(sss summarystatsstate, rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 1)
|
CREATE OR REPLACE FUNCTION raster_summarystatsstate(ss summarystats, rast raster, nband int DEFAULT 1, exclude_nodata_value boolean DEFAULT TRUE, sample_percent double precision DEFAULT 1)
|
||||||
RETURNS summarystatsstate
|
RETURNS summarystats
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
newstats summarystats;
|
newstats summarystats;
|
||||||
ret summarystatsstate;
|
ret summarystats;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF rast IS NULL THEN
|
IF rast IS NULL THEN
|
||||||
RETURN sss;
|
RETURN ss;
|
||||||
END IF;
|
END IF;
|
||||||
newstats := _ST_SummaryStats(rast, nband, exclude_nodata_value, sample_percent);
|
newstats := _ST_SummaryStats(rast, nband, exclude_nodata_value, sample_percent);
|
||||||
IF $1 IS NULL THEN
|
IF $1 IS NULL THEN
|
||||||
ret := (newstats.count,
|
ret := (newstats.count,
|
||||||
newstats.sum,
|
newstats.sum,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
newstats.min,
|
newstats.min,
|
||||||
newstats.max)::summarystatsstate;
|
newstats.max)::summarystats;
|
||||||
ELSE
|
ELSE
|
||||||
ret := (sss.count + newstats.count,
|
ret := (ss.count + newstats.count,
|
||||||
sss.sum + newstats.sum,
|
ss.sum + newstats.sum,
|
||||||
least(sss.min, newstats.min),
|
null,
|
||||||
greatest(sss.max, newstats.max))::summarystatsstate;
|
null,
|
||||||
|
least(ss.min, newstats.min),
|
||||||
|
greatest(ss.max, newstats.max))::summarystats;
|
||||||
END IF;
|
END IF;
|
||||||
RAISE NOTICE 'min=% ',ret.min;
|
|
||||||
RETURN ret;
|
RETURN ret;
|
||||||
END;
|
END;
|
||||||
$$
|
$$
|
||||||
LANGUAGE 'plpgsql';
|
LANGUAGE 'plpgsql';
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION raster_summarystatsstate(sss summarystatsstate, rast raster)
|
CREATE OR REPLACE FUNCTION raster_summarystatsstate(ss summarystats, rast raster)
|
||||||
RETURNS summarystatsstate
|
RETURNS summarystats
|
||||||
AS $$
|
AS $$
|
||||||
SELECT raster_summarystatsstate($1, $2, 1, true, 1);
|
SELECT raster_summarystatsstate($1, $2, 1, true, 1);
|
||||||
$$ LANGUAGE 'SQL';
|
$$ LANGUAGE 'SQL';
|
||||||
|
@ -65,7 +58,7 @@ CREATE OR REPLACE FUNCTION raster_summarystatsstate(sss summarystatsstate, rast
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- raster_summarystatsfinal
|
-- raster_summarystatsfinal
|
||||||
-- Final function used by the ST_SummaryStatsAgg aggregate
|
-- Final function used by the ST_SummaryStatsAgg aggregate
|
||||||
CREATE OR REPLACE FUNCTION raster_summarystatsfinal(sss summarystatsstate)
|
CREATE OR REPLACE FUNCTION raster_summarystatsfinal(ss summarystats)
|
||||||
RETURNS summarystats
|
RETURNS summarystats
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
|
@ -88,13 +81,13 @@ CREATE OR REPLACE FUNCTION raster_summarystatsfinal(sss summarystatsstate)
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
CREATE AGGREGATE ST_SummaryStatsAgg(raster, int, boolean, double precision) (
|
CREATE AGGREGATE ST_SummaryStatsAgg(raster, int, boolean, double precision) (
|
||||||
SFUNC=raster_summarystatsstate,
|
SFUNC=raster_summarystatsstate,
|
||||||
STYPE=summarystatsstate,
|
STYPE=summarystats,
|
||||||
FINALFUNC=raster_summarystatsfinal
|
FINALFUNC=raster_summarystatsfinal
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE AGGREGATE ST_SummaryStatsAgg(raster) (
|
CREATE AGGREGATE ST_SummaryStatsAgg(raster) (
|
||||||
SFUNC=raster_summarystatsstate,
|
SFUNC=raster_summarystatsstate,
|
||||||
STYPE=summarystatsstate,
|
STYPE=summarystats,
|
||||||
FINALFUNC=raster_summarystatsfinal
|
FINALFUNC=raster_summarystatsfinal
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -110,13 +103,13 @@ CREATE OR REPLACE FUNCTION ST_TestRaster(h integer, w integer, val float8)
|
||||||
LANGUAGE 'plpgsql';
|
LANGUAGE 'plpgsql';
|
||||||
|
|
||||||
SELECT id,
|
SELECT id,
|
||||||
(sss).count,
|
(ss).count,
|
||||||
(sss).sum,
|
(ss).sum,
|
||||||
(sss).mean,
|
(ss).mean,
|
||||||
(sss).stddev,
|
(ss).stddev,
|
||||||
(sss).min,
|
(ss).min,
|
||||||
(sss).max
|
(ss).max
|
||||||
FROM (SELECT ST_SummaryStatsAgg(rast) as sss, id
|
FROM (SELECT ST_SummaryStatsAgg(rast) as ss, id
|
||||||
FROM (SELECT 1 id, ST_TestRaster(2, 2, 2) rast
|
FROM (SELECT 1 id, ST_TestRaster(2, 2, 2) rast
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT 1 id, ST_TestRaster(2, 2, 4) rast
|
SELECT 1 id, ST_TestRaster(2, 2, 4) rast
|
||||||
|
|
Loading…
Reference in a new issue