[R-sig-Geo] clip a raster layer to a mask layer using raster algebra in R?

obrl soil obrl@oil@u @ending from gm@il@com
Sun Dec 9 09:59:19 CET 2018


Hello,

in R you're working without the benefit of the GRASS 'region' concept
for raster work (and all the hidden helper code that goes with it), so
its never going to be a one liner - but the following may help.

You can use raster algebra in R to do masking. Construct your mask so
that the cells you want to keep are 0 and the cells you want to lose
are NA.

Then you can just add the raster and its mask together:

masked_raster <- raster + mask

because data + 0 = data, and data + NA = NA. This will still work even
if the two rasters don't have the same extent, so long as they have
the same cell size and alignment. The operation will throw a warning
but will complete successfully, returning the intersection of the two
objects. This should complete fairly quickly if the mask extent is
small relative to the target dataset. Try using raster::trim() on the
mask beforehand if it has a lot of whitespace.

HTH
@obrl_soil

On Thu, Dec 6, 2018 at 6:38 PM Christian Willmes <c.willmes using uni-koeln.de> wrote:
>
> Hello,
>
> this should be normally a very basic simple one-liner, but I can't get
> my head around it. I only find solutions for cliping a raster against a
> vector, but none for clipping a raster against a raster mask.
>
> I want to clip a layer to a mask. In GRASS GIS r.mapcalc the syntax is:
>
> result = if(RSLmask, gebco, null())
>
> This clips the GEBCO dataset to the extent of the given raster mask
> 'rslmask'. The result raster has heigt values within the raster mask
> extent, the rest of the raster layer has NULL or NA values.
>
> In R I did the following, but it does not work as expected:
>
> gebco <- raster(gebco2014) #load raster
>
> RSLmask <- gebco >= 0  #create mask layer
>
> RSL <- ifelse(RSLmask, 1, NA)
>
> The last command gives an error about vector type 'S4'?!
>
>  >In is.na(test) :
>    >is.na() auf nicht-(Liste oder Vektor) des Typs 'S4' angewendet
>
> So, in short: what is the R way to simply clip a raster to a raster mask?
>
> Thanks and best regards,
> Christian
>
> PS: If found many solutions for clipping a raster to a vector polygon,
> but this is not what I want.
>
> --
> Dr. Christian Willmes
> AG GIS & Fernerkundung      | GIS & RS Group
> Geographisches Institut     | Institute of Geography
> Universität zu Köln         | University of Cologne
> Tel.: +49 (0)221 470 6234
> http://www.geographie.uni-koeln.de/14126.html
> http://www.sfb806.de
> http://crc806db.uni-koeln.de
> http://publons.com/a/1316706/
> http://orcid.org/0000-0002-5566-6542
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo



More information about the R-sig-Geo mailing list