[postgis-users] ST_SummaryStats
Simon Greener
simon at spdba.com.au
Sun Jul 2 20:33:49 PDT 2023
Silly me, i can st_union the rows before input into st_summarystats.
Simon
39 Cliff View Drive
Allens Rivulet Tas 7150
(W) 0418 396 391
On 3 Jul 2023, 10:29, at 10:29, Simon SPDBA Greener <simon at spdba.com.au> wrote:
>Following the documentation I have crafted some GDAL to load, and SQL
>to
>query, some rasters.
>
>I note that :
>
>1. If, when loading using GDAL, I don't tile the rasters I get a table
>with a single row (toddriver_2019_2p5m)
>
>2. If, when loading using GDAL, I specify a tile size (eg -t 256*256) I
>
>get a table with multiple rows (toddriver_2019_3p0m)
>
>Now if I execute ST_SummaryStats against 1 I get a single row which
>looks correct.:
>
>WITH data AS (
> SELECT '1' as band,
> 'SRID=4283;POLYGON ((133.84747311077376 -23.74668364533433,
>133.84747311077376 -23.7409001580403, 133.85607301067603
>-23.7409001580403, 133.85607301067603 -23.746683645334333,
>133.84747311077376 -23.74668364533433))'::geometry as geom
>)
>SELECT (stats).sum as sum,
> (stats).mean as mean,
> (stats).stddev as stddev,
> (stats).min as min,
> (stats).max as max,
> (stats).count as count
> FROM (SELECT
>ST_SummaryStats(ST_Clip(ST_Band(raster,d.band),geom,true)) As stats
> FROM gis.toddriver_2019_2p5m
> INNER JOIN data as d
> ON ST_Intersects(d.geom,ST_Band(raster,d.band))
> ) As foo;
>
>If I execute the above against 2) I get multiple summary statistics
>rows, one for each of the tiles in the table.
>
>To return the summary stats for 2 across all rows I did the following:
>
>WITH data AS (
> SELECT '1' as band,
> 'SRID=4283;POLYGON ((133.84747311077376 -23.74668364533433,
>133.84747311077376 -23.7409001580403, 133.85607301067603
>-23.7409001580403, 133.85607301067603 -23.746683645334333,
>133.84747311077376 -23.74668364533433))'::geometry as geom
>)
>SELECT sum((stats).sum) as sum,
> avg((stats).mean) as mean,
> sqrt(sum((stats).stddev*(stats).stddev)/min(groups)) as stddev,
> min((stats).min) as min,
> max((stats).max) as max,
> sum((stats).count) as count
> FROM (SELECT row_number() over () as groups,
>ST_SummaryStats(ST_Clip(ST_Band(raster,d.band),geom,true)) As stats
> FROM gis.toddriver_2019_3p0m as t
> INNER JOIN data as d
> ON ST_Intersects(d.geom,ST_Band(raster,d.band))
> ) As f;
>
>I have tested this SQL against tiled and untiled versions of the same
>raster and the result looks correct.
>Even so, I could like confirmed that this approach is correct for tiled
>rasters?
>
>regards
>Simon
>
>--
>Simon Greener
>39 Cliff View Drive, Allens Rivulet, 7150, Tasmania, Australia
>(m) +61 418 396 391
>(w)www.spdba.com.au
>(m)simon at spdba.com.au
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>postgis-users mailing list
>postgis-users at lists.osgeo.org
>https://lists.osgeo.org/mailman/listinfo/postgis-users
More information about the postgis-users
mailing list