[GRASS-dev] weird bug(?) with r.mapcalc neighborhood modifier

Moritz Lennert mlennert at club.worldonline.be
Sat Feb 13 06:16:06 PST 2016


Hi,

I'm not sure if this is a bug or just some feature of r.mapcalc that I 
don't really understand, so I'm posting here, not yet on track.

I'm working on a module that calculate Moran's I for raster segments 
(i.e. clumps). For this I need to identify neighboring regions. I do 
that on a pixel-base, identifying in each direction of a given pixel 
those neighbors that have a different value than the current pixel.

Here's an example of what I do, identifying neighbors lying below the 
current pixel:

g.region n=224480.25 s=223910.25 w=635623 e=636449.5 res=28.5
r.mapcalc "nd = if(landclass96[1,0]!=landclass96, landclass96[1,0], null())"
r.stats -1n landclass96,nd sep=comma --q | awk -F, '{if($1==$2) print $0}'
5,5
5,5
1,1
1,1
5,5

This r.stats result should not happen, IIUC: as I explicitly test for 
inequality in the r.mapcalc call, pixels should not have the same values 
in landclass96 and nd.

The weird thing is this:

r.mapcalc "nd_temp = landclass96[1,0]"
r.mapcalc "nd2 = if(nd_temp!=landclass96, nd_temp, null())"
r.stats -1n landclass96,nd2 sep=comma --q | awk -F, '{if($1==$2) print $0}'
[empty result]

i.e. by decomposing the r.mapcalc call into two separate calls, first 
identifying the below neighbor value of each pixel, then only keeping 
values for those pixels where that below neighbor value is different, 
everything works as expected.

I'm I not using neighborhood modifiers as I should, or is this a bug ?

Moritz


More information about the grass-dev mailing list