Eu tenho encontrado todos os tipos de problemas usando o ArcGIS ZonalStats e achei que o R poderia ser uma ótima maneira. Dizendo que sou bastante novo no R, mas tenho um histórico de codificação.
A situação é que eu tenho vários rasters e um shapefile de polígono com muitos recursos de tamanhos diferentes (embora todos os recursos sejam maiores que uma célula raster e os recursos do polígono estejam alinhados ao raster). Eu descobri como obter o valor médio para cada recurso de polígono usando a biblioteca raster com extração:
#load packages required
require(rgdal)
require(sp)
require(raster)
# ---Set the working directory-------
datdir <- "/test_data/"
#Read in grid of water depth
ras <- raster("test_data/raster/pl_sm_rp1000/w001001.adf")
#read in polygon shape file
proxNA <- shapefile("test_data/proxy/PL_proxy_WD_NA_test")
#calc mean depth per polygon feature
#unweighted - only assigns grid to district if centroid is in that district
proxNA$RP1000 <- extract(ras, proxNA, fun = mean, na.rm = TRUE, weights = FALSE)
#plot depth values
spplot(proxNA[,'RP1000'])
O problema que tenho é que também preciso de uma proporção baseada em área entre a área do polígono e todas as células não NA no mesmo polígono. Sei qual é o tamanho da célula da varredura e posso obter a área para cada polígono, mas o link ausente é a contagem de todas as células não NA em cada recurso. Consegui obter o número de células de todas as células no polígono proxNA@data$Cnumb1000 <- cellFromPolygon(ras, proxNA)
e tenho certeza de que existe uma maneira de obter o valor real da célula de varredura, que exige um loop para obter o número de todas as células não NA combinadas com uma contagem, etc. MAS, tenho certeza que existe uma maneira muito melhor e mais rápida de fazer isso! Se algum de vocês tiver uma idéia ou puder me apontar na direção certa, ficaria muito grato!
ras
segurando sinalizadores de NA usando um valor legítimo? Parece que você pode filtrar esse valor ou obter uma contagem desses valores após o fato.