QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsvectorlayerutils.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsvectorlayerutils.h
3 ---------------------
4 Date : October 2016
5 Copyright : (C) 2016 by Nyall Dawson
6 Email : nyall dot dawson 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#ifndef QGSVECTORLAYERUTILS_H
17#define QGSVECTORLAYERUTILS_H
18
19#include "qgis_core.h"
20#include "qgsgeometry.h"
22#include "qgsfeaturesink.h"
23
25class QgsSymbolLayer;
27
28
29#ifndef SIP_RUN
30
32{
33 bool hasEffects = false;
34
35 // masked symbol layers
36 QSet<QString> symbolLayerIds;
37};
38
40typedef QHash<QString, QgsMaskedLayer> QgsMaskedLayers;
41
42#endif
43
51class CORE_EXPORT QgsVectorLayerUtils
52{
53 public:
54
62 {
63 public:
64
67
71 QList<QgsVectorLayer *> layers() const;
72
76 QgsFeatureIds duplicatedFeatures( QgsVectorLayer *layer ) const;
77
78
79 private:
80 QMap<QgsVectorLayer *, QgsFeatureIds> mDuplicatedFeatures;
81 friend class QgsVectorLayerUtils;
82
86 void setDuplicatedFeatures( QgsVectorLayer *layer, const QgsFeatureIds &ids );
87 };
88
96 class CORE_EXPORT QgsFeatureData
97 {
98 public:
99
103 QgsFeatureData( const QgsGeometry &geometry = QgsGeometry(), const QgsAttributeMap &attributes = QgsAttributeMap() );
104
106 QgsGeometry geometry() const;
107
109 QgsAttributeMap attributes() const;
110
111 private:
112 QgsGeometry mGeometry;
113 QgsAttributeMap mAttributes;
114 };
115
116 // SIP does not like "using", use legacy typedef
118 typedef QList<QgsVectorLayerUtils::QgsFeatureData> QgsFeaturesDataList;
119
128 static QgsFeatureIterator getValuesIterator( const QgsVectorLayer *layer, const QString &fieldOrExpression, bool &ok, bool selectedOnly );
129
140 static QList< QVariant > getValues( const QgsVectorLayer *layer, const QString &fieldOrExpression, bool &ok, bool selectedOnly = false, QgsFeedback *feedback = nullptr );
141
154 static QList< double > getDoubleValues( const QgsVectorLayer *layer, const QString &fieldOrExpression, bool &ok, bool selectedOnly = false, int *nullCount = nullptr, QgsFeedback *feedback = nullptr );
155
162 static bool valueExists( const QgsVectorLayer *layer, int fieldIndex, const QVariant &value, const QgsFeatureIds &ignoreIds = QgsFeatureIds() );
163
169 static QVariant createUniqueValue( const QgsVectorLayer *layer, int fieldIndex, const QVariant &seed = QVariant() );
170
177 static QVariant createUniqueValueFromCache( const QgsVectorLayer *layer, int fieldIndex, const QSet<QVariant> &existingValues, const QVariant &seed = QVariant() );
178
185 static bool attributeHasConstraints( const QgsVectorLayer *layer, int attributeIndex );
186
192 static bool validateAttribute( const QgsVectorLayer *layer, const QgsFeature &feature, int attributeIndex, QStringList &errors SIP_OUT,
195
204 static QgsFeature createFeature( const QgsVectorLayer *layer,
205 const QgsGeometry &geometry = QgsGeometry(),
206 const QgsAttributeMap &attributes = QgsAttributeMap(),
207 QgsExpressionContext *context = nullptr );
208
216 static QgsFeatureList createFeatures( const QgsVectorLayer *layer,
217 const QgsFeaturesDataList &featuresData,
218 QgsExpressionContext *context = nullptr );
219
229 static QgsFeature duplicateFeature( QgsVectorLayer *layer, const QgsFeature &feature, QgsProject *project, QgsDuplicateFeatureContext &duplicateFeatureContext SIP_OUT, const int maxDepth = 0, int depth SIP_PYARGREMOVE = 0, QList<QgsVectorLayer *> referencedLayersBranch SIP_PYARGREMOVE = QList<QgsVectorLayer *>() );
230
231
246 static std::unique_ptr<QgsVectorLayerFeatureSource> getFeatureSource( QPointer<QgsVectorLayer> layer, QgsFeedback *feedback = nullptr ) SIP_SKIP;
247
267 static void matchAttributesToFields( QgsFeature &feature, const QgsFields &fields );
268
290 static QgsFeatureList makeFeatureCompatible( const QgsFeature &feature, const QgsVectorLayer *layer, QgsFeatureSink::SinkFlags sinkFlags = QgsFeatureSink::SinkFlags() );
291
313 static QgsFeatureList makeFeaturesCompatible( const QgsFeatureList &features, const QgsVectorLayer *layer, QgsFeatureSink::SinkFlags sinkFlags = QgsFeatureSink::SinkFlags() );
314
323 static bool fieldIsEditable( const QgsVectorLayer *layer, int fieldIndex, const QgsFeature &feature );
324
334 static bool fieldIsReadOnly( const QgsVectorLayer *layer, int fieldIndex );
335
345 static bool fieldEditabilityDependsOnFeature( const QgsVectorLayer *layer, int fieldIndex );
346
354 static QHash<QString, QgsMaskedLayers> labelMasks( const QgsVectorLayer * ) SIP_SKIP;
355
363 static QgsMaskedLayers symbolLayerMasks( const QgsVectorLayer * ) SIP_SKIP;
364
370 static QString getFeatureDisplayString( const QgsVectorLayer *layer, const QgsFeature &feature );
371
378 {
379 IgnoreAuxiliaryLayers = 1 << 1,
380 };
382
383
389 static bool impactsCascadeFeatures( const QgsVectorLayer *layer, const QgsFeatureIds &fids, const QgsProject *project, QgsDuplicateFeatureContext &context SIP_OUT, QgsVectorLayerUtils::CascadedFeatureFlags flags = QgsVectorLayerUtils::CascadedFeatureFlags() );
390
391#ifndef SIP_RUN
392
413#else
414
432#endif
433 static QString guessFriendlyIdentifierField( const QgsFields &fields, bool *foundFriendly SIP_OUT = nullptr ) SIP_PYNAME( guessFriendlyIdentifierFieldV2 );
434
435#ifdef SIP_RUN
436
453 static QString guessFriendlyIdentifierField( const QgsFields &fields );
454#endif
455
456};
457
458
459#endif // QGSVECTORLAYERUTILS_H
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Wrapper for iterator of features from vector data provider or vector layer.
An interface for objects which accept features via addFeature(s) methods.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition: qgsfeedback.h:44
ConstraintStrength
Strength of constraints.
@ ConstraintStrengthNotSet
Constraint is not set.
ConstraintOrigin
Origin of constraints.
@ ConstraintOriginNotSet
Constraint is not set.
Container of fields for a vector layer.
Definition: qgsfields.h:45
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:162
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:107
We may need stable references to symbol layers, when pointers to symbol layers is not usable (when a ...
Contains mainly the QMap with QgsVectorLayer and QgsFeatureIds do list all the duplicated features.
QgsDuplicateFeatureContext()=default
Constructor for QgsDuplicateFeatureContext.
Encapsulate geometry and attributes for new features, to be passed to createFeatures.
Contains utility methods for working with QgsVectorLayers.
QList< QgsVectorLayerUtils::QgsFeatureData > QgsFeaturesDataList
Alias for list of QgsFeatureData.
QFlags< CascadedFeatureFlag > CascadedFeatureFlags
CascadedFeatureFlag
Flags that can be used when determining cascaded features.
Represents a vector layer which manages a vector based data sets.
#define SIP_ENUM_BASETYPE(type)
Definition: qgis_sip.h:278
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
#define SIP_PYARGREMOVE
Definition: qgis_sip.h:151
#define SIP_OUT
Definition: qgis_sip.h:58
QMap< int, QVariant > QgsAttributeMap
Definition: qgsattributes.h:42
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:917
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
QHash< QString, QgsMaskedLayer > QgsMaskedLayers
masked layers where key is the layer id
QSet< QString > symbolLayerIds