On Tue, 26 Feb 2019 at 03:31, kimaidou <[email protected]> wrote:
>
> Hi all,
>
> I needed to gather basic stats for a layer containing multiple fields. I 
> created the following gist to compute the number of features per each unique 
> value for a list of given fields
> https://gist.github.com/mdouchin/a234efb7e67ebd8dae3a04cb26cf5e72

Checkout trap #3 from
http://nyalldawson.net/2016/10/speeding-up-your-pyqgis-scripts/.
Specifically, since you aren’t doing anything with the geometry, and
are only using a single attribute from the layer, by calling setFlags(
QgsFeatureRequest.NoGeometry ) and setSubsetOfAttributes() you can
tell QGIS that you don’t need the geometry, and only require a single
attribute’s value in the feature request. This will give a huge speed
boost to the feature fetching.

> I know I could use PostgreSQL to do it (see 
> https://twitter.com/kimaidou/status/1100053546978983936 conversation), wich 
> is much faster, but I needed a quick way to do it with Python.
> I tested virtual layers too, but my source layer has many fields (with some 
> heavy data) and the copy/pasting into spatialite was not efficient here.
>
> The method uniqueValues(fieldIndex) of QgsVectorLayer is pretty fast compared 
> to my iteration through the layer features. Any hint how to improve the speed 
> of my calculation ?

Potentially this could be a new method in QgsVectorDataProvider which
sends a native query to be executed on the backend (like uniqueValues
does -- that's why it's so fast). But that would require an addition
to the c++ QgsVectorDataProvider class, and implementations in the
popular vector data providers.

Nyall

>
> Regards,
> Michaël
> _______________________________________________
> QGIS-Developer mailing list
> [email protected]
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
_______________________________________________
QGIS-Developer mailing list
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to