[GRASS-user] mapcalc and cell coordinates

Moritz Lennert mlennert at club.worldonline.be
Mon Jul 14 11:25:29 EDT 2008


On 14/07/08 15:14, Glynn Clements wrote:
> Moritz Lennert wrote:
> 
>> Well, this works:
>>
>> r.mapcalc brol3=if(y()<=9521600 && x()<=427000,1,null())
>>
>> but this doesn't:
>>
>> r.mapcalc brol3=if(y()==9521600 && x()==427000,1,null())
>>
>> which raises the issue of precision of the coordinates...
> 
> What are the region settings? Bear in mind that x() and y() return the
> coordinates of the cell's centre, not a corner.

Just for completeness: It is a cell map, but resolution was aligned on 
bounds, so something like 1.9876 and 2.0045

When I set resolution to 2 and align bounds to resolution and then use

r.mapcalc brol3=if(y()==9521601 && x()==427001,1,null())

it works

whereas

r.mapcalc brol3=if(y()==9521600 && x()==427000,1,null())

doesn't. So clearly an issue of falling right on the center of the pixel.

> Also note that the calculation involves multiplying by the resolution. 

You mean internally by mapcalc, or that I should include resolution into 
the calculation ?

> If the resolution cannot be exactly represented as both a binary
> fraction and a decimal fraction, you will get rounding error.

That and/or hitting the cell center was probably the problem.

Thanks for your explanations.

Moritz


More information about the grass-user mailing list