Skip to content

Commit 4a8d84b

Browse files
committed
Optimise QgsFeaturePool construction
- Avoid double iteration over complete layer when all features are being used - Avoid iterating over non-required features when selected features are being used
1 parent 26631b3 commit 4a8d84b

File tree

1 file changed

+7
-9
lines changed

1 file changed

+7
-9
lines changed

src/analysis/vector/geometry_checker/qgsfeaturepool.cpp

+7-9
Original file line numberDiff line numberDiff line change
@@ -32,25 +32,23 @@ QgsFeaturePool::QgsFeaturePool( QgsVectorLayer *layer, double layerToMapUnits, c
3232
, mLayerToMapTransform( layerToMapTransform )
3333
, mSelectedOnly( selectedOnly )
3434
{
35+
// Build spatial index
36+
QgsFeature feature;
37+
QgsFeatureRequest req;
38+
req.setSubsetOfAttributes( QgsAttributeList() );
3539
if ( selectedOnly )
3640
{
3741
mFeatureIds = layer->selectedFeatureIds();
38-
}
39-
else
40-
{
41-
mFeatureIds = layer->allFeatureIds();
42+
req.setFilterFids( mFeatureIds );
4243
}
4344

44-
// Build spatial index
45-
QgsFeature feature;
46-
QgsFeatureRequest req;
47-
req.setSubsetOfAttributes( QgsAttributeList() );
4845
QgsFeatureIterator it = layer->getFeatures( req );
4946
while ( it.nextFeature( feature ) )
5047
{
51-
if ( mFeatureIds.contains( feature.id() ) && feature.geometry() )
48+
if ( feature.geometry() )
5249
{
5350
mIndex.insertFeature( feature );
51+
mFeatureIds.insert( feature.id() );
5452
}
5553
else
5654
{

0 commit comments

Comments
 (0)