r.mask cannot use float maps
|Reported by:||pertusus||Owned by:|
In the r.mask documentation it is said
The mask is read as an integer map. If MASK is actually a floating-point map, the values will be converted to integers using the map's quantisation rules (this defaults to round-to-nearest, but can be changed with r.quant).
But if trying to do a mask with a float raster map, there is an error message:
echo "0|0|1" | r.in.xyz input=- output=seed r.mask input=seed ERROR: Raster map seed must be integer for maskcats parameter
Usint r.quant do not change anything (poking in the dark here, I don't really understand why r.quant do not need an output map).
r.quant -t seed r.mask input=seed ERROR: Raster map seed must be integer for maskcats parameter
A tarball is attached to reproduce the issue.
I had a look at r.mask and r.mask for 6.4.1, besides being a python script, the difference seems to be that in the svn version there is a test that the map is indeed a CELL map, which fails and give the error message, while there was no such test in the shell script. The code is along
if grass.raster_info(input)['datatype'] != "CELL": grass.fatal(_("Raster map %s must be integer for maskcats parameter") % input)
I have tried without that check and things seems to work. I also attach a trivial patch that comment that code out. Maybe r.reclass does the magic float to integer quantification stuff? If it is the case, a comment in the code, like
# r.reclass takes care of float to integer translation
could be handy.
Maybe the problem is in the doc and really only integer raster map with type CELL may be used, but then the doc has to be changed and it would be nice to have a direction, the reference to r.quant not being very useful, in my opinion.