2017-01-08 1 views
0

Je voudrais rogner un raster basé sur SpatialPolygons objet. Je sais que nous pouvons utiliser la fonction crop dans le paquet raster,comment recadrer raster basé sur SpatialPolygons dans R

raster::crop(rasterFile, SpatialPolygonsObject) 

mais cette fonction est basée sur le extent d'objet SpatialPolygons, de sorte que le résultat retaillé est rectangle. Cependant, dans certains cas, SpatialPolygons objet n'est pas rectangle, comment faire face à ces situations?

Répondre

2

Vous pouvez utiliser raster::mask. Voici un exemple reproductible:

library(raster) 
r = raster(vals = rnorm(400), nrows=20, ncols=20, ext= extent(c(0, 20, 0, 20))) 
p = Polygon(matrix(5, 5, 15, 12, 7, 16, 3, 10), ncol=2, byrow = T)) 
p = SpatialPolygons(list(Polygons(list(p), "p"))) 

plot(r) 
lines(p) 

enter image description here

r2 = mask(r,p) 
plot(r2) 

enter image description here

Si vous devez également couper l'étendue de la trame pour supprimer des lignes et des colonnes vides autour du masque, vous pouvez utilisez crop avant d'appliquer mask, ou vous pouvez utiliser trim(r2, values = NA) ensuite.

+0

Merci pour votre réponse. Mais comment enlever ces cellules qui ne sont pas incluses dans le masque? –

+0

Mais vous pouvez faire 'crop' avant le' mask' pour éliminer autant de cellules que possible – RobertH

+0

ou vous utilisez la fonction trim (du package raster) pour supprimer les lignes et les colonnes externes avec des valeurs NA: 'trim (r2, values ​​= NA) ' – Claudia