Search code examples
rcroprastershapefileclip

Clipping raster using shapefile in R, but keeping the geometry of the shapefile


I am using {raster} to clip (or crop) a raster based on an irregular shapefile (the Amazon biome) but the output always has a rectangular extent. However, I need the output in the exact same geometry of the shapefile. Any tips? Cheers.

library(raster)
library(rgdal)

myshp <- readOGR("Amazon.shp", layer="Amazon")
e <- extent(myshp)
myraster <- raster("Temperature.tif")
myraster.crop <- crop(myraster, e, snap="out", filename="myoutput.tif")

Solution

  • One option is to use raster::mask()

    library(maptools)  ## For wrld_simpl
    library(raster)
    
    ## Example SpatialPolygonsDataFrame
    data(wrld_simpl)
    SPDF <- subset(wrld_simpl, NAME=="Brazil")
    
    ## Example RasterLayer
    r <- raster(nrow=1e3, ncol=1e3, crs=proj4string(SPDF))
    r[] <- 1:length(r)
    
    ## crop and mask
    r2 <- crop(r, extent(SPDF))
    r3 <- mask(r2, SPDF)
    
    ## Check that it worked
    plot(r3)
    plot(SPDF, add=TRUE, lwd=2)
    

    enter image description here