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


15

Estoy tratando de convertir un shapefile en un ráster dentro de R. Mi enfoque es leer en el ráster 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 archivo de forma grande y quiero convertirlo en un ráster. 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 sobre 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 siguiente error:

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 cubre el área SpatialPolygonsDataFrame, no estoy seguro de qué información necesito especificar para que el ráster deba contener el SpatialPolygonsDataFrameárea.

Respuestas:


23

La función rasterize () quiere tener la forma (polígono) primero y luego el ráster por defecto, de ahí su primer error. El segundo comando que ha mostrado Demo_ras = rasterize(demo, r, 'pop')es el correcto, pero como descubrió, ¡necesita la extensión para que coincida!

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 ha proporcionado, siempre que 'pop' sea el nombre correcto de una variable en 'demo'. Lo siguiente funcionó justo ahora (R 2.14 / OSX), donde AREA 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')

Vi su edición y comprobé nuevamente: la barra diagonal final aparentemente es opcional en OSX, ¿no lo tomo con Windows? ¡Vale la pena saberlo!
Simbamangu

hmmm, tuve un problema con la barra diagonal tanto en OSX como en Windows ... no estoy seguro si estamos usando la misma versión o no.
DJ

OSX 10.7.2 / R 2.14 en la mía; definitivamente funciona en ambos sentidos 'redondo. ¿Que estas usando?
Simbamangu

Para automatizar la conversión, escribí esto: github.com/brry/misc/blob/master/shp2raster.R
Berry
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.