Tengo datos de un polígono con el área cubierta por los bosques (los datos están aquí - https://www.dropbox.com/s/zgckliydalljw6a/sp_data.zip?dl=0 ). Quiero convertir los polígonos en raster. El valor de cada celda de la cuadrícula debe basarse en el área cubierta por el polígono. Por ejemplo, si el tamaño de la celda de la cuadrícula es de 100m x 100m (10000m2) y los polígonos cubren 5000m2 de esta celda - el valor debe ser 50 (o 0,5). A continuación, puede encontrar mi solución propuesta:
Datos en bruto:
library('rgdal')
library('raster')
library('rgeos')
library('maptools')
sp_data <- readOGR(".", "sp_data")
spplot(sp_data)
He creado un nuevo raster con una resolución de 100 metros y una extensión igual a la del cuadro delimitador del polígono:
r <- raster()
bb <- extent(290000, 300000, 500000, 510000)
extent(r) <- bb
res(r) <- 100
También he creado un polígono de fondo - con los valores de las áreas sin bosque iguales a 0. Después, he fusionado estos dos datos poligonales:
sp_back <- as(extent(r), "SpatialPolygons")
proj4string(sp_back) <- proj4string(sp_data)
sp_back <- gDifference(sp_back, sp_data)
plot(sp_back, col='red')
plot(sp_data, col='green')
sp_back <- SpatialPolygonsDataFrame(sp_back, data=data.frame(value=rep(0, length(sp_back)), row.names=row.names(sp_back)))
sp_back <- spChFIDs(sp_back, "new_id")
sp_bind <- spRbind(sp_data, sp_back)
spplot(sp_bind)
Además, he creado una nueva trama con una resolución reducida (500 metros):
r2 <- r
res(r2) <- 500
He rasterizado los datos de los polígonos en el primer raster:
sp_raster <- rasterize(sp_bind, r, field="value", fun=max)
spplot(sp_raster, aspect='iso')
Al final, he remuestreado los valores del primer raster en el segundo raster:
sp_raster2 <- resample(sp_raster, r2, method='bilinear')
spplot(sp_raster2, aspect='iso')
Basándome en los resultados, tengo algunas preguntas:
- En primer lugar, ¿mi solución y el resultado son correctos?
- La conversión entre vector y raster simplifica de alguna manera mis datos (por ejemplo, la pérdida de polígonos pequeños) y probablemente añade algunos errores. El resultado del remuestreo se ve afectado por esta simplificación. ¿Existe alguna solución alternativa para calcular la parte del área de los polígonos en la celda de la cuadrícula?
Las respuestas con R, Grass o SAGA serán bienvenidas.