[GRASS5] experimental thematic maps from expressions

Hi *,

This is a first attempt at extending d.vect.thematic to handle expressions,
which might make several people happy. The interface to d.vect.thematic
doesn't change; just use an expression involving column names in place of a
single column in d.vect.thematic (don't forget to quote). E.g.:

d.vect.thematic my_vector column="(col1+col2)/col3"

The expressions available are simple arithmetic ones, i.e. four operations and
parentheses, involving column names and constants. This is limited by the
arithmetic capabilities of both awk and the sql parser. Anything fancier IMHO
should be provided by an extended UPDATE ... SET or a v.db.calc command.

To properly use correct arithmetic notation, the patch I just sent for the sql
parser should be applied.

The idea is the following:

a) the expression is used in computing breaks, just as in the original
d.vect.thematic; the statistics used for break calculation are obtained from a
computed value using the expression.

b) selection of the vector objects in each interval is accomplished in the
same way as for d.vect.thematic, only this time expressions and not simple
column values are used.

For a) I mostly tweaked v.univar.sh to compute the values of the expression.
This part takes also good care of the dreaded division by zero.
d.vect.thematic was only changed to use proper quoting when handling the
expression, and the numeric check for the column was delegated to v.univar.sh.

However, dbmi doesn't handle division by zero errors other than by bailing
out. So, even if breaks are calculated ignoring zero denominators, selecting
the objects for each class will abort everything in case of a zero-valued
denominator anywhere in the expression.

Any ideas on how to deal with this?

Otherwise, comments are most welcome.

Daniel.

-- Daniel Calvelo Aros

(attachments)

v.univar.sh (6.5 KB)
d.vect.thematic (23.8 KB)