25#include <QMutexLocker>
31 : mFeatureCache( CACHE_SIZE )
33 , mGeometryType( layer->geometryType() )
35 , mLayerName( layer->name() )
51 QgsFeature *cachedFeature = mFeatureCache.object(
id );
55 feature = *cachedFeature;
61 if ( !mFeatureSource->getFeatures(
QgsFeatureRequest(
id ) ).nextFeature( feature ) )
66 mFeatureCache.insert(
id,
new QgsFeature( feature ) );
76 Q_ASSERT( QThread::currentThread() == qApp->thread() );
78 mFeatureCache.clear();
83 mFeatureSource = std::make_unique<QgsVectorLayerFeatureSource>( mLayer );
110 Q_ASSERT( QThread::currentThread() == qApp->thread() );
112 return mLayer.data();
125 mFeatureCache.insert( feature.
id(),
new QgsFeature( feature ) );
133 mFeatureCache.remove( feature.
id() );
151 mFeatureCache.remove( origFeature.
id() );
162 return mFeatureCache.contains( fid );
173 return mFeatureSource->crs();
178 return mGeometryType;
184 return mFeatureSource->id();
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
This class represents a coordinate reference system (CRS).
Wrapper for iterator of features from vector data provider or vector layer.
bool nextFeature(QgsFeature &f)
Fetch next feature and stores in f, returns true on success.
void refreshCache(const QgsFeature &feature)
Changes a feature in the cache and the spatial index.
Qgis::GeometryType geometryType() const
The geometry type of this layer.
QgsFeaturePool(QgsVectorLayer *layer)
Creates a new feature pool for layer.
QgsFeatureIds allFeatureIds() const
Returns the complete set of feature ids in this pool.
QString layerId() const
The layer id of the layer.
void insertFeature(const QgsFeature &feature, bool skipLock=false)
Inserts a feature into the cache and the spatial index.
QPointer< QgsVectorLayer > layerPtr() const
Gets a QPointer to the underlying layer.
bool isFeatureCached(QgsFeatureId fid)
Checks if the feature fid is cached.
QgsCoordinateReferenceSystem crs() const
The coordinate reference system of this layer.
QgsFeatureIds getFeatures(const QgsFeatureRequest &request, QgsFeedback *feedback=nullptr)
Gets features for the provided request.
QgsFeatureIds getIntersects(const QgsRectangle &rect) const
Gets all feature ids in the bounding box rect.
QString layerName() const
Returns the name of the layer.
void setFeatureIds(const QgsFeatureIds &ids)
Sets all the feature ids governed by this feature pool.
void removeFeature(const QgsFeatureId featureId)
Removes a feature from the cache and the spatial index.
QgsVectorLayer * layer() const
Gets a pointer to the underlying layer.
bool getFeature(QgsFeatureId id, QgsFeature &feature)
Retrieves the feature with the specified id into feature.
This class 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...
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...
void unlock()
Unlocks the lock.
void changeMode(Mode mode)
Change the mode of the lock to mode.
A rectangle specified with double values.
A spatial index for QgsFeature objects.
QList< QgsFeatureId > intersects(const QgsRectangle &rectangle) const
Returns a list of features with a bounding box which intersects the specified rectangle.
bool addFeature(QgsFeature &feature, QgsFeatureSink::Flags flags=QgsFeatureSink::Flags()) override
Adds a feature to the index.
bool deleteFeature(const QgsFeature &feature)
Removes a feature from the index.
Partial snapshot of vector layer's state (only the members necessary for access to features)
Represents a vector layer which manages a vector based data sets.
QSet< QgsFeatureId > QgsFeatureIds
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features