25 , mVectorLayerCache( vlCache )
27 mTransform =
mRequest.calculateTransform( mVectorLayerCache->sourceCrs() );
30 mFilterRect = filterRectToSourceCrs( mTransform );
40 switch (
mRequest.spatialFilterType() )
42 case Qgis::SpatialFilterType::NoFilter:
43 case Qgis::SpatialFilterType::BoundingBox:
46 case Qgis::SpatialFilterType::DistanceWithin:
47 if ( !mRequest.referenceGeometry().isEmpty() )
49 mDistanceWithinGeom = mRequest.referenceGeometry();
50 mDistanceWithinEngine.reset( QgsGeometry::createGeometryEngine( mDistanceWithinGeom.constGet() ) );
51 mDistanceWithinEngine->prepareGeometry();
52 mDistanceWithin = mRequest.distanceWithin();
57 if ( !mFilterRect.isNull() )
60 mRequest.setFilterRect( mFilterRect );
63 switch ( featureRequest.filterType() )
65 case Qgis::FeatureRequestFilterType::Fids:
67 const QgsFeatureIds filterFids = featureRequest.filterFids();
68 mFeatureIds = QList< QgsFeatureId >( filterFids.begin(), filterFids.end() );
73 mFeatureIds = QList< QgsFeatureId >() << featureRequest.filterFid();
78 mFeatureIds = QList( mVectorLayerCache->mCacheOrderedKeys.begin(), mVectorLayerCache->mCacheOrderedKeys.end() );
82 mFeatureIdIterator = mFeatureIds.constBegin();
84 if ( mFeatureIdIterator == mFeatureIds.constEnd() )
94 if (
mClosed || !mVectorLayerCache )
97 while ( mFeatureIdIterator != mFeatureIds.constEnd() )
99 if ( !mVectorLayerCache->mCache.contains( *mFeatureIdIterator ) )
101 ++mFeatureIdIterator;
105 f =
QgsFeature( *mVectorLayerCache->mCache[*mFeatureIdIterator]->feature() );
106 ++mFeatureIdIterator;
113 if ( mDistanceWithinEngine && mDistanceWithinEngine->distance( f.
geometry().
constGet() ) > mDistanceWithin )
129 mFeatureIdIterator = mFeatureIds.constBegin();
142 , mVectorLayerCache( vlCache )
144 mTransform =
mRequest.calculateTransform( mVectorLayerCache->sourceCrs() );
147 mFilterRect = filterRectToSourceCrs( mTransform );
155 if ( !mFilterRect.isNull() )
158 mRequest.setFilterRect( mFilterRect );
166 if (
mClosed || !mVectorLayerCache )
171 if ( mFeatIt.nextFeature( f ) )
175 mFids.insert( f.
id() );
183 mVectorLayerCache->requestCompleted(
mRequest, mFids );
197 return mFeatIt.close();
@ Fid
Filter using feature ID.
@ Expression
Filter using expression.
@ NoFilter
No filter is applied.
@ SubsetOfAttributes
Fetch only a subset of attributes (setSubsetOfAttributes sets this flag).
void geometryToDestinationCrs(QgsFeature &feature, const QgsCoordinateTransform &transform) const
Transforms feature's geometry according to the specified coordinate transform.
QgsFeatureRequest mRequest
A copy of the feature request.
QgsAbstractFeatureIterator(const QgsFeatureRequest &request)
base class constructor - stores the iteration parameters
bool mClosed
Sets to true, as soon as the iterator is closed.
bool fetchFeature(QgsFeature &f) override
Implementation for fetching a feature.
QgsCachedFeatureIterator(QgsVectorLayerCache *vlCache, const QgsFeatureRequest &featureRequest)
This constructor creates a feature iterator, that delivers all cached features.
bool close() override
Close this iterator.
bool rewind() override
Rewind to the beginning of the iterator.
~QgsCachedFeatureIterator() override
bool fetchFeature(QgsFeature &f) override
Implementation for fetching a feature.
bool close() override
Close this iterator.
QgsCachedFeatureWriterIterator(QgsVectorLayerCache *vlCache, const QgsFeatureRequest &featureRequest)
This constructor creates a feature iterator, which queries the backend and caches retrieved features.
bool rewind() override
Rewind to the beginning of the iterator.
Custom exception class for Coordinate Reference System related exceptions.
bool rewind()
Resets the iterator to the starting position.
Wraps a request for features to a vector layer (or directly its vector data provider).
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
void setValid(bool validity)
Sets the validity of the feature.
const QgsAbstractGeometry * constGet() const
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
Caches features for a given QgsVectorLayer.
QgsVectorLayer * layer()
Returns the layer to which this cache belongs.
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const final
Queries the layer for features specified in request.