Me he encontrado con todo tipo de problemas usando ArcGIS ZonalStats y pensé que R podría ser una excelente manera. Diciendo que soy bastante nuevo en R, pero tengo un fondo de codificación.
La situación es que tengo varios rásteres y un archivo de forma de polígono con muchas características de diferentes tamaños (aunque todas las características son más grandes que una celda de trama y las características de polígono están alineadas con el ráster). He descubierto cómo obtener el valor medio para cada entidad poligonal usando la biblioteca ráster con extracto:
#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'])
El problema que tengo es que también necesito una relación basada en el área entre el área del polígono y todas las celdas que no son de NA en el mismo polígono. Sé cuál es el tamaño de celda del ráster y puedo obtener el área para cada polígono, pero el enlace que falta es el recuento de todas las celdas que no son NA en cada entidad. Logré obtener el número de celda de todas las celdas en el polígono proxNA@data$Cnumb1000 <- cellFromPolygon(ras, proxNA)
y estoy seguro de que hay una manera de obtener el valor real de la celda ráster, que luego requiere un bucle para obtener el número de todas las celdas que no son NA combinadas con un recuento, etc. PERO, estoy seguro de que hay una manera mucho mejor y más rápida de hacerlo. Si alguno de ustedes tiene una idea o puede señalarme en la dirección correcta, ¡estaría muy agradecido!
ras
sosteniendo banderas de NA con un valor legítimo? Parece que podría filtrar ese valor u obtener un recuento de esos valores después del hecho.