Convertir un polígono en un ráster usando R

15

Estoy tratando de convertir un shapefile en un raster dentro de R. Mi enfoque es leer en el raster de la siguiente manera:

library(rgdal) # Loads SP package by default
demo <- readOGR('F:/data/', 'shapefile') # Creates a SpatialPolygonsDataFrame class (sp)

Esto funciona bien, y puedo trazarlo. Sin embargo, es un shapefile grande y quiero convertirlo en un raster. He intentado lo siguiente:

r <- raster(ncol=180, nrow=180)
Demo_ras = rasterize(r, demo, 'pop')  # pop is an integer here

Mensaje de error:

Error in function (classes, fdef, mtable)  : 
  unable to find an inherited method for function "rasterize", for signature "RasterLayer", "SpatialPolygonsDataFrame"

Estoy un poco confundido cuál es el orden correcto de los argumentos. También he intentado esto:

Demo_ras = rasterize(demo, r, 'pop')

Lo que resulta en el error de seguimiento:

Error in .polygonsToRaster(x, y, ...) : 
  polygon and raster have no overlapping areas

Si bien tiene sentido que no se pueda generar un ráster para un área que no cubra el SpatialPolygonsDataFrame , no estoy seguro de qué información debo especificar para que el ráster contenga el área SpatialPolygonsDataFrame .

    
pregunta djq 11.12.2011 - 00:31

1 respuesta

22

La función rasterize () quiere tener la forma (polígono) primero, luego el raster por defecto, de ahí su primer error. El segundo comando que has mostrado Demo_ras = rasterize(demo, r, 'pop') es la forma correcta, pero a medida que descubriste que necesita las extensiones para coincidir.

Puede asignar las extensiones del ráster para cubrir las mismas extensiones del polígono:

extent(r) <- extent(demo)

... esto debería funcionar para el ejemplo que has proporcionado, siempre que 'pop' sea el nombre correcto de una variable en 'demo'. Lo siguiente funcionó justo ahora (R 2.14 / OSX), donde ÁREA es una columna de número real en boundary.shp:

poly <- readOGR("/workingdirectory", "boundary") # does not work  with final slash '/' 
r <- raster(ncol=180, nrow=180)
extent(r) <- extent(poly)
rp <- rasterize(poly, r, 'AREA')
    
respondido por el Simbamangu 11.12.2011 - 13:49

Lea otras preguntas en las etiquetas