Sind in PostGIS2 Zonenstatistiken möglich?

12

Ist es nun mit postgis2, das standardmäßig Raster unterstützt, möglich, eine zonale statistische Analyse durchzuführen?

Ich habe es googelt, aber nichts Festes gefunden? Gibt es ein Tutorial, mit dem ich anfangen kann?

Kann mir jemand ein SQL-Beispiel geben, wie es geht?

EDIT:

Eine aktualisierte (vereinfachte) Abfrage laut Blog Aragon erwähnen:

CREATE TABLE sum_pop3 AS 
 SELECT gid, SUM((ST_SummaryStats(ST_Clip(rast,1,geom))).sum)
 FROM perez_grid, ls_den
 WHERE ST_Intersects(geom,rast) 
GROUP BY gid;
nickves
quelle
Hallo @nickves, hast du es jemals geschafft, die zonalen Statistiken zum Laufen zu bringen? Die aktualisierte Abfrage funktioniert anscheinend nicht.
Cliff
@CliffPatterson erinnere mich, dass ich trainiert habe - es sind drei Jahre vergangen, seitdem hat sich viel verändert. Ich werde den Querry später ausprobieren und bestätigen oder aktualisieren.
nickves
etwas muss sich geändert haben, seit ich das das letzte Mal benutzt habe; Im Moment ist nicht genug Zeit, um zu sehen, wohin die Abfrage geht. Wenn du es
schaffst,
Schauen Sie sich meine letzte Frage zu diesem Thema an.
Cliff

Antworten:

6

Sie sollten das Dokument zur Speicherung, Bearbeitung und Analyse von Rasterdaten in der PostgreSQL / PostGIS-Geodatenbank von Pierre Racine und Steve Cumming lesen, das hier auf der FOSS vorgestellt wurde . Es gibt viele Funktionen, die als Raster-Statistiken definiert sind, um Ihr Problem zu lösen. Ich denke, ST_SummaryStats wird Ihnen in Bezug auf die Zonenstatik natürlich nicht genug helfen.

ST_SummaryStats(raster) Sie erhalten eine Reihe von Datensätzen (min, max, sum, mean, stddev, count (of withdata pixels)).

Postgis 2.0 unterstützt die Analyse von Zonenstatistiken mit einigen SQL-Abfragen, an denen Sie arbeiten. Ich habe eine gute Dokumentation im Netz über Zonale Statistik mit Esri vs Postgis 2.0 gefunden. Sie sollten bei Umzug Spatial einige Informationen überprüfen hier . Beide erhielten das gleiche Statistikergebnis mit einigen harten Abfragen.

Beispielabfrage, die von der Anthony Lopez-Website stammt, die ich bereits erwähnt habe ...

 CREATE TABLE sum_pop2 AS
WITH 
   feat AS (SELECT gid, geom FROM perez_grid AS b ),
   b_stats AS
(SELECT  gid, (stats).*
FROM (
SELECT gid, ST_SummaryStats(ST_Clip(rast,1,geom)) AS stats
FROM ls_den
INNER JOIN feat
ON ST_Intersects(feat.geom,rast) ) AS foo )
SELECT gid, SUM(count) AS cell_count
  ,SUM(sum) AS population
FROM b_stats
 WHERE count > 0
GROUP BY gid
ORDER BY gid;

Esri Zonal Statistik Ergebnis: Bevölkerung: 207.578 Zellzahl: 14.400

Ergebnis der Postgis-Methode: Bevölkerung: 207.578 Zellzahl: 14.400.

Bevölkerungsunterschied: 0%

Ich habe es noch nicht ausprobiert, aber Anthony erwähnte, dass es ein Performance-Problem bei der Rasteranalyse mit Postgis gab.

ich hoffe es hilft dir ...

Aragon
quelle
Es ist ein guter Ausgangspunkt!
nickves