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

Christian Willmes c@willme@ @ending from uni-koeln@de
Mon Dec 10 15:46:06 CET 2018


Thank you.

But the most expensive step is constructing the mask with NA values.

 >gebco_rsl[gebco < rsl] <- NA

The rest of the computations is quite fast indeed... Do you know a 
faster alternative, for creating the mask, to the line above?

Best,
Christian

Am 09.12.18 um 09:59 schrieb obrl soil:
> 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

-- 
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



More information about the R-sig-Geo mailing list