[GRASS-dev] pyGRASS and mapcalc's pixel modifiers
Moritz Lennert
mlennert at club.worldonline.be
Wed May 6 03:59:16 PDT 2015
On 06/05/15 12:25, Nikos Alexandris wrote:
> Hello programmers.
>
> Consider a Python class with methods that derive a somewhat complex mapcalc
> expression which contains the following pixel modifiers:
>
> ['A[-1, -1]', 'A[-1, 0]', 'A[-1, 1]', 'A[0, -1]', 'A[0, 0]', 'A[0, 1]',
> 'A[1, -1]', 'A[1, 0]', 'A[1, 1]']
>
>
> These modifiers built-up a moving window to compute some values (eg. mean, median and other in-between values) and finally end up in a polynomial like:
>
> -9.674 + 0.653 * SomeValue + 9.087 * SomeValue^2
>
>
> As far as my understanding goes, I can't check for the validity of the
> in-between computed values with mapcalc's powers. For example, check if the
> average value as derived from the above defined pixel modifiers, lies within a
> specific range. I have build helper functions, as part of the Python class,
> which could do this. Then again, I don't have the powers of mapcalc to process
> the data.
>
> I wonder how I should approach this, excluding rewriting my program in C (which
> I don't speak easily). If I go step-by-step, that is:
>
> 1) compute a map based with the mean of neighboring pixels (see pix-modifiers above)
> 2) use pyGRASS' RasterRow, for example, to be able to apply some helper function and check or do something
> 3) compute another, required, in-between map
> 4) use pyGRASS again
> 5) etc.
>
> up until to reach the final equation of interest. This sounds really messy. How would you approach this (excluding an
> implementation in C)?
Have a look at the eval function of r.mapcalc (check the specific
section of the man page). It allows you to create intermediate results
which you can then use in further processing.
Moritz
More information about the grass-dev
mailing list