QGIS API Documentation  3.14.0-Pi (9f7028fd23)
qgsaggregatecalculator.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsaggregatecalculator.h
3  ------------------------
4  begin : May 2016
5  copyright : (C) 2016 by Nyall Dawson
6  email : nyall dot dawson at gmail dot com
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef QGSAGGREGATECALCULATOR_H
19 #define QGSAGGREGATECALCULATOR_H
20 
21 #include "qgis_core.h"
22 #include "qgsstatisticalsummary.h"
25 #include "qgsfeaturerequest.h"
26 #include <QVariant>
27 #include "qgsfeatureid.h"
28 
29 
30 class QgsFeatureIterator;
31 class QgsExpression;
32 class QgsVectorLayer;
34 
44 class CORE_EXPORT QgsAggregateCalculator
45 {
46  public:
47 
54  {
55  QString function;
56  QString name;
57  QSet<QVariant::Type> supportedTypes;
58  };
59 
64  enum Aggregate
65  {
69  Min,
70  Max,
71  Sum,
72  Mean,
87  StringConcatenateUnique
88  };
89 
92  {
93 
100  QString filter;
101 
107  QString delimiter;
108 
114  };
115 
120  QgsAggregateCalculator( const QgsVectorLayer *layer );
121 
125  const QgsVectorLayer *layer() const;
126 
131  void setParameters( const AggregateParameters &parameters );
132 
138  void setFilter( const QString &filterExpression ) { mFilterExpression = filterExpression; }
139 
146  void setFidsFilter( const QgsFeatureIds &fids );
147 
152  QString filter() const { return mFilterExpression; }
153 
159  void setDelimiter( const QString &delimiter ) { mDelimiter = delimiter; }
160 
165  QString delimiter() const { return mDelimiter; }
166 
176  QVariant calculate( Aggregate aggregate, const QString &fieldOrExpression,
177  QgsExpressionContext *context = nullptr, bool *ok = nullptr ) const;
178 
185  static Aggregate stringToAggregate( const QString &string, bool *ok = nullptr );
186 
192  static QList< QgsAggregateCalculator::AggregateInfo > aggregates();
193 
194  private:
195 
197  const QgsVectorLayer *mLayer = nullptr;
198 
200  QString mFilterExpression;
201 
204 
206  QString mDelimiter;
207 
209  QgsFeatureIds mFidsFilter;
210 
211  //trigger variable
212  bool mFidsSet = false;
213 
214  static QgsStatisticalSummary::Statistic numericStatFromAggregate( Aggregate aggregate, bool *ok = nullptr );
215  static QgsStringStatisticalSummary::Statistic stringStatFromAggregate( Aggregate aggregate, bool *ok = nullptr );
216  static QgsDateTimeStatisticalSummary::Statistic dateTimeStatFromAggregate( Aggregate aggregate, bool *ok = nullptr );
217 
218  static QVariant calculateNumericAggregate( QgsFeatureIterator &fit, int attr, QgsExpression *expression,
220 
221  static QVariant calculateStringAggregate( QgsFeatureIterator &fit, int attr, QgsExpression *expression,
223 
224  static QVariant calculateDateTimeAggregate( QgsFeatureIterator &fit, int attr, QgsExpression *expression,
226  static QVariant calculateGeometryAggregate( QgsFeatureIterator &fit, QgsExpression *expression, QgsExpressionContext *context );
227 
228  static QVariant calculateArrayAggregate( QgsFeatureIterator &fit, int attr, QgsExpression *expression,
229  QgsExpressionContext *context );
230 
231  static QVariant calculate( Aggregate aggregate, QgsFeatureIterator &fit, QVariant::Type resultType,
232  int attr, QgsExpression *expression,
233  const QString &delimiter,
234  QgsExpressionContext *context, bool *ok = nullptr );
235  static QVariant concatenateStrings( QgsFeatureIterator &fit, int attr, QgsExpression *expression,
236  QgsExpressionContext *context, const QString &delimiter, bool unique = false );
237 
238  QVariant defaultValue( Aggregate aggregate ) const;
239 };
240 
241 #endif //QGSAGGREGATECALCULATOR_H
QgsExpressionContext
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Definition: qgsexpressioncontext.h:369
QgsAggregateCalculator::AggregateParameters::delimiter
QString delimiter
Delimiter to use for joining values with the StringConcatenate aggregate.
Definition: qgsaggregatecalculator.h:107
QgsAggregateCalculator::Range
@ Range
Range of values (max - min) (numeric and datetime fields only)
Definition: qgsaggregatecalculator.h:76
QgsAggregateCalculator::AggregateInfo::name
QString name
A translated, human readable name.
Definition: qgsaggregatecalculator.h:56
QgsAggregateCalculator
Utility class for calculating aggregates for a field (or expression) over the features from a vector ...
Definition: qgsaggregatecalculator.h:44
qgsfeaturerequest.h
QgsAggregateCalculator::filter
QString filter() const
Returns the filter which limits the features used during the aggregate calculation.
Definition: qgsaggregatecalculator.h:152
QgsAggregateCalculator::Minority
@ Minority
Minority of values.
Definition: qgsaggregatecalculator.h:77
QgsAggregateCalculator::AggregateParameters
A bundle of parameters controlling aggregate calculation.
Definition: qgsaggregatecalculator.h:91
QgsAggregateCalculator::CountDistinct
@ CountDistinct
Number of distinct values.
Definition: qgsaggregatecalculator.h:67
QgsAggregateCalculator::Min
@ Min
Min of values.
Definition: qgsaggregatecalculator.h:69
QgsAggregateCalculator::CountMissing
@ CountMissing
Number of missing (null) values.
Definition: qgsaggregatecalculator.h:68
QgsAggregateCalculator::ArrayAggregate
@ ArrayAggregate
Create an array of values.
Definition: qgsaggregatecalculator.h:86
QgsAggregateCalculator::Count
@ Count
Count.
Definition: qgsaggregatecalculator.h:66
qgsfeatureid.h
QgsAggregateCalculator::AggregateParameters::orderBy
QgsFeatureRequest::OrderBy orderBy
Optional order by clauses.
Definition: qgsaggregatecalculator.h:113
qgsstatisticalsummary.h
QgsAggregateCalculator::InterQuartileRange
@ InterQuartileRange
Inter quartile range (IQR) (numeric fields only)
Definition: qgsaggregatecalculator.h:81
qgsdatetimestatisticalsummary.h
QgsAggregateCalculator::StDevSample
@ StDevSample
Sample standard deviation of values (numeric fields only)
Definition: qgsaggregatecalculator.h:75
QgsAggregateCalculator::delimiter
QString delimiter() const
Returns the delimiter used for joining values with the StringConcatenate aggregate.
Definition: qgsaggregatecalculator.h:165
QgsAggregateCalculator::setFilter
void setFilter(const QString &filterExpression)
Sets a filter to limit the features used during the aggregate calculation.
Definition: qgsaggregatecalculator.h:138
QgsAggregateCalculator::StDev
@ StDev
Standard deviation of values (numeric fields only)
Definition: qgsaggregatecalculator.h:74
QgsStringStatisticalSummary::Statistic
Statistic
Enumeration of flags that specify statistics to be calculated.
Definition: qgsstringstatisticalsummary.h:49
QgsAggregateCalculator::StringMinimumLength
@ StringMinimumLength
Minimum length of string (string fields only)
Definition: qgsaggregatecalculator.h:82
QgsDateTimeStatisticalSummary::Statistic
Statistic
Enumeration of flags that specify statistics to be calculated.
Definition: qgsdatetimestatisticalsummary.h:50
QgsAggregateCalculator::AggregateInfo::supportedTypes
QSet< QVariant::Type > supportedTypes
This aggregate function can only be used with these datatypes.
Definition: qgsaggregatecalculator.h:57
QgsAggregateCalculator::Median
@ Median
Median of values (numeric fields only)
Definition: qgsaggregatecalculator.h:73
QgsAggregateCalculator::Max
@ Max
Max of values.
Definition: qgsaggregatecalculator.h:70
QgsFeatureIds
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:34
QgsAggregateCalculator::StringConcatenate
@ StringConcatenate
Concatenate values with a joining string (string fields only). Specify the delimiter using setDelimit...
Definition: qgsaggregatecalculator.h:84
QgsAggregateCalculator::Mean
@ Mean
Mean of values (numeric fields only)
Definition: qgsaggregatecalculator.h:72
QgsStatisticalSummary::Statistic
Statistic
Enumeration of flags that specify statistics to be calculated.
Definition: qgsstatisticalsummary.h:48
QgsAggregateCalculator::ThirdQuartile
@ ThirdQuartile
Third quartile (numeric fields only)
Definition: qgsaggregatecalculator.h:80
QgsAggregateCalculator::Aggregate
Aggregate
Available aggregates to calculate.
Definition: qgsaggregatecalculator.h:64
QgsFeatureRequest::OrderBy
Definition: qgsfeaturerequest.h:242
QgsAggregateCalculator::Majority
@ Majority
Majority of values.
Definition: qgsaggregatecalculator.h:78
QgsVectorLayer
Definition: qgsvectorlayer.h:385
qgsstringstatisticalsummary.h
QgsAggregateCalculator::AggregateInfo
Structured information about the available aggregates.
Definition: qgsaggregatecalculator.h:53
QgsAggregateCalculator::FirstQuartile
@ FirstQuartile
First quartile (numeric fields only)
Definition: qgsaggregatecalculator.h:79
QgsAggregateCalculator::Sum
@ Sum
Sum of values.
Definition: qgsaggregatecalculator.h:71
QgsAggregateCalculator::AggregateParameters::filter
QString filter
Optional filter for calculating aggregate over a subset of features, or an empty string to use all fe...
Definition: qgsaggregatecalculator.h:100
QgsAggregateCalculator::GeometryCollect
@ GeometryCollect
Create a multipart geometry from aggregated geometries.
Definition: qgsaggregatecalculator.h:85
QgsAggregateCalculator::setDelimiter
void setDelimiter(const QString &delimiter)
Sets the delimiter to use for joining values with the StringConcatenate aggregate.
Definition: qgsaggregatecalculator.h:159
QgsExpression
Definition: qgsexpression.h:113
QgsFeatureIterator
Definition: qgsfeatureiterator.h:263
QgsAggregateCalculator::StringMaximumLength
@ StringMaximumLength
Maximum length of string (string fields only)
Definition: qgsaggregatecalculator.h:83