QGIS API Documentation  2.12.0-Lyon
qgsfeaturerequest.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsfeaturerequest.h
3  ---------------------
4  begin : Mai 2012
5  copyright : (C) 2012 by Martin Dobias
6  email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 #ifndef QGSFEATUREREQUEST_H
16 #define QGSFEATUREREQUEST_H
17 
18 #include <QFlags>
19 
20 #include "qgsfeature.h"
21 #include "qgsrectangle.h"
22 #include "qgsexpression.h"
23 #include "qgsexpressioncontext.h"
24 #include "qgssimplifymethod.h"
25 
26 #include <QList>
28 
63 class CORE_EXPORT QgsFeatureRequest
64 {
65  public:
66  enum Flag
67  {
68  NoFlags = 0,
69  NoGeometry = 1,
70  SubsetOfAttributes = 2,
71  ExactIntersect = 4
72  };
73  Q_DECLARE_FLAGS( Flags, Flag )
74 
75 
79  {
84  FilterFids
85  };
86 
90  static const QString AllAttributes;
91 
95  explicit QgsFeatureRequest( QgsFeatureId fid );
97  explicit QgsFeatureRequest( const QgsRectangle& rect );
99  explicit QgsFeatureRequest( const QgsExpression& expr, const QgsExpressionContext& context = QgsExpressionContext() );
103  QgsFeatureRequest& operator=( const QgsFeatureRequest& rh );
104 
106 
112  FilterType filterType() const { if ( mFilter == FilterNone && !mFilterRect.isNull() ) return FilterRect; else return mFilter; }
113 
117  QgsFeatureRequest& setFilterRect( const QgsRectangle& rect );
118 
122  const QgsRectangle& filterRect() const { return mFilterRect; }
123 
125  QgsFeatureRequest& setFilterFid( QgsFeatureId fid );
127  const QgsFeatureId& filterFid() const { return mFilterFid; }
128 
130  QgsFeatureRequest& setFilterFids( const QgsFeatureIds& fids );
132  const QgsFeatureIds& filterFids() const { return mFilterFids; }
133 
139  QgsFeatureRequest& setFilterExpression( const QString& expression );
140 
145  QgsExpression* filterExpression() const { return mFilterExpression; }
146 
152  QgsExpressionContext* expressionContext() { return &mExpressionContext; }
153 
159  QgsFeatureRequest& setExpressionContext( const QgsExpressionContext& context );
160 
169  QgsFeatureRequest& disableFilter() { mFilter = FilterNone; return *this; }
170 
172  QgsFeatureRequest& setFlags( const QgsFeatureRequest::Flags& flags );
173  const Flags& flags() const { return mFlags; }
174 
177  QgsFeatureRequest& setSubsetOfAttributes( const QgsAttributeList& attrs );
182  const QgsAttributeList& subsetOfAttributes() const { return mAttrs; }
183 
185  QgsFeatureRequest& setSubsetOfAttributes( const QStringList& attrNames, const QgsFields& fields );
186 
189  QgsFeatureRequest& setSimplifyMethod( const QgsSimplifyMethod& simplifyMethod );
192  const QgsSimplifyMethod& simplifyMethod() const { return mSimplifyMethod; }
193 
203  bool acceptFeature( const QgsFeature& feature );
204 
205  // TODO: in future
206  // void setFilterNativeExpression(con QString& expr); // using provider's SQL (if supported)
207  // void setLimit(int limit);
208 
209  protected:
216  Flags mFlags;
219 };
220 
221 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsFeatureRequest::Flags )
222 
223 
224 class QgsFeatureIterator;
226 
230 class CORE_EXPORT QgsAbstractFeatureSource
231 {
232  public:
233  virtual ~QgsAbstractFeatureSource();
234 
240  virtual QgsFeatureIterator getFeatures( const QgsFeatureRequest& request ) = 0;
241 
242  protected:
243  void iteratorOpened( QgsAbstractFeatureIterator* it );
244  void iteratorClosed( QgsAbstractFeatureIterator* it );
245 
247 
248  template<typename> friend class QgsAbstractFeatureIteratorFromSource;
249 };
250 
251 #endif // QGSFEATUREREQUEST_H
Class for parsing and evaluation of expressions (formerly called "search strings").
Definition: qgsexpression.h:92
QgsFeatureIds mFilterFids
Wrapper for iterator of features from vector data provider or vector layer.
const QgsSimplifyMethod & simplifyMethod() const
Get simplification method for geometries that will be fetched.
A rectangle specified with double values.
Definition: qgsrectangle.h:35
Filter using feature ID.
const Flags & flags() const
QgsSimplifyMethod mSimplifyMethod
QgsExpression * mFilterExpression
const QgsRectangle & filterRect() const
Get the rectangle from which features will be taken.
QgsExpressionContext * expressionContext()
Returns the expression context used to evaluate filter expressions.
const QgsFeatureIds & filterFids() const
Get feature IDs that should be fetched.
Container of fields for a vector layer.
Definition: qgsfield.h:177
const QgsAttributeList & subsetOfAttributes() const
Return the subset of attributes which at least need to be fetched.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:176
QgsExpressionContext mExpressionContext
QSet< QgsAbstractFeatureIterator * > mActiveIterators
QgsFeatureRequest & disableFilter()
Disables filter conditions.
Internal feature iterator to be implemented within data providers.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
This class wraps a request for features to a vector layer (or directly its vector data provider)...
QList< int > QgsAttributeList
static const QString AllAttributes
A special attribute that if set matches all attributes.
Obsolete, will be ignored. If a filterRect is set it will be used anyway. Filter using a rectangle...
QgsRectangle mFilterRect
FilterType filterType() const
Return the filter type which is currently set on this request.
Base class that can be used for any class that is capable of returning features.
QgsFeatureId mFilterFid
const QgsFeatureId & filterFid() const
Get the feature ID that should be fetched.
No filter is applied.
FilterType
Types of filters.
QgsAttributeList mAttrs
qint64 QgsFeatureId
Definition: qgsfeature.h:31
This class contains information about how to simplify geometries fetched from a QgsFeatureIterator.
Helper template that cares of two things: 1.
QgsExpression * filterExpression() const
Returns the filter expression if set.