mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-01 00:46:20 -05:00
[composer] Use feature requests to filter atlas features, rather
than fetching all features and then filtering while iterating.
This commit is contained in:
parent
69ac6771e8
commit
8088e35415
@ -221,7 +221,7 @@ int QgsAtlasComposition::updateFeatures()
|
||||
updateFilenameExpression();
|
||||
|
||||
// select all features with all attributes
|
||||
QgsFeatureIterator fit = mCoverageLayer->getFeatures();
|
||||
QgsFeatureRequest req;
|
||||
|
||||
QScopedPointer<QgsExpression> filterExpression;
|
||||
if ( mFilterFeatures && !mFeatureFilter.isEmpty() )
|
||||
@ -232,9 +232,14 @@ int QgsAtlasComposition::updateFeatures()
|
||||
mFilterParserError = filterExpression->parserErrorString();
|
||||
return 0;
|
||||
}
|
||||
|
||||
//filter good to go
|
||||
req.setFilterExpression( mFeatureFilter );
|
||||
}
|
||||
mFilterParserError = QString();
|
||||
|
||||
QgsFeatureIterator fit = mCoverageLayer->getFeatures( req );
|
||||
|
||||
QScopedPointer<QgsExpression> nameExpression;
|
||||
if ( !mPageNameExpression.isEmpty() )
|
||||
{
|
||||
@ -266,21 +271,6 @@ int QgsAtlasComposition::updateFeatures()
|
||||
pageName = result.toString();
|
||||
}
|
||||
|
||||
if ( !filterExpression.isNull() )
|
||||
{
|
||||
QVariant result = filterExpression->evaluate( &feat, mCoverageLayer->pendingFields() );
|
||||
if ( filterExpression->hasEvalError() )
|
||||
{
|
||||
QgsMessageLog::logMessage( tr( "Atlas filter eval error: %1" ).arg( filterExpression->evalErrorString() ), tr( "Composer" ) );
|
||||
}
|
||||
|
||||
// skip this feature if the filter evaluation if false
|
||||
if ( !result.toBool() )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
mFeatureIds.push_back( qMakePair( feat.id(), pageName ) );
|
||||
|
||||
if ( mSortFeatures && sortIdx != -1 )
|
||||
|
Loading…
x
Reference in New Issue
Block a user