Helena Herrera wrote:

> I have 4 bands (B1;B2,B3;B4) all with values >0 except in a few pixels where
> I have nulls.
> I want to create a layer where I have 1 if at least I have 1 number and
> nulls where I don't have a single value
> I have tried this
> if (B1>=0 || B2>=0 || B3>=0 || B4>=0, 1,null()) but I got null in pixels
> where I have information for at least 2 bands.

"x>=0" will evaluate to null if x is null. "x||y" will evaluate to
null if either x or y is null. In general, most operators and
functions return null if any of their arguments are null. The main
exceptions are if(), eval(), isnull(), ||| and &&&, as described in
the "NULL support" section of the r.mapcalc manual page.

> any tip on how can I do this?

Either:

1. Use isnull() to determine whether a cell is null, e.g.:

        if (isnull(B1) && isnull(B2) && isnull(B3) && isnull(B4), null(), 1)

2. Modify your original expression to use ||| instead of ||, i.e.:

        if (B1>=0 ||| B2>=0 ||| B3>=0 ||| B4>=0, 1, null())

The ||| operator satisfies the boolean axioms:

        x ||| true == true
and:
        true ||| x == true

even when x is null. The || operator propagates nulls like other
operators. Similarly for &&& and &&.

-- 
Glynn Clements <gl...@gclements.plus.com>
_______________________________________________
grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user

Reply via email to