Conversion d'un polygone en raster à l'aide de R

15

J'essaie de convertir un fichier de formes en raster dans R. Mon approche consiste à lire le raster comme suit:

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

Cela fonctionne très bien et je peux le représenter. Cependant, c'est un grand fichier de formes et je veux le convertir en raster. J'ai essayé ce qui suit:

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

Message d'erreur:

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

Je suis un peu confus quel est l'ordre correct des arguments. J'ai également essayé ceci:

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

Ce qui entraîne l'erreur suivante:

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

Bien qu'il soit logique qu'un raster ne puisse pas être généré pour une zone qui ne couvre pas le SpatialPolygonsDataFrame, je ne sais pas quelles informations je dois spécifier pour que le raster contienne la SpatialPolygonsDataFramezone.

djq
la source

Réponses:

23

La fonction rasterize () veut avoir la forme (polygone) d'abord puis le raster par défaut, d'où votre première erreur. La deuxième commande que vous avez montrée Demo_ras = rasterize(demo, r, 'pop')est la bonne façon de le faire, mais comme vous l'avez découvert, elle a besoin de l'étendue pour correspondre!

Vous pouvez affecter les étendues du raster pour couvrir les mêmes étendues du polygone:

extent(r) <- extent(demo)

... cela devrait fonctionner pour l'exemple que vous avez fourni, tant que «pop» est le nom correct d'une variable dans «demo». Ce qui suit a fonctionné tout à l'heure (R 2.14 / OSX), où AREA est une colonne de nombre réel dans border.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')
Simbamangu
la source
Vu votre modification et vérifié à nouveau - la dernière barre oblique est apparemment facultative sur OSX, je ne le prends pas avec Windows? Bon à savoir!
Simbamangu
hmmm, j'ai eu un problème avec la barre oblique sur OSX et Windows .. je ne sais pas si nous utilisons la même version ou non.
djq
OSX 10.7.2 / R 2.14 sur le mien; fonctionne certainement dans les deux sens. Qu'est-ce que vous utilisez?
Simbamangu
Pour automatiser la conversion, j'ai écrit ceci: github.com/brry/misc/blob/master/shp2raster.R
Berry