* Moritz Lennert <mlenn...@club.worldonline.be> [2015-05-06 12:59:16 +0200]:

> 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.

Thank you Moritz.  Already in use.   And quite happy about it.  eval, anyhow,
isn't an answer to my question.

A simple example of what would satisfy the current need, would be the
application of a helper function, like the following, on the fly.  That is
while reading or computing pixel values.

def check_cwv(cwv):
    """
    Check whether a column water vapor value lies within a "valid" range.
    """
    if cwv < 0.0 or cwv > 6.3:
        raise ValueError('The column water vapor estimation is out of the '
                         'expected ranfe [0.0, 6.3]')
    else:
        return True

Thanks, Nikos
_______________________________________________
grass-dev mailing list
grass-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-dev

Reply via email to