[GRASS-dev] Re: [GRASS GIS] #73: r.out.gdal tiff output does
not work
Markus Metz
markus.metz.giswork at googlemail.com
Thu Apr 16 04:06:05 EDT 2009
Glynn Clements wrote:
> Dylan Beaudette wrote:
>
>
>> 3. Allow the user to specify what they would like NULL cells encoded as.
>> Unless I am overlooking something, it would seem reasonable to export a CELL
>> map to a signed integer format, and use some obvious negative value for NULL:
>>
>
> If you're exporting to a 32-bit (signed or unsigned) integer format,
> the obvious choice for null is 0x80000000. That's what GRASS uses
> internally, so it can never occur as a legitimate value (if a
> computation ends up producing that value, it will get treated as a
> null in all regards).
>
0x80000000 as nodata value seems to work with GeoTIFF for Int32 but not
for UInt32, here gdalinfo tells me NoData Value=2147483648 which is well
within the range of UInt32. It may be a problem that nodataval in
r.out.gdal is of type double, so 0x80000000 is cast to double and then
either back to int or left as double. In the case of UInt32, the raster
to be exported is currently read as DCELL, written as GDT_Float64 and
then converted to GDT_UInt32. There is a lot of type casting going on in
r.out.gdal, making tests a bit complicated. In the end, the value
assigned to NULL cells must match the nodata value in the metadata, and
a safe default choice seems to be type min or type max.
NaN seems to work for Float32 and Float64, at least gdal reports NoData
Value=nan and QGIS display is ok for GTiff, HFA, PAux, EHdr. NaN is
constructed with 0.0/0.0, idea from r.univar.
IMHO, using 0x80000000 or similar can be dangerous (not sure about NaN)
because I don't know how these values are supported by all the different
file formats and all the different applications. Testing welcome!
I would suggest to use some fool-proof default nodata value for GDAL
integer types, i.e. type min or type max, check if it works, otherwise
abort and ask the user to specify a nodata value. For GDAL floating
point types, it could be recommended to use the default nodata value
(NaN) instead of specifying a nodata value.
Markus M
More information about the grass-dev
mailing list