Glynn Clements wrote:
Markus Metz wrote:
so the user will have to understand the conversion issues even if they
never use an out-of-range value. Ultimately, its either usability or
flexibility.
Without the -f flag I would opt for usability, with the -f flag for
flexibility.
Having -f affect the interpretation of nodata= also harms usability.
I know. There was discussion about that, and Dylan asked for the
possibility to
"2. include a 'force' option to make r.out.gdal do exactly what your
command line instructions suggest-- possibly leading to corruption of
NULL data"
Maybe this referred only to the problem of input data having the
requested nodata value, and not to allow a mismatch between metadata
nodata and the value replacing NULL cells?
The GDAL API documentation says "To clear the nodata value, just set it
with an "out of range" value." This is currently possible with the -f
flag, but r.out.gdal then does not give any information on what value is
assigned to NULL cells, only what nodata value is written to the metadata.
Right. There's only one nodata= option, and it's performing a dual
function: what to store for null cells and what to set GDAL's no-data
value to. If you want to allow a mismatch, you really need two
options.
I thought in this case (allow mismatch) it would be enough to write it
as double to metadata without prior cast to the selected GDAL datatype.
Yeah, but what are you going to write for nulls in the input data?
Suppose the user specifies a CELL input map (which contains at least
0-255 and null), byte (GDT_UInt8) output, -f, and nodata=9999. So you
use 9999.0 as GDAL's no-data value, but how will you treat null values
in the input data?
In this case, the current code of all C versions of r.out.gdal writes
(CELL) 9999 for NULLs. This is then cast by the gdal library to GDT_Byte
(255).
Maybe I misunderstood the requested behaviour for the -f flag, so let's
not allow a nodata mismatch, convert the nodata value first to the
selected GDAL datatype if necessary and then we get the same value for
nodata metadata and raster data where NULLs were replaced.
In this case, there should be a warning because (GDT_Byte) 9999.0 = 255
is present in the input data and the user is asked to select a different
nodata value. Export would proceed because of -f.
Anyway, now I will stop defending a feature that I was never convinced
of (allowing this nodata mismatch). Can we now put together a next
version of r.out.gdal based on this discussion that always interprets
any user-given nodata value (with warning where appropriate) to make
sure metadata info and raster data are the same?
_______________________________________________
grass-dev mailing list
grass-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-dev