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

Hugo Costa hugo@gco@t@ @end|ng |rom gm@||@com
Wed Aug 12 17:09:10 CEST 2020


Hi Frederico,
my first reaction is to project the raster object to be used as a mask to
the same resolution of the raster to be masked. Certainly it's faster then
and converting raster to vector. If the raster is big, gdalUtils::gdalwarp
can help in projecting your raster data.
Hope this helps
Hugo

Frederico Faleiro <fvfaleiro using gmail.com> escreveu no dia quarta, 12/08/2020
à(s) 14:55:

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