Comecei com um arquivo raster do NetCDF .gri e .grd do Reino Unido, fornecido por um colega. Eu o recortei no R para ser apenas Londres, exportado e convertido em um arquivo ASC e depois o importei para o PostGIS usando os seguintes comandos no R:
library(raster)
uk_raster <- raster("AnnMean2011.grd")
london_area <- extent(-720000.0,-630000.0,-50000.0,25000)
london_raster <- crop(uk_raster, london_area)
writeRaster(london_raster, filename="AnnMean2011.asc", format="ascii")
E então na linha de comando do Ubuntu:
raster2pgsql -I -C -s 10001 -t 20x20 AnnMean2011.asc annualmean | psql -d james_traffic
Agora tenho uma tabela raster no PostGIS. O SRID de 10001 é o seguinte a propósito, novamente, fornecido por um colega:
INSERT INTO spatial_ref_sys(srid, auth_name, auth_srid, proj4text)
VALUES (10001,'CMAQ_Urban',10001,'+proj=lcc +a=6370000 +b=6370000 +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=000000 +y_0=00000');
No mesmo banco de dados, tenho um arquivo de polígono, SRID 27700, que cobre Londres. Gostaria de calcular o valor médio dentro de cada polígono, a partir da varredura.
Estou tentando algo assim, mas não está certo:
select polygons.postcode, avg(st_value(joined_data.rast))
from (
select (ST_Intersection(raster.rast, 1, polygons.geom)).*
from raster, polygons
where ST_Intersects(raster.rast, 1, polygons.geom)
) joined_data
group by polygons.postcode
Como eu faria isso por favor?
Parece que o polígono e a varredura estão alinhados corretamente. Preciso convertê-los para o WGS84, eu acho.
fonte
Respostas:
Graças ao comentário de Stefan ontem, acho que posso juntar algo de perguntas relacionadas e da documentação oficial e oferecer uma variedade de soluções.
Documentação PostGIS (
ST_SummaryStats
)Resuma pixels que cruzam edifícios de interesse
Este exemplo levou 574ms nas janelas PostGIS de 64 bits com todos os edifícios de Boston e telhas aéreas (blocos cada um com 150x150 pixels ~ 134.000 blocos), ~ 102.000 registros de construção
Evitando
ST_Intersection
desempenhoObserve que isso é menos exato, com pixels de interseção que cobrem menos de 50% de uma geometria de interseção sendo ignorados.
Stefan tem uma resposta aqui que evita o
ST_Intersection
.Notas
fonte