¿Son posibles las estadísticas zonales en PostGIS2?

12

Ahora, con postgis2 que admite rásteres por defecto, ¿es posible hacer un análisis de estadísticas zonales?

¿Lo busqué en Google pero no encontré nada sólido? ¿Hay algún tutorial para comenzar?

¿Alguien puede darme un ejemplo sql sobre cómo hacerlo?

EDITAR:

Una consulta actualizada (simplificada) según la mención del blog de Aragón:

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
fuente
Hola @nickves, ¿alguna vez lograste que las estadísticas zonales funcionen? Parece que no puedo hacer que funcione la consulta actualizada.
Cliff
@CliffPatterson recuerda que hice ejercicio: han pasado tres años desde entonces, muchas cosas han cambiado. Voy a probar la consulta más tarde y confirmar o actualizar.
nickves
algo debe haber cambiado desde la última vez que lo usé; no hay suficiente tiempo en este momento para ver dónde comienza la consulta. si logras arreglarlo, por favor, actualiza gratis
nickves
Mira mi pregunta reciente sobre el tema.
Cliff

Respuestas:

6

debe consultar Almacenar, manipular y analizar datos ráster en el documento de base de datos espacial PostgreSQL / PostGIS de Pierre Racine y Steve Cumming que se presentó aquí en FOSS . Hay muchas funciones definidas como estadísticas ráster para resolver su problema. Creo que ST_SummaryStats lo ayudará con las estadísticas zonales, por supuesto, no lo suficiente.

ST_SummaryStats(raster) le dará un conjunto de registros (min, max, sum, mean, stddev, count (of withdata pixels)).

Postgis 2.0 admite el análisis de estadísticas zonales con algunas consultas sql en las que tiene trabajo. Me encontré con una buena documentación en la red sobre estadísticas zonales con esri vs postgis 2.0. deberías consultar información en Moving Spatial aquí . A ambos se les dio el mismo resultado estadístico con algunas consultas difíciles.

ejemplo de consulta que fue tomada del sitio de Anthony Lopez que he mencionado antes ...

 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;

Resultado de las estadísticas zonales de Esri: Población: 207,578 Conteo de células: 14,400

Resultado del Método Postgis: Población: 207,578 Conteo de células: 14,400.

Diferencia porcentual de población: 0%

Todavía no lo he probado, pero Anthony mencionó que había algún problema de rendimiento con el análisis de ráster con postgis.

Espero que te ayude...

Aragón
fuente
¡Es un buen punto de partida!
nickves