SV: [GRASS-user] Raster addition

Moritz Lennert mlennert at club.worldonline.be
Thu Apr 14 09:04:23 EDT 2011


On 14/04/11 14:31, Martin Album Ytre-Eide wrote:
> I would like the NULL values that overlap with none NULL values to be
> treated as 0, and still have NULL values where both maps have NULL
> values. The combined map would be a large map with NULL values and
> added values.
>
> Maybe the best way is to use r.null and set NULL values to 0. Add the
> maps and then convert the 0 values to NULL values?

I think this is probably the easiest.

> Or could one set
> the value in the if statement to be a the sum of maps somehow? I
> guess my biggest problem is summing with NULL values - maybe there is
> a way to treat NULL values as 0? I'll have a look at the man page

If you chose to do it all directly in r.mapcalc, then I guess the only 
option is nested if statements

new_map = if(!isnull(old_1) && !isnull(old_2), old_1+old_2, 
if(!isnull(old_1) && isnull(old_2), old_1, etc)

Moritz

>
> Thanks,
>
> Martin
>
> -----Opprinnelig melding----- Fra: Moritz Lennert
> [mailto:mlennert at club.worldonline.be] Sendt: 14. april 2011 14:15
> Til: Martin Album Ytre-Eide Kopi: grass-user at lists.osgeo.org Emne:
> Re: [GRASS-user] Raster addition
>
> On 14/04/11 13:54, Martin Album Ytre-Eide wrote:
>> Hello.
>>
>> I am trying to add some raster maps. I thought I could do this in
>> r.mapcalc, but "new_map= old_1 + old_2" seems to produce a map
>> where the maps overlap and ignoring areas where only on of the maps
>> have values.
>
> This is due to the way r.mapcalc handles NULL values. See the man
> page, section NULL support for an explanation.
>
>> I would like to do something similar to "v.overlay operator=or".
>>
>> Anyone who knows how to do this?
>
> It depends on what you want the new map to contain as values. If you
> want to add the value of old_1 to old_2 in places where they overlap,
> one way would be to transform your null values to 0 using r.null
> null= and then applying your formula.
>
> If you just want a (any) value where one of the maps is non-null,
> then you can use if. Something like this (untested):
>
> new_map = if(!isnull(old_1) || !isnull(old_2), 1, null())
>
> which should give you 1 where any of the two contains a value and a
> NULL value elsewhere.
>
> Moritz




More information about the grass-user mailing list