21 :
QgsTask( tr(
"Counting features in %1" ).arg( layer->name() ),
QgsTask::CanCancel )
23 , mRenderer( layer->renderer()->clone() )
24 , mExpressionContext( context )
25 , mWithFids( storeSymbolFids )
26 , mFeatureCount( layer->featureCount() )
36 mSymbolFeatureCountMap.clear();
37 mSymbolFeatureIdMap.clear();
39 QgsLegendSymbolList::const_iterator symbolIt = symbolList.constBegin();
41 for ( ; symbolIt != symbolList.constEnd(); ++symbolIt )
43 mSymbolFeatureCountMap.insert( symbolIt->label(), 0 );
45 mSymbolFeatureIdMap.insert( symbolIt->label(),
QgsFeatureIds() );
49 if ( mFeatureCount > 0 )
51 int featuresCounted = 0;
59 if ( !mRenderer->filterNeedsGeometry() )
67 mRenderer->startRender( renderContext, mSource->fields() );
75 const QSet<QString> featureKeyList = mRenderer->legendKeysForFeature( f, renderContext );
76 for (
const QString &key : featureKeyList )
78 mSymbolFeatureCountMap[key] += 1;
80 mSymbolFeatureIdMap[key].insert( f.
id() );
84 double p = (
static_cast< double >( featuresCounted ) / mFeatureCount ) * 100;
93 mRenderer->stopRender( renderContext );
97 mRenderer->stopRender( renderContext );
106 return mSymbolFeatureCountMap;
111 return mSymbolFeatureCountMap.value( legendKey, -1 );
116 return mSymbolFeatureIdMap;
121 return mSymbolFeatureIdMap.value( symbolkey,
QgsFeatureIds() );