QGIS API Documentation  2.11.0-Master
qgsvectorlayerfeatureiterator.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsvectorlayerfeatureiterator.h
3  ---------------------
4  begin : Dezember 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 QGSVECTORLAYERFEATUREITERATOR_H
16 #define QGSVECTORLAYERFEATUREITERATOR_H
17 
18 #include "qgsfeatureiterator.h"
19 
20 #include <QSet>
21 
23 
25 class QgsVectorLayer;
28 struct QgsVectorJoinInfo;
29 
31 
34 {
35  public:
38 
39  virtual QgsFeatureIterator getFeatures( const QgsFeatureRequest& request ) override;
40 
42 
43  protected:
44 
46 
48 
50 
52 
54 
56 
57  // A deep-copy is only performed, if the original maps change
58  // see here https://github.com/qgis/Quantum-GIS/pull/673
59  // for explanation
66 };
67 
68 
69 class CORE_EXPORT QgsVectorLayerFeatureIterator : public QgsAbstractFeatureIteratorFromSource<QgsVectorLayerFeatureSource>
70 {
71  public:
72  QgsVectorLayerFeatureIterator( QgsVectorLayerFeatureSource* source, bool ownSource, const QgsFeatureRequest& request );
73 
75 
77  virtual bool rewind() override;
78 
80  virtual bool close() override;
81 
82  protected:
84  virtual bool fetchFeature( QgsFeature& feature ) override;
85 
88  inline virtual bool nextFeatureFilterExpression( QgsFeature &f ) override { return fetchFeature( f ); }
89 
91  virtual bool prepareSimplification( const QgsSimplifyMethod& simplifyMethod ) override;
92 
93 
98 
99 
100  // only related to editing
104 
105  bool mFetchedFid; // when iterating by FID: indicator whether it has been fetched yet or not
106 
107  void rewindEditBuffer();
108  void prepareJoins();
109  void prepareExpressions();
110  bool fetchNextAddedFeature( QgsFeature& f );
111  bool fetchNextChangedGeomFeature( QgsFeature& f );
112  bool fetchNextChangedAttributeFeature( QgsFeature& f );
113  void useAddedFeature( const QgsFeature& src, QgsFeature& f );
114  void useChangedAttributeFeature( QgsFeatureId fid, const QgsGeometry& geom, QgsFeature& f );
115  bool nextFeatureFid( QgsFeature& f );
116  void addJoinedAttributes( QgsFeature &f );
125  void addVirtualAttributes( QgsFeature &f );
126 
128  void updateChangedAttributes( QgsFeature& f );
129 
131  void updateFeatureGeometry( QgsFeature& f );
132 
137  {
143  int joinField;
144 
145  void addJoinedAttributesCached( QgsFeature& f, const QVariant& joinValue ) const;
146  void addJoinedAttributesDirect( QgsFeature& f, const QVariant& joinValue ) const;
147  };
148 
152 
154 
156 
157  private:
159  QgsAbstractGeometrySimplifier* mEditGeometrySimplifier;
160 
162  virtual bool providerCanSimplify( QgsSimplifyMethod::MethodType methodType ) const override;
163 };
164 
165 #endif // QGSVECTORLAYERFEATUREITERATOR_H
QgsAbstractFeatureSource * mProviderFeatureSource
Wrapper for iterator of features from vector data provider or vector layer.
virtual bool close()=0
end of iterating: free the resources / lock
QgsVectorLayerJoinBuffer * mJoinBuffer
QgsFeatureMap::ConstIterator mFetchAddedFeaturesIt
QgsGeometryMap::ConstIterator mFetchChangedGeomIt
virtual bool fetchFeature(QgsFeature &f)=0
If you write a feature iterator for your provider, this is the method you need to implement!! ...
QMap< QgsFeatureId, QgsFeature > QgsFeatureMap
virtual bool rewind()=0
reset the iterator to the starting position
Container of fields for a vector layer.
Definition: qgsfield.h:173
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:75
QMap< int, QgsExpression * > mExpressionFieldInfo
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:119
QgsVectorLayer * joinLayer
resolved pointer to the joined layer
QMap< const QgsVectorJoinInfo *, FetchJoinInfo > mFetchJoinInfo
information about joins used in the current select() statement.
Manages joined fields for a vector layer.
int joinField
index of field (of the joined layer) must have equal value
const QgsVectorJoinInfo * joinInfo
cannonical source of information about the join
This class wraps a request for features to a vector layer (or directly its vector data provider)...
QgsExpressionFieldBuffer * mExpressionFieldBuffer
base class that can be used for any class that is capable of returning features
Partial snapshot of vector layer's state (only the members necessary for access to features) ...
QgsVectorLayerFeatureSource(QgsVectorLayer *layer)
int indexOffset
at what position the joined fields start
int targetField
index of field (of this layer) that drives the join
Buffers information about expression fields for a vector layer.
virtual QgsFeatureIterator getFeatures(const QgsFeatureRequest &request) override
Join information prepared for fast attribute id mapping in QgsVectorLayerJoinBuffer::updateFeatureAtt...
qint64 QgsFeatureId
Definition: qgsfeature.h:31
This class contains information about how to simplify geometries fetched from a QgsFeatureIterator.
virtual bool nextFeatureFilterExpression(QgsFeature &f) override
Overrides default method as we only need to filter features in the edit buffer while for others filte...
QgsChangedAttributesMap mChangedAttributeValues
Represents a vector layer which manages a vector based data sets.
virtual bool prepareSimplification(const QgsSimplifyMethod &simplifyMethod)
Setup the simplification of geometries to fetch using the specified simplify method.
Abstract base class for simplify geometries using a specific algorithm.
helper template that cares of two things: 1.