[R-sig-Geo] WriteRaster as Float
Dutrieux, Loic
loic.dutrieux at wur.nl
Tue Nov 11 14:02:53 CET 2014
Hello Zebrat,
The datatype= argument appears to work well on my system. See if you can reproduce the example below:
library(raster)
r <- raster(system.file("external/test.grd", package="raster"))
writeRaster(r, filename = 'rasterDefault.tif')
GDALinfo('rasterDefault.tif')
# By default raster writes to Float64
writeRaster(r, filename = 'rasterFloatSingle.tif', datatype = 'FLT4S')
GDALinfo('rasterFloatSingle.tif')
# Float 32
Make sure you do not capitalize the "t" in datatype. datatype is the writeRaster() argument and dataType is the function to retrieve data type.
Cheers,
Loïc
-----Original Message-----
From: r-sig-geo-bounces at r-project.org [mailto:r-sig-geo-bounces at r-project.org] On Behalf Of diamant zebrat
Sent: Tuesday, November 11, 2014 10:13
To: Tom Philippi
Cc: r-sig-geo
Subject: Re: [R-sig-Geo] WriteRaster as Float
Tom, here goes the details
The Meteosat images are composed by a matrix of pixels with values of surface temperature (or cloud top temperature) in Kelvin, which means values like 273.15 I wanted to keep the decimals, thus I need a FLT4S 4-byte values. When using
writeRaster(TTemp,filename=nom,format="GTiff",overwrite=T,datatype="FLT4S")
I get a file with a size of 7.495.158 bytes. My particular image is a matrix of 1201 lines x 803 columns = 964.403 pixels, with this option (datatype="FLT4S") it looks like we get an image that uses
8 bytes to store each pixel. In fact, we only need 4 bytes (float) to store values like 273.15, thus I am getting images which are too big. Keep in mind there is a Meteosat image each 15 min -> 96 a day, etc. These means a lot of storage space and I should care about it When opening one of these GEOTIFF (LTS4S) with a GIS package, it get an image that is "double precision", confirming that the writeRaster is using
8 bytes to store each pixel when creating the GEOTIFF with the datatype="FLT4S" option The conclusion is that the writeRaster routine is not optimized to use the minimum space when writing a geotiff The only alternative by now is to multiply my kelvins by ten and save it as an integer, this way I only keep one decimal but I get small size files
writeRaster(TTemp,filename=nom,format="GTiff",overwrite=T,datatype="INT1U")
However, I still want to keep the real values using 4 byte for each pixel...
thank you
Zebrat
2014-11-11 4:32 GMT+00:00 Tom Philippi <tephilippi at gmail.com>:
> Zebrat--
> Without example code it is difficult to guess what you tried, and what
> you desire. By "float" do you mean FLT4S 4-byte values? If so, try
> datatype='FLT4S' in your call to writeRaster(), which should be the
> same as 'Float32' in gdal. If you mean something else, I guessed
> wrong, so you might specify a bit more about what you have, want, and have tried.
>
> Tom 2
>
> On Mon, Nov 10, 2014 at 4:38 AM, diamant zebrat
> <diamant.zebrat at gmail.com>
> wrote:
>
>> Hello,
>> I am working with R processing Meteosat imagery, which mean a lot of
>> images every day, and thus a lot of available storage space It looks
>> like the write raster function of the raster package only allows to
>> write a Geotiff as integer or as double. I only need float precision,
>> so I don't need a double as the resulting file gets too big. Is there
>> any way to store a geotiff with float precision?
>> Thank you
>> Zebrat
>>
>> [[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
>>
>
>
[[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