ST_SummaryStats — Gibt eine zusammenfassende Statistik aus, bestehend aus der Anzahl, der Summe, dem arithmetischen Mittel, der Standardabweichung, dem Minimum und dem Maximum der Werte eines Rasterbandes oder eines Rastercoverage. Wenn kein Band angegeben ist, wird Band 1 angenommen.
summarystats ST_SummaryStats(
raster rast, boolean exclude_nodata_value)
;
summarystats ST_SummaryStats(
raster rast, integer nband, boolean exclude_nodata_value)
;
Gibt summarystats aus, bestehend aus der Anzahl, der Summe, dem arithmetischen Mittel, der Standardabweichung, dem Minimum und dem Maximum der Werte eines Rasterbandes oder eines Rastercoverage. Wenn kein Band angegeben ist, wird Band 1 angenommen.
Standardmäßig werden nur jene Pixelwerte berücksichtigt, die nicht den Wert |
Standardmäßig werden alle Pixel abgetastet. Um eine schnellere Rückmeldung zu bekommen, können Sie den Parameter |
Geändert: 3.1.0 ST_SummaryStats(rastertable, rastercolumn, ...) Varianten wurden entfernt. Verwenden Sie stattdessen ST_SummaryStatsAgg.
Verfügbarkeit: 2.0.0
SELECT rid, band, (stats).* FROM (SELECT rid, band, ST_SummaryStats(rast, band) As stats FROM dummy_rast CROSS JOIN generate_series(1,3) As band WHERE rid=2) As foo; rid | band | count | sum | mean | stddev | min | max -----+------+-------+------+------------+-----------+-----+----- 2 | 1 | 23 | 5821 | 253.086957 | 1.248061 | 250 | 254 2 | 2 | 25 | 3682 | 147.28 | 59.862188 | 78 | 254 2 | 3 | 25 | 3290 | 131.6 | 61.647384 | 62 | 254
Dieses Beispiel benötigte 574ms in PostGIS unter Windows 64-Bit, mit allen Bauwerken und Luftbildkacheln von Boston (Kacheln jeweils 150x150 Pixel ~ 134.000 Kacheln; ~ 102.000 Datensätze mit Bauwerken)
WITH -- our features of interest feat AS (SELECT gid As building_id, geom_26986 As geom FROM buildings AS b WHERE gid IN(100, 103,150) ), -- clip band 2 of raster tiles to boundaries of builds -- then get stats for these clipped regions b_stats AS (SELECT building_id, (stats).* FROM (SELECT building_id, ST_SummaryStats(ST_Clip(rast,2,geom)) As stats FROM aerials.boston INNER JOIN feat ON ST_Intersects(feat.geom,rast) ) As foo ) -- finally summarize stats SELECT building_id, SUM(count) As num_pixels , MIN(min) As min_pval , MAX(max) As max_pval , SUM(mean*count)/SUM(count) As avg_pval FROM b_stats WHERE count > 0 GROUP BY building_id ORDER BY building_id; building_id | num_pixels | min_pval | max_pval | avg_pval -------------+------------+----------+----------+------------------ 100 | 1090 | 1 | 255 | 61.0697247706422 103 | 655 | 7 | 182 | 70.5038167938931 150 | 895 | 2 | 252 | 185.642458100559
-- stats for each band -- SELECT band, (stats).* FROM (SELECT band, ST_SummaryStats('o_4_boston','rast', band) As stats FROM generate_series(1,3) As band) As foo; band | count | sum | mean | stddev | min | max ------+---------+--------+------------------+------------------+-----+----- 1 | 8450000 | 725799 | 82.7064349112426 | 45.6800222638537 | 0 | 255 2 | 8450000 | 700487 | 81.4197705325444 | 44.2161184161765 | 0 | 255 3 | 8450000 | 575943 | 74.682739408284 | 44.2143885481407 | 0 | 255 -- For a table -- will get better speed if set sampling to less than 100% -- Here we set to 25% and get a much faster answer SELECT band, (stats).* FROM (SELECT band, ST_SummaryStats('o_4_boston','rast', band,true,0.25) As stats FROM generate_series(1,3) As band) As foo; band | count | sum | mean | stddev | min | max ------+---------+--------+------------------+------------------+-----+----- 1 | 2112500 | 180686 | 82.6890480473373 | 45.6961043857248 | 0 | 255 2 | 2112500 | 174571 | 81.448503668639 | 44.2252623171821 | 0 | 255 3 | 2112500 | 144364 | 74.6765884023669 | 44.2014869384578 | 0 | 255