QGIS API Documentation  3.10.0-A Coruña (6c816b4204)
qgsmemoryprovider.h
Go to the documentation of this file.
1 /***************************************************************************
2  memoryprovider.h - provider with storage in memory
3  ------------------
4  begin : June 2008
5  copyright : (C) 2008 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 
16 #define SIP_NO_FILE
17 
18 #include "qgsvectordataprovider.h"
20 #include "qgsfields.h"
21 
23 typedef QMap<QgsFeatureId, QgsFeature> QgsFeatureMap;
24 
25 class QgsSpatialIndex;
26 
27 class QgsMemoryFeatureIterator;
28 
29 class QgsMemoryProvider : public QgsVectorDataProvider
30 {
31  Q_OBJECT
32 
33  public:
34  explicit QgsMemoryProvider( const QString &uri, const QgsVectorDataProvider::ProviderOptions &coordinateTransformContext );
35 
36  ~QgsMemoryProvider() override;
37 
39  static QString providerKey();
41  static QString providerDescription();
42 
47  static QgsMemoryProvider *createProvider( const QString &uri, const QgsVectorDataProvider::ProviderOptions &coordinateTransformContext );
48 
49  /* Implementation of functions from QgsVectorDataProvider */
50 
51  QgsAbstractFeatureSource *featureSource() const override;
52 
53  QString dataSourceUri( bool expandAuthConfig = true ) const override;
54  QString storageType() const override;
55  QgsFeatureIterator getFeatures( const QgsFeatureRequest &request ) const override;
56  QgsWkbTypes::Type wkbType() const override;
57  long featureCount() const override;
58  QgsFields fields() const override;
59  bool addFeatures( QgsFeatureList &flist, QgsFeatureSink::Flags flags = nullptr ) override;
60  bool deleteFeatures( const QgsFeatureIds &id ) override;
61  bool addAttributes( const QList<QgsField> &attributes ) override;
62  bool renameAttributes( const QgsFieldNameMap &renamedAttributes ) override;
63  bool deleteAttributes( const QgsAttributeIds &attributes ) override;
64  bool changeAttributeValues( const QgsChangedAttributesMap &attr_map ) override;
65  bool changeGeometryValues( const QgsGeometryMap &geometry_map ) override;
66  QString subsetString() const override;
67  bool setSubsetString( const QString &theSQL, bool updateFeatureCount = true ) override;
68  bool supportsSubsetString() const override { return true; }
69  bool createSpatialIndex() override;
70  QgsVectorDataProvider::Capabilities capabilities() const override;
71  bool truncate() override;
72 
73  /* Implementation of functions from QgsDataProvider */
74 
75  QString name() const override;
76  QString description() const override;
77  QgsRectangle extent() const override;
78  void updateExtents() override;
79  bool isValid() const override;
80  QgsCoordinateReferenceSystem crs() const override;
81  void handlePostCloneOperations( QgsVectorDataProvider *source ) override;
82 
83  private:
84  // Coordinate reference system
86 
87  // fields
88  QgsFields mFields;
89  QgsWkbTypes::Type mWkbType;
90  mutable QgsRectangle mExtent;
91 
92  // features
93  QgsFeatureMap mFeatures;
94  QgsFeatureId mNextFeatureId;
95 
96  // indexing
97  QgsSpatialIndex *mSpatialIndex = nullptr;
98 
99  QString mSubsetString;
100 
101  friend class QgsMemoryFeatureSource;
102 };
103 
Wrapper for iterator of features from vector data provider or vector layer.
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
Definition: qgsfeature.h:566
virtual bool setSubsetString(const QString &subset, bool updateFeatureCount=true)
Set the subset string used to create a subset of features in the layer.
A rectangle specified with double values.
Definition: qgsrectangle.h:41
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:34
virtual QString subsetString() const
Returns the subset definition string (typically sql) currently in use by the layer and used by the pr...
virtual QgsVectorDataProvider::Capabilities capabilities() const
Returns flags containing the supported capabilities.
QgsWkbTypes::Type wkbType() const override=0
Returns the geometry type which is returned by this layer.
virtual void updateExtents()
Update the extents of the layer.
virtual bool addAttributes(const QList< QgsField > &attributes)
Adds new attributes to the provider.
bool addFeatures(QgsFeatureList &flist, QgsFeatureSink::Flags flags=nullptr) override
Adds a list of features to the sink.
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:571
virtual bool deleteFeatures(const QgsFeatureIds &id)
Deletes one or more features from the provider.
virtual bool renameAttributes(const QgsFieldNameMap &renamedAttributes)
Renames existing attributes.
qint64 QgsFeatureId
Definition: qgsfeatureid.h:25
Container of fields for a vector layer.
Definition: qgsfields.h:42
virtual QString name() const =0
Returns a provider name.
virtual QgsAbstractFeatureSource * featureSource() const =0
Returns feature source object that can be used for querying provider&#39;s data.
QSet< int > QgsAttributeIds
virtual bool createSpatialIndex()
Creates a spatial index on the datasource (if supported by the provider type).
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:68
virtual bool isValid() const =0
Returns true if this is a valid layer.
virtual QgsCoordinateReferenceSystem crs() const =0
Returns the coordinate system for the data source.
QgsFields fields() const override=0
Returns the fields associated with this data provider.
virtual bool changeAttributeValues(const QgsChangedAttributesMap &attr_map)
Changes attribute values of existing features.
virtual QString dataSourceUri(bool expandAuthConfig=false) const
Gets the data source specification.
This class wraps a request for features to a vector layer (or directly its vector data provider)...
virtual bool supportsSubsetString() const
Returns true if the provider supports setting of subset strings.
virtual bool changeGeometryValues(const QgsGeometryMap &geometry_map)
Changes geometries of existing features.
Base class that can be used for any class that is capable of returning features.
QMap< int, QString > QgsFieldNameMap
Definition: qgsattributes.h:44
QMap< QgsFeatureId, QgsFeature > QgsFeatureMap
Setting options for creating vector data providers.
A spatial index for QgsFeature objects.
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
Definition: qgsfeature.h:557
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const override=0
Query the provider for features specified in request.
long featureCount() const override=0
Number of features in the layer.
virtual bool truncate()
Removes all features from the layer.
This class represents a coordinate reference system (CRS).
virtual QString description() const =0
Returns description.
virtual bool deleteAttributes(const QgsAttributeIds &attributes)
Deletes existing attributes from the provider.
virtual void handlePostCloneOperations(QgsVectorDataProvider *source)
Handles any post-clone operations required after this vector data provider was cloned from the source...
virtual QgsRectangle extent() const =0
Returns the extent of the layer.
virtual QString storageType() const
Returns the permanent storage type for this layer as a friendly name.
This is the base class for vector data providers.