[GRASS-user] compare a DCELL and FCELL question

Markus Neteler neteler at osgeo.org
Sun Jan 24 03:58:15 PST 2021


Hi Ming,

On Sun, Jan 24, 2021 at 10:49 AM ming han <dustming at gmail.com> wrote:
>
> Hi Micha
>
>      Many thanks for your reply.
>      Here is the command I am using:
>
>      if(float(cat1_acc_riv) == float(cat1_minacc), str_r, null())
>
>       The str_r is a CELL raster. the result is different when I change it to:
>        if(int(cat1_acc_riv) == int(cat1_minacc), str_r, null())

Note that numerical "equality" is better tested with a threshold test
against the map pixel difference.
As the threshold, we use GRASS_EPSILON which is defined as 1.0e-15.

Hence the test needs to be implemented in a different way, i.e. by
using an epsilon.
Essentially something like this:

if(fabs(map_A - map_B) <= 1.0e-15, ... )

In your case (untested):
r.mapcalc diffepsilon = if( abs( map_A - map_B) <= 1.0e-15, str_r , null())

See related discussions here: [1], [2] and elsewhere.

[1] Comment by Glynn: https://trac.osgeo.org/grass/ticket/2854#comment:9
[2] Comment by Glynn:
https://lists.osgeo.org/pipermail/grass-user/2015-October/073200.html

Best,
Markus


More information about the grass-user mailing list