Src |
CREATE FUNCTION "URX_PUBLIC"."__st_countagg_transfn"(agg agg_count, rast raster, nband integer, exclude_nodata_value boolean, sample_percent double precision)
RETURNS agg_count AS
$BODY$
DECLARE
_count bigint;
rtn_agg agg_count;
BEGIN
-- only process parameter args once
IF agg IS NULL THEN
rtn_agg.count := 0;
IF nband < 1 THEN
RAISE EXCEPTION 'Band index must be greater than zero (1-based)';
ELSE
rtn_agg.nband := nband;
END IF;
IF exclude_nodata_value IS FALSE THEN
rtn_agg.exclude_nodata_value := FALSE;
ELSE
rtn_agg.exclude_nodata_value := TRUE;
END IF;
IF sample_percent < 0. OR sample_percent > 1. THEN
RAISE EXCEPTION 'Sample percent must be between zero and one';
ELSE
rtn_agg.sample_percent := sample_percent;
END IF;
ELSE
rtn_agg := agg;
END IF;
IF rast IS NOT NULL THEN
IF rtn_agg.exclude_nodata_value IS FALSE THEN
SELECT width * height INTO _count FROM "URX_PUBLIC".ST_Metadata(rast);
ELSE
SELECT count INTO _count FROM "URX_PUBLIC"._ST_summarystats(
rast,
rtn_agg.nband, rtn_agg.exclude_nodata_value,
rtn_agg.sample_percent
);
END IF;
END IF;
rtn_agg.count := rtn_agg.count + _count;
RETURN rtn_agg;
END;
$BODY$
LANGUAGE 'plpgsql' IMMUTABLE;
|