As Estatísticas Zonais são possíveis no PostGIS2?


12

Agora, com o postgis2, que suporta rasters por padrão, é possível fazer uma análise estatística zonal?

Eu pesquisei no google, mas não encontrei nada sólido? Existe um tutorial para começar?

Alguém pode me dar um exemplo de sql sobre como fazê-lo?

EDIT:

Uma consulta atualizada (simplificada) de acordo com o blog Aragon menciona:

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;

Olá @nickves, você já conseguiu fazer com que estatísticas zonais funcionassem? Não consigo obter a consulta atualizada funcionando.
Cliff

@CliffPatterson lembra que eu malhei - faz três anos desde então, muitas coisas mudaram. Vou tentar a consulta mais tarde e confirmar ou atualizar.
Nick4 dez15

algo deve ter mudado desde a última vez que usei isso; não há tempo suficiente no momento para ver onde a consulta começa. se você conseguir consertá-lo, faça o favor de atualizar
nickves

Confira minha pergunta recente sobre o assunto.
Cliff

Respostas:


6

você deve verificar Armazenar, manipular e analisar dados rasterizados no documento do banco de dados espacial PostgreSQL / PostGIS de Pierre Racine e Steve Cumming, apresentado na FOSS, aqui . Existem muitas funções definidas como estatísticas de varredura para resolver seu problema. Eu acho que ST_SummaryStats irá ajudá-lo sobre estática zonal, é claro, não é suficiente.

ST_SummaryStats(raster) transformará um conjunto de registros (min, max, soma, média, stddev, count (de pixels com dados)).

O Postgis 2.0 suporta a análise estatística zonal com algumas consultas sql nas quais você trabalha. Eu me deparei com uma boa documentação na net sobre estatística zonal com esri vs postgis 2.0. você deve conferir algumas informações em Moving Spatial aqui . ambos receberam o mesmo resultado estatístico com algumas consultas difíceis.

consulta de exemplo que foi retirada do site de Anthony Lopez que eu mencionei 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;

Esri Zonal Resultado da estatística: População: 207,578 Contagem de células: 14,400

Resultado do Método Postgis: População: 207.578 Contagem de Células: 14.400.

Diferença percentual da população: 0%

Ainda não tentei, mas Anthony mencionou que havia algum problema de desempenho na análise raster com postgis.

espero que ajude você ...


É um bom ponto de partida!
nickves
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.