[R-sig-Geo] Raster math on a stack of large rasters
Melanie Bacou
mel at mbacou.com
Fri Apr 7 22:05:11 CEST 2017
Also take a look at using raster:: clusterR() in combination with calc()
to use multiple cores. This works well if your your calculation function
does not require neighboring cells.
--Mel.
On 04/07/2017 09:50 AM, Benjamin Leutner wrote:
> You could stick to the native raster format (grd), in which case
> calc() writes to your final file directly.
> Of course that doesn't change the file size issue, but saves you the
> translation step to geotiff.
>
> For the file size you could consider restricting the datatype to
> integer (see ?dataType).
> If I have reflectance data [0,1] for example; I scale them by a factor
> 10000 and then save as "INT4U" or "INT2U" (depending on your maximally
> expected value range), or "INT4S" or "INT2S" if you have negative
> values. That can bring down the filesize quite a bit, while retaining
> most of the relevant precission (beware: remaining decimal places will
> be cut-off,)
>
> e.g. calc(..., function(x) { yourcalculations(x) * 10000 }, datatype =
> "INT4S")
>
> pro tip: the argument in calc() (or more precisely in writeRaster())
> is called datatype, not to be confused with the stand-alone function
> dataType() with a capital T. That one has bitten me many times,
> because due to the "..." argument there will be no warning if you
> mistype it ;-)
>
>
>
> On 06.04.2017 19:27, Gregovich, Dave P (DFG) wrote:
>> Hi,
>> I am performing a math operation on a stack of large rasters. The
>> code below uses smaller files for illustration and reproducibility.
>> Any alternative way of performing this task that does not create huge
>> temporary files, and perhaps cuts down on processing time, would be
>> greatly appreciated. The 'calc' process creates a couple of
>> temporary raster files that are huge. The first one is 142 GB, and I
>> don't have hard drive space for that one and the second one that
>> begins writing during the process.
>> Thanks kindly for any advice!
>> Dave.
>>
>> #create raster stack and coefficients...
>> library(raster)
>> mod.coefs <- rnorm(10)
>> s <- stack()
>> r <- raster(nrow = 100, ncol = 100)
>> #actual rasters I am working with are about 40000, pixels square,
>> with each GeoTiff raster in the stack taking about 2.5 GB on disk
>>
>> for(i in 1:10){
>> r[] <- rnorm(10000)
>> s <- addLayer(s, r)
>> }
>>
>> #attempt to perform raster math...
>> out.file <- 'C:/ out.rast.tif'
>> out.rast <- calc(s, function(x){exp(sum(mod.coefs * x))}, filename =
>> out.file)
>>
>> #at this point, the temporary files in the
>> \AppData\Local\Temp\RtmpqQYzfS\raster folder eventually become quite
>> large,
>> #with one .GRI file reaching 142 GB, and another now growing to 8 GB
>> before I ended the process
>> #the file 'out.file' has not been created at that point.
>> #_____________end____________________________________________________________________
>>
>>
>> [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo at r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>
More information about the R-sig-Geo
mailing list