[R-sig-Geo] Problems freeing rgdal driver...

Jonathan Greenberg greenberg at ucdavis.edu
Wed Feb 11 01:39:06 CET 2009


Genius, eliminating the

GDAL.close(d.drv)

does, indeed, work!

--j

Robert Hijmans wrote:
> Hi Jonathan,
>
> I ran into the same problem when writing the writeRaster function in
> the raster package (and see the incipient RemoteSensing package on
> R-forge that uses it); which is very similar.
>
> This is the problem:
>
>   
>> driver = new("GDALDriver", "GTiff")
>> GDAL.close(driver)
>>
>> driver = new("GDALDriver", "GTiff")
>>     
> Error in .local(.Object, ...) : No driver registered with name: GTiff
>   
>> GDAL.close(driver)
>>
>>     
>
> But it does not always happen right away; for some reason.
>
>
> If you omit
>
>   GDAL.close(d.drv)
>
> It will work.
>
> Robert
>
>
> On Wed, Feb 11, 2009 at 7:32 AM, Jonathan Greenberg
> <greenberg at ucdavis.edu> wrote:
>   
>> A few months back I was getting some help with adapting R for doing tiled
>> processing of remote sensing data, and I made some serious headway, but
>> there is a lingering problem I keep scratching my head at.  First off, a
>> quick recap of the base algorithm:
>>
>> 1) Let i = input raster, f() some function to apply to i, and o the output
>> raster, such that o = f(i)
>> 2) i is read in "tiles", each tile read from the input we'll call i_tile (to
>> make it simplest, assume I'm just reading i one line at a time) -- this
>> process is performed using readGDAL(...offset=c(j, 0),...) where j is the
>> current line I'm reading.  o_tile = f(i_tile), which is written using
>> *writeBin* (not writeGDAL).
>> 3) This produces a flat binary file of the sort that Arc binary rasters or
>> ENVI rasters use.
>>
>> So I produce the binary file, but the portion I'm getting a bit hung up on
>> is the production of the little text header which completes the file
>> (.hdr/.prj for an ESRI raster, .hdr for an ENVI raster, note that the .hdr
>> is different between arc and envi).  For this example, let's try to make an
>> ENVI header.  Remember i_tile is one of the readGDAL objects of a tiled
>> subset of image of filename i:
>>
>> ***
>>
>>  gp <- gridparameters(i_tile)
>>  cellsize <- gp$cellsize
>>  offset <- gp$cellcentre.offset
>>  dims <- gp$cells.dim
>>  dims[[2]]=rows
>>  nbands <- 1
>>  tempopen <- GDAL.open(i)
>>  file_projection <- getProjectionRef(tempopen)
>>  GDAL.close(tempopen)
>> # This was from Roger Bivand
>>  d.drv <- new("GDALDriver", "ENVI")
>>  tds.out <- new("GDALTransientDataset", driver = d.drv, rows = dims[2],cols
>> = dims[1], bands = nbands, type = "Float32")
>>  gt <- c(offset[1] - 0.5 * cellsize[1], cellsize[1], 0.0,offset[2] +
>> (dims[2] -0.5) * cellsize[2], 0.0, -cellsize[2])
>>  .Call("RGDAL_SetGeoTransform", tds.out, gt, PACKAGE = "rgdal")
>>  .Call("RGDAL_SetProject", tds.out, file_projection, PACKAGE = "rgdal")
>>  fn <- tempfile()
>>  saveDataset(tds.out, fn)
>>  GDAL.close(tds.out)
>>  GDAL.close(d.drv)
>>
>>  temporary_dir=dirname(fn)
>>  outdir=dirname(outfile)
>>
>>  fnhdr<-as.character(paste(basename(fn),outfile_hdr,sep=''))
>>  outhdr<-as.character(paste(basename(rasteroutput),outfile_hdr,sep=''))
>>
>>  setwd(temporary_dir)
>>
>>  file.rename(fnhdr,outhdr)
>>  file.copy(outhdr,outdir,overwrite=TRUE)
>>
>> ***
>>
>> So this WORKS the first time I run it, but the SECOND time it is run
>> (without quitting out of R) I get the following error:
>>     
>>>   d.drv <- new("GDALDriver", "ENVI")
>>>       
>> Error in .local(.Object, ...) : No driver registered with name: ENVI
>>
>> It seems like there is some lingering open driver or something someplace,
>> but for the life of me I can't tell where it is.  You can see that I did a
>> GDAL.close(d.drv) but that doesn't seem to be sufficient.  Thoughts?
>>
>> By the way, the full algorithm would deal with RS data of an arbitrary
>> number of samples, lines and bands (e.g. hyperspectral processing would be
>> completely feasible).  I'm happy to send the script to the list once the
>> bugs are worked out!  Thanks!
>>
>> --j
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo at stat.math.ethz.ch
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>>



More information about the R-sig-Geo mailing list