[R-sig-Geo] Tiled processing...

Jonathan Greenberg greenberg at ucdavis.edu
Thu Oct 30 02:44:51 CET 2008


I've recently got back into using R to perform spatial analyses, and I'm 
trying to figure out how to perform "true" tiled processing, e.g. 
controlled reading of subsets of an input file, performing a function on 
this subset, and writing the output, subset by subset, to an output file 
and, finally, setting up the appropriate "header" info (the metadata).

Using suggestions Tim Keitt and Roger Bivand gave me some years back, I 
wrote this simple code (all it should do is take an elevation geotiff 
and add 1000 to the elevations, writing the output):

***

library(rgdal)
ds1 <- GDAL.open("elev.tif")
driver <- new('GDALDriver', 'GTiff')
ds2 <- new('GDALTransientDataset', driver, nrow(ds1), ncol(ds1), type = 
"Float32")
  for (row in nrow(ds1)) {
    row
    x <- getRasterData(ds1, offset = c(row - 1, 0), region = c(1, 
ncol(ds1)))
    elevnew <- x+1000
    putRasterData(ds2, elevnew, offset = c(row - 1, 0))

  }
saveDataset(ds2, "out.tif")
closeDataset(ds2)
closeDataset(ds1)

***

Couple of issues/questions:
1) The code doesn't actually seem to work -- I get a tiny, unreadable 
TIFF out of the back of this algorithm -- what is wrong?
2) I'm actually unclear about exactly what this is doing -- am I really 
just creating a large in-memory matrix (ds2) and then writing the entire 
output image out to disk, or is this somehow writing line-by-line?  If 
the former is true, how do I modify this to write within the loop, 
rather than all-at-once?

Thanks!

--j


-- 

Jonathan A. Greenberg, PhD
Postdoctoral Scholar
Center for Spatial Technologies and Remote Sensing (CSTARS)
University of California, Davis
One Shields Avenue
The Barn, Room 250N
Davis, CA 95616
Cell: 415-794-5043
AIM: jgrn307, MSN: jgrn307 at hotmail.com, Gchat: jgrn307




More information about the R-sig-Geo mailing list