26 #include <QMutexLocker> 30 : mFeatureCache( CACHE_SIZE )
32 , mGeometryType( layer->geometryType() )
34 , mLayerName( layer->name() )
50 QgsFeature *cachedFeature = mFeatureCache.object(
id );
54 feature = *cachedFeature;
60 if ( !mFeatureSource->getFeatures(
QgsFeatureRequest(
id ) ).nextFeature( feature ) )
65 mFeatureCache.insert(
id,
new QgsFeature( feature ) );
75 Q_ASSERT( QThread::currentThread() == qApp->thread() );
77 mFeatureCache.clear();
82 mFeatureSource = qgis::make_unique<QgsVectorLayerFeatureSource>( mLayer );
86 while ( it.nextFeature( feature ) )
109 Q_ASSERT( QThread::currentThread() == qApp->thread() );
111 return mLayer.data();
124 mFeatureCache.insert( feature.
id(),
new QgsFeature( feature ) );
132 mFeatureCache.remove( feature.
id() );
150 mFeatureCache.remove( origFeature.
id() );
161 return mFeatureCache.contains( fid );
172 return mFeatureSource->crs();
177 return mGeometryType;
183 return mFeatureSource->id();
bool isFeatureCached(QgsFeatureId fid)
Checks if the feature fid is cached.
Wrapper for iterator of features from vector data provider or vector layer.
A rectangle specified with double values.
QgsFeatureIds getIntersects(const QgsRectangle &rect) const
Gets all feature ids in the bounding box rect.
QSet< QgsFeatureId > QgsFeatureIds
QString layerName() const
Returns the name of the layer.
QgsFeaturePool(QgsVectorLayer *layer)
Creates a new feature pool for layer.
QPointer< QgsVectorLayer > layerPtr() const
Gets a QPointer to the underlying layer.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Base class for feedback objects to be used for cancellation of something running in a worker thread...
The QgsReadWriteLocker class is a convenience class that simplifies locking and unlocking QReadWriteL...
QgsVectorLayer * layer() const
Gets a pointer to the underlying layer.
QgsFeatureIds getFeatures(const QgsFeatureRequest &request, QgsFeedback *feedback=nullptr)
Gets features for the provided request.
bool getFeature(QgsFeatureId id, QgsFeature &feature)
Retrieves the feature with the specified id into feature.
void refreshCache(const QgsFeature &feature)
Changes a feature in the cache and the spatial index.
This class wraps a request for features to a vector layer (or directly its vector data provider)...
void insertFeature(const QgsFeature &feature, bool skipLock=false)
Inserts a feature into the cache and the spatial index.
Partial snapshot of vector layer's state (only the members necessary for access to features) ...
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
void unlock()
Unlocks the lock.
bool deleteFeature(const QgsFeature &feature)
Removes a feature from the index.
A spatial index for QgsFeature objects.
void setFeatureIds(const QgsFeatureIds &ids)
Sets all the feature ids governed by this feature pool.
This class represents a coordinate reference system (CRS).
void changeMode(Mode mode)
Change the mode of the lock to mode.
QgsCoordinateReferenceSystem crs() const
The coordinate reference system of this layer.
bool addFeature(QgsFeature &feature, QgsFeatureSink::Flags flags=nullptr) override
Adds a feature to the index.
QgsWkbTypes::GeometryType geometryType() const
The geometry type of this layer.
Represents a vector layer which manages a vector based data sets.
QgsFeatureIds allFeatureIds() const
Returns the complete set of feature ids in this pool.
QList< QgsFeatureId > intersects(const QgsRectangle &rectangle) const
Returns a list of features with a bounding box which intersects the specified rectangle.
void removeFeature(const QgsFeatureId featureId)
Removes a feature from the cache and the spatial index.
QString layerId() const
The layer id of the layer.