Hi Even, On Mon, Apr 20, 2015 at 11:20 AM, Even Rouault <[email protected]> wrote:
> Sean, > > > > > Not being able to unset nodata values for datasets is tripping up GDAL > > users at work. I'm considering measures that require 1-bit internal masks > > (we're primarily using GeoTIFF) instead of nodata values because, unlike > > nodata, the masks can be "cleared" by setting them uniformly to True > using > > the GDAL API (GDALFillRaster() specifically). > > If there are external masks .msk, you'd better just deleting the file. That > will save a bit some processing time for algorithms that deal with masks. > > > > > Background: the GeoTIFF driver's SetNoDataValue() method doesn't let us > > remove or set a null or empty nodata value or unset the bNoDataSet flag. > > A ClearNoDataValue() could be an interesting addition to the GDAL API > indeed. > I'm pretty sure there are tickets about that. > > > Passing a value outside the range of values in the dataset can be > > problematic, especially for 8-bit data. Passing -inf, nan, or 256 to > > SetNoDataValue() has the same effect on derived masks as passing 0. > > Looking at gcore/gdalnodatamaskband.cpp, it indeeds casts dfNoDataValue to > GByte without checking. Should probably do better checking, although > setting > out-of-range nodata value is a bit in the unspecified behaviour area. > > > > > I'm looking for expert advice on consequences of using masks instead of > > nodata values. Are there features of GDAL that rely on nodata values and > > don't respond to masks? > > I wouldn't be surprised that some algorithms there or there only work with > the > nodata concept and not with the more general concept of masks (GDALContour > for > example from a quick searching) > > > Are there adverse implications for > > interoperability? > > In TIFF, I don't think one of nodata or nodata masks can be considered as > more > interoperable as the other. the GDAL_NODATA TIFF tag is a GDAL specific > TIFF > tag. If you use external masks (.msk), they are a GDAL specific thing. And > if > you use TIFF internal masks, they are quite an esoteric formulation of > TIFF. > > > Would it be better to simply accept nodata values as > > being part of the structure of datasets, like tiling and interleaving, > and > > immutable once set? > > Some drivers accept modifying geotransform or projection, so it is not > really > clear what users might want to change after a dataset has been created. > But in > your use case, it seems that the users do have use case for clearing an > existing nodata value, so I'm not sure to follow your reasonning about what > should be immutable. > > The easiest way to clear nodata currently is to use : > gdal_translate -a_nodata none in.tif out.tif > Yes. Thanks for the advice, Even. I'm not ready to take on driver enhancements, so I'll work on adapting workflows to the constraints of nodata.
_______________________________________________ gdal-dev mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/gdal-dev
