writeRaster output file size

十年热恋 提交于 2019-12-22 09:55:51

问题


I have a function that reads a multi-band image in as a raster brick object, iterates through the bands doing various calculations, and then writes the raster out as a new .tif. All of this works fine, but the file size of the new image file is roughly four times greater (I assume because the original image has 4 bands). I'm wondering if there's a parameter in the writeRaster() function that I'm unaware of, or if there's some other way I can ensure that the output image is basically the same file size as the input.

Original file size is 134 MB; output ranges from 471 to 530 MB or so, depending on format.

Simplified code:

library(rgdal)
library(raster)

path = "/Volumes/ENVI Standard Files/"
img = "qb_tile.img"

imageCorrection = function(path, img){
  raster = brick(paste0(path, img))   
  raster = reclassify(raster, cbind(0, NA))  

  for(i in 1:nlayers(raster)){   
    raster[[i]] = raster[[i]] - minValue(raster[[i]]) 
  }
  writeRaster(raster, paste0(path,img,"_process.tif"), format = "GTiff", overwrite=TRUE)
}

回答1:


You can set the default datatype for writing rasters with the rasterOptions() as follows:

rasterOptions(datatype="INT2U")

Or directly in the writeRaster call:

writeRaster(yourRas, "path/to/raster/", dataType="INT2U", options="COMPRESS=LZW")

Also notice the options argument where you can specify compression.

Usually when I export integer rasters from R, I make sure that I really have integers and not floats, since this can result in an empty raster. Try the following before exporting:

ras <- as.integer(ras)

Please note: Also check for negative values in your raster. Try INT2S if you have values below zero.



来源:https://stackoverflow.com/questions/42041695/writeraster-output-file-size

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!