Search code examples
rraster

Crop multiple Rasters (ASCII)


I have more than 50 raster files (ASCII format) that I need to crop. I already exported the mask from ArcMap in ASCII format as well and loaded it into R. How can I make it work for all rasters in a row and export them with the same name as before (of course in a different folder to not overwrite)?

I know there is a crop function in the raster package, but I never used it so far. I only stacked them for further habitat analysis.

My Code so far:

#### Use only part of area
files2 <- list.files(path="D:/",full.names=TRUE, pattern = "\\.asc$")
files2
# Create a RasterLayer from first file
mask_raster <- raster(files2[1])
# Crop. But how??   
crop(x = , y=mask_raster)
writeRaster(...)`

Solution

  • I did not find an easy solution to crop multiple rasters by a raster, but by a shape file. So I just went back to ArcMap and converted the raster into a shapefile. Then in R, crop and mask were the crucial steps. See code below (modified from Mauricio Zambrano-Bigiarini's code). Hope this helps.

    # Reading the shapefile (mask to crop later)
    Maskshp <- readOGR("mask.shp")
    
    # Getting the spatial extent of the shapefile
    e <- extent(Maskshp)
    
    # for loop with (in this case) 60 runs
    for (i in 1:60) {
    
    # Reading the raster to crop
    files <- list.files(path="...your path",full.names=TRUE, pattern = "\\.asc$")
    Env_raster <- raster(files[i])
    # Save the filename
    filename <- (paste(basename(files[i]), sep=""))
    
    # Crop the raster
    Env_raster.crop <- crop(Env_raster, e, snap="out")
    
    # Dummy raster with a spatial extension equal to the cropped raster,
    # but full of NA values
    crop <- setValues(Env_raster.crop, NA)
    
    #  Rasterize the catchment boundaries, with NA outside the catchment boundaries
    Maskshp.r <- rasterize(Maskshp, crop)
    
    # Putting NA values in all the raster cells outside the shapefile boundaries
    Maskshp.masked <- mask(x=Env_raster.crop, mask=Maskshp.r) 
    plot(Maskshp.masked)
    
    #Export file to working directory with original name as new name
    writeRaster(Maskshp.masked, filename)
    }