[GRASS-dev] new version of d.vect.chart

Hello,

Thanks to the help of Radim, Daniel, Glynn and Hamish I have finally finished a revised d.vect.chart which offers the following improvements over the original:

- speed: using a map with over 20.000 charts, it takes only half the time with attributes in postgresql and only 10-15% of the time with data in dbf. With ~600 charts it takes about 60% of the time in both cases.

This might be different if your map is linked to a table containing many more lines than there are objects in the map, since this version loops through the entries in the table, instead of looping through the vector objects. You can however use the where clause to limit the amount of lines retrieved.

- ordering of charts: if sizecol is used, charts are now ordered so that largest are at the bottom

- choice in proportionality: a new flag allows to make the chart's area proportional to sizecol and not the chart's diameter (by using the square root of sizecol)

- where clause: you can limit the objects displayed through a where clause

- multiple objects with same cat: the module now prints a warning if it finds multiple objects with the same cat. In most usages of charts I can think of, you don't want to display the same chart twice, only because your area of reference might be divided into several polygons (e.g. total population of Canada displayed for every single island of the country).

The module uses the new (today) Vect_cidx_find_all() function, so it only compiles if you have the latest version of lib/vector/Vlib/cindex.c and include/Vect.h. Also, if you use the dbf data backend, you need the new support for ASC/DESC in ORDER BY clauses also committed today.

At this stage, the module draws more than one chart at the same location if there is more than one line with identical cat, data columns and size column. I wanted to use a SELECT DISTINCT clause, but DISTINCT is not supported by the dbf backend, yet. It would be possible to solve this within the module, but it might be more interesting to implement a DISTINCT clause.

My question now is: should this replace d.vect.chart in CVS head ? It is completely backwards compatible in terms of parameters, with only the -s (use square root) added. Or should this live as d.vect.chart2 for a while for testing (the attached directory compiles the modules as d.vect.chart2) ? Should I commit it to CVS ?

Moritz

(attachments)

d.vect.chart2.tgz (6.35 KB)

This is very nice. Thanks for doing this.

Michael
__________________________________________
Michael Barton, Professor of Anthropology
School of Human Evolution & Social Change
Center for Social Dynamics & Complexity
Arizona State University

phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton

From: Moritz Lennert <mlennert@club.worldonline.be>
Date: Tue, 10 Oct 2006 14:27:42 +0200
To: Grass Developers List <grass-dev@grass.itc.it>
Subject: [GRASS-dev] new version of d.vect.chart

Hello,

Thanks to the help of Radim, Daniel, Glynn and Hamish I have finally
finished a revised d.vect.chart which offers the following improvements
over the original:

- speed: using a map with over 20.000 charts, it takes only half the
time with attributes in postgresql and only 10-15% of the time with data
in dbf. With ~600 charts it takes about 60% of the time in both cases.

This might be different if your map is linked to a table containing many
more lines than there are objects in the map, since this version loops
through the entries in the table, instead of looping through the vector
objects. You can however use the where clause to limit the amount of
lines retrieved.

- ordering of charts: if sizecol is used, charts are now ordered so that
largest are at the bottom

- choice in proportionality: a new flag allows to make the chart's area
proportional to sizecol and not the chart's diameter (by using the
square root of sizecol)

- where clause: you can limit the objects displayed through a where clause

- multiple objects with same cat: the module now prints a warning if it
finds multiple objects with the same cat. In most usages of charts I can
think of, you don't want to display the same chart twice, only because
your area of reference might be divided into several polygons (e.g.
total population of Canada displayed for every single island of the
country).

The module uses the new (today) Vect_cidx_find_all() function, so it
only compiles if you have the latest version of lib/vector/Vlib/cindex.c
and include/Vect.h. Also, if you use the dbf data backend, you need the
new support for ASC/DESC in ORDER BY clauses also committed today.

At this stage, the module draws more than one chart at the same location
if there is more than one line with identical cat, data columns and size
column. I wanted to use a SELECT DISTINCT clause, but DISTINCT is not
supported by the dbf backend, yet. It would be possible to solve this
within the module, but it might be more interesting to implement a
DISTINCT clause.

My question now is: should this replace d.vect.chart in CVS head ? It is
completely backwards compatible in terms of parameters, with only the -s
(use square root) added. Or should this live as d.vect.chart2 for a
while for testing (the attached directory compiles the modules as
d.vect.chart2) ? Should I commit it to CVS ?

Moritz