QGIS API Documentation
3.16.0-Hannover (43b64b13f3)
|
Go to the documentation of this file.
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() );
@ NoGeometry
Geometry is not required. It may still be returned if e.g. required for a filter condition.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
QgsExpressionContext & expressionContext()
Gets the expression context.
QHash< QString, QgsFeatureIds > symbolFeatureIdMap() const
Returns the QgsFeatureIds for each symbol.
Contains information about the context of a rendering operation.
QgsFeatureRequest & setSubsetOfAttributes(const QgsAttributeList &attrs)
Set a subset of attributes that will be fetched.
QgsFeatureIds featureIds(const QString &symbolkey) const
Returns the feature Ids for a particular legendKey.
QHash< QString, long > symbolFeatureCountMap() const
Returns the count for each symbol.
int scopeCount() const
Returns the number of scopes contained in the context.
This class wraps a request for features to a vector layer (or directly its vector data provider).
void setProgress(double progress)
Sets the task's current progress.
QSet< QgsFeatureId > QgsFeatureIds
void setRendererScale(double scale)
Sets the renderer map scale.
bool run() override
Calculates the feature count and Ids per symbol.
bool nextFeature(QgsFeature &f)
Represents a vector layer which manages a vector based data sets.
Partial snapshot of vector layer's state (only the members necessary for access to features)
QgsVectorLayerFeatureCounter(QgsVectorLayer *layer, const QgsExpressionContext &context=QgsExpressionContext(), bool storeSymbolFids=false)
Create a new feature counter for layer.
void symbolsCounted()
Emitted when the symbols have been counted.
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
QgsExpressionContext createExpressionContext() const FINAL
This method needs to be reimplemented in all classes which implement this interface and return an exp...
QList< QgsLegendSymbolItem > QgsLegendSymbolList
Wrapper for iterator of features from vector data provider or vector layer.
QgsFeatureRequest & setFlags(QgsFeatureRequest::Flags flags)
Sets flags that affect how features will be fetched.
long featureCount(const QString &legendKey) const
Returns the feature count for a particular legendKey.
double progress() const
Returns the task's progress (between 0.0 and 100.0)
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
bool isCanceled() const
Will return true if task should terminate ASAP.
Abstract base class for long running background tasks.