[R-sig-Geo] Mask from raster with less RAM

Frederico Faleiro |v|@|e|ro @end|ng |rom gm@||@com
Wed Aug 12 15:55:21 CEST 2020


Hi guys, thank you for your reply.

Jaime, I have tried, but I can't install rgdal needed to use raster and
apparently other people too (
https://stackoverflow.com/questions/57617895/how-to-install-rgdal-and-or-upload-raster-on-google-collaboration).
Do you have a solution?
Hugo, I need the mask in vector format because the rasters have different
resolutions, so I can't use raster as a mask. I have modified the reprex to
be more precise about it (see below).
Steve, I think this approach has the same issue of Hugo Costa. I don't have
the polygon of the mask, so I am trying to create one to apply in the other
rasters of different resolutions.

# reproducible example
library(raster)
# read data to create mask
r <- raster(system.file("external/test.grd", package="raster"))
r[!is.na(r)] <- 1
pol <- rasterToPolygons(r, dissolve = T) #  a lot of RAM to process the data
# raster of different resolution
res2 <- res(r) + 10
r2 <- raster(extent(r), resolution = res2)
r2[ ] <- 1
# apply the mask
r2.mask <- mask(r2, pol)
# plot
par(mfrow = c(1, 3))
plot(r)
plot(r2)
plot(r2.mask)

Cheers!

Em ter., 11 de ago. de 2020 às 19:26, Stephen Stewart <
stephen.stewart85 using gmail.com> escreveu:

> Hi Frederico,
>
> It may not solve all of your RAM issues, but in this situation I would
> skip the rasterToPolygons (which is also usually very slow) and use raster
> math to propagate NAs.
>
> r <- raster(system.file("external/test.grd", package="raster"))
> r[!is.na(r)] <- 1
> # Can also be faster to do r = r / r, but add an offset (that cannot
> result in 0) if you have valid 0s.
>  r2 <- raster(extent(r), res(r))
> r2[ ] <- 1
> r2.mask <- r * r2
>
> If you have a polygon to use as a mask, burn it in using the fasterize
> package and then apply the above.
>
> Hope that helps.
>
> Cheers,
>
> Steve
>
> On Wed., 12 Aug. 2020, 6:43 am Frederico Faleiro, <fvfaleiro using gmail.com>
> wrote:
>
>> Dear all,
>>
>> I would like to generate a mask from a raster, but my workflow needs a lot
>> of RAM to process big rasters. I need this polygon mask to use in
>> another's
>> rasters.
>> Do you know another approach that needs less RAM?
>>
>> # reproducible example
>> library(raster)
>> # read data to create mask
>> r <- raster(system.file("external/test.grd", package="raster"))
>> r[!is.na(r)] <- 1
>> pol <- rasterToPolygons(r, dissolve = T) #  a lot of RAM to process the
>> data
>> # apply the mask in another raster
>>  r2 <- raster(extent(r), res(r))
>> r2[ ] <- 1
>> r2.mask <- mask(r2, pol)
>>
>> Cheers!
>>
>> --
>> Frederico Faleiro
>> Postdoctoral Researcher in the INCT-EECBio (https://www.eecbio.ufg.br/)
>> Department of Ecology | Institute of Biological Science | Federal
>> University of Goiás | Brazil
>> RG: https://www.researchgate.net/profile/Frederico_Faleiro
>> CV: http://lattes.cnpq.br/4926404840659003
>>
>>         [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo using r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>

	[[alternative HTML version deleted]]



More information about the R-sig-Geo mailing list