From 6772ffb97d9985b8e17aacb13dab6ce0812312b0 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Thu, 5 Nov 2015 21:22:43 +1100 Subject: [PATCH] Much faster zoom to selection on large PostGIS layers --- src/core/qgsvectorlayer.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/core/qgsvectorlayer.cpp b/src/core/qgsvectorlayer.cpp index c9e1a896de3..0efb11918d5 100644 --- a/src/core/qgsvectorlayer.cpp +++ b/src/core/qgsvectorlayer.cpp @@ -619,17 +619,16 @@ QgsRectangle QgsVectorLayer::boundingBoxOfSelected() QgsFeature fet; if ( mDataProvider->capabilities() & QgsVectorDataProvider::SelectAtId ) { - Q_FOREACH ( QgsFeatureId fid, mSelectedFeatureIds ) + QgsFeatureIterator fit = getFeatures( QgsFeatureRequest() + .setFilterFids( mSelectedFeatureIds ) + .setSubsetOfAttributes( QgsAttributeList() ) ); + + while ( fit.nextFeature( fet ) ) { - if ( getFeatures( QgsFeatureRequest() - .setFilterFid( fid ) - .setSubsetOfAttributes( QgsAttributeList() ) ) - .nextFeature( fet ) && - fet.constGeometry() ) - { - r = fet.constGeometry()->boundingBox(); - retval.combineExtentWith( &r ); - } + if ( !fet.constGeometry() || fet.constGeometry()->isEmpty() ) + continue; + r = fet.constGeometry()->boundingBox(); + retval.combineExtentWith( &r ); } } else