[Qgis-developer] Modifications to dissolve() in fTools

Eliott coyac eliott.coyac at gmail.com
Thu Jun 14 15:11:24 PDT 2012


Hello,

Recently for a project I've needed to work with the fTools plugin. One 
of the thing I had to
do was to load a great number of points (over 1M) and bufferize them, 
then dissolve the
layer.

I've made several changes to dissolve, but since I'm new on this list 
and I don't know how
things work here I'm only submitting the first one:

Currently, when dissolving based on a field, fTools first makes the list 
of different values,
then for each value goes through the entire features, and for those 
matching the field value
combines them. If there is a large number of different values (for 
example 1000 different values)
it means that fTools will have to go through the whole layer 1000 times. 
(rewinding the provider
every time, etc.). For large layers it is too slow.

What I do instead is keep a dictionary of features, one feature per 
field value. For each feature
of the layer, I check if the field value is already associated to an 
open feature, and if so,
I combine the features (otherwise I create the feature and add it to the 
dictionnary). That way, I go through the layer only once.

Here is the patch (in the case when the "selection only" box is unchecked):

patch: http://osgeo.codepad.org/VNoUiMUu

I also have a .shp test file (58 MB) that I can upload, to compare the 
difference in speed (at least
a factor 10).

I hope I went through proper channels and didn't make a blunder with the 
code (it works fine here)


More information about the Qgis-developer mailing list