QGIS API Documentation  3.2.0-Bonn (bc43194)
qgsprocessingutils.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsprocessingutils.h
3  ------------------------
4  begin : April 2017
5  copyright : (C) 2017 by Nyall Dawson
6  email : nyall dot dawson at gmail dot com
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef QGSPROCESSINGUTILS_H
19 #define QGSPROCESSINGUTILS_H
20 
21 #include "qgis_core.h"
22 
23 #include "qgsrasterlayer.h"
24 #include "qgsvectorlayer.h"
25 #include "qgsmessagelog.h"
26 #include "qgsspatialindex.h"
27 #include "qgsprocessing.h"
28 
29 class QgsProject;
31 class QgsMapLayerStore;
34 
35 #include <QString>
36 #include <QVariant>
37 
44 class CORE_EXPORT QgsProcessingUtils
45 {
46 
47  public:
48 
58  static QList< QgsRasterLayer * > compatibleRasterLayers( QgsProject *project, bool sort = true );
59 
74  static QList< QgsVectorLayer * > compatibleVectorLayers( QgsProject *project,
75  const QList< int > &sourceTypes = QList< int >(),
76  bool sort = true );
77 
87  static QList< QgsMapLayer * > compatibleLayers( QgsProject *project, bool sort = true );
88 
99  static QgsMapLayer *mapLayerFromString( const QString &string, QgsProcessingContext &context, bool allowLoadingNewLayers = true );
100 
112  static QgsProcessingFeatureSource *variantToSource( const QVariant &value, QgsProcessingContext &context, const QVariant &fallbackValue = QVariant() ) SIP_FACTORY;
113 
118  static QString normalizeLayerSource( const QString &source );
119 
123  static QString stringToPythonLiteral( const QString &string );
124 
142 #ifndef SIP_RUN
143  static QgsFeatureSink *createFeatureSink(
144  QString &destination,
145  QgsProcessingContext &context,
146  const QgsFields &fields,
147  QgsWkbTypes::Type geometryType,
148  const QgsCoordinateReferenceSystem &crs,
149  const QVariantMap &createOptions = QVariantMap() ) SIP_FACTORY;
150 #endif
151 
171  static void createFeatureSinkPython( QgsFeatureSink **sink SIP_OUT SIP_TRANSFERBACK, QString &destination SIP_INOUT, QgsProcessingContext &context, const QgsFields &fields, QgsWkbTypes::Type geometryType, const QgsCoordinateReferenceSystem &crs, const QVariantMap &createOptions = QVariantMap() ) SIP_THROW( QgsProcessingException ) SIP_PYNAME( createFeatureSink );
172 
177  static QgsRectangle combineLayerExtents( const QList<QgsMapLayer *> &layers, const QgsCoordinateReferenceSystem &crs = QgsCoordinateReferenceSystem() );
178 
185  static QVariant generateIteratingDestination( const QVariant &input, const QVariant &id, QgsProcessingContext &context );
186 
191  static QString tempFolder();
192 
199  static QString generateTempFilename( const QString &basename );
200 
205  static QString formatHelpMapAsHtml( const QVariantMap &map, const QgsProcessingAlgorithm *algorithm );
206 
219  static QString convertToCompatibleFormat( const QgsVectorLayer *layer,
220  bool selectedFeaturesOnly,
221  const QString &baseName,
222  const QStringList &compatibleFormats,
223  const QString &preferredFormat,
224  QgsProcessingContext &context,
225  QgsProcessingFeedback *feedback );
226 
237  static QgsFields combineFields( const QgsFields &fieldsA, const QgsFields &fieldsB );
238 
244  static QList<int> fieldNamesToIndices( const QStringList &fieldNames, const QgsFields &fields );
245 
250  static QgsFields indicesToFields( const QList<int> &indices, const QgsFields &fields );
251 
252  private:
253 
254  static bool canUseLayer( const QgsRasterLayer *layer );
255  static bool canUseLayer( const QgsVectorLayer *layer,
256  const QList< int > &sourceTypes = QList< int >() );
257 
268  static QgsMapLayer *mapLayerFromStore( const QString &string, QgsMapLayerStore *store );
269 
276  static QgsMapLayer *loadMapLayerFromString( const QString &string );
277 
278  static void parseDestinationString( QString &destination, QString &providerKey, QString &uri, QString &layerName, QString &format, QMap<QString, QVariant> &options, bool &useWriter );
279 
280  friend class TestQgsProcessing;
281 
282 };
283 
292 {
293  public:
294 
296  enum Flag
297  {
298  FlagSkipGeometryValidityChecks = 1 << 1,
299  };
300  Q_DECLARE_FLAGS( Flags, Flag )
301 
302 
309  QgsProcessingFeatureSource( QgsFeatureSource *originalSource, const QgsProcessingContext &context, bool ownsOriginalSource = false );
310 
311  ~QgsProcessingFeatureSource() override;
312 
318  QgsFeatureIterator getFeatures( const QgsFeatureRequest &request, Flags flags ) const;
319 
320  QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const override;
321  QgsCoordinateReferenceSystem sourceCrs() const override;
322  QgsFields fields() const override;
323  QgsWkbTypes::Type wkbType() const override;
324  long featureCount() const override;
325  QString sourceName() const override;
326  QSet<QVariant> uniqueValues( int fieldIndex, int limit = -1 ) const override;
327  QVariant minimumValue( int fieldIndex ) const override;
328  QVariant maximumValue( int fieldIndex ) const override;
329  QgsRectangle sourceExtent() const override;
330  QgsFeatureIds allFeatureIds() const override;
331 
335  QgsExpressionContextScope *createExpressionContextScope() const SIP_FACTORY;
336 
337  private:
338 
339  QgsFeatureSource *mSource = nullptr;
340  bool mOwnsSource = false;
341  QgsFeatureRequest::InvalidGeometryCheck mInvalidGeometryCheck = QgsFeatureRequest::GeometryNoCheck;
342  std::function< void( const QgsFeature & ) > mInvalidGeometryCallback;
343  std::function< void( const QgsFeature & ) > mTransformErrorCallback;
344 
345 };
346 
347 #ifndef SIP_RUN
348 
357 {
358  public:
359 
360 
374  QgsProcessingFeatureSink( QgsFeatureSink *originalSink, const QString &sinkName, QgsProcessingContext &context, bool ownsOriginalSink = false );
375  ~QgsProcessingFeatureSink() override;
376  bool addFeature( QgsFeature &feature, QgsFeatureSink::Flags flags = nullptr ) override;
377  bool addFeatures( QgsFeatureList &features, QgsFeatureSink::Flags flags = nullptr ) override;
378  bool addFeatures( QgsFeatureIterator &iterator, QgsFeatureSink::Flags flags = nullptr ) override;
379 
380  private:
381 
382  QgsProcessingContext &mContext;
383  QString mSinkName;
384  bool mOwnsSink = false;
385 
386 };
387 #endif
388 
389 #endif // QGSPROCESSINGUTILS_H
390 
391 
Wrapper for iterator of features from vector data provider or vector layer.
virtual QgsRectangle sourceExtent() const
Returns the extent of all geometries from the source.
A rectangle specified with double values.
Definition: qgsrectangle.h:40
Base class for all map layer types.
Definition: qgsmaplayer.h:61
Base class for providing feedback from a processing algorithm.
virtual QgsFields fields() const =0
Returns the fields associated with features in the source.
A simple feature sink which proxies feature addition on to another feature sink.
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeature.h:544
This class provides qgis with the ability to render raster datasets onto the mapcanvas.
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:549
virtual QgsWkbTypes::Type wkbType() const =0
Returns the geometry type for features returned by this source.
An interface for objects which accept features via addFeature(s) methods.
QgsFeatureSource subclass which proxies methods to an underlying QgsFeatureSource, modifying results according to the settings in a QgsProcessingContext.
Container of fields for a vector layer.
Definition: qgsfields.h:42
#define SIP_INOUT
Definition: qgis_sip.h:64
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:62
#define SIP_TRANSFERBACK
Definition: qgis_sip.h:41
Abstract base class for processing algorithms.
Utility functions for use with processing classes.
bool addFeatures(QgsFeatureList &features, QgsFeatureSink::Flags flags=nullptr) override
Adds a list of features to the sink.
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:67
virtual QVariant minimumValue(int fieldIndex) const
Returns the minimum value for an attribute column or an invalid variant in case of error...
This class wraps a request for features to a vector layer (or directly its vector data provider)...
Custom exception class for processing related exceptions.
Definition: qgsexception.h:82
Reads and writes project states.
Definition: qgsproject.h:85
#define SIP_FACTORY
Definition: qgis_sip.h:69
Single scope for storing variables and functions for use within a QgsExpressionContext.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into allowing algorithms to be written in pure substantial changes are required in order to port existing x Processing algorithms for QGIS x The most significant changes are outlined not GeoAlgorithm For algorithms which operate on features one by consider subclassing the QgsProcessingFeatureBasedAlgorithm class This class allows much of the boilerplate code for looping over features from a vector layer to be bypassed and instead requires implementation of a processFeature method Ensure that your algorithm(or algorithm 's parent class) implements the new pure virtual createInstance(self) call
virtual QSet< QVariant > uniqueValues(int fieldIndex, int limit=-1) const
Returns the set of unique values contained within the specified fieldIndex from this source...
virtual QgsCoordinateReferenceSystem sourceCrs() const =0
Returns the coordinate reference system for features in the source.
Flag
Flags controlling how QgsProcessingFeatureSource fetches features.
QgsProxyFeatureSink subclass which reports feature addition errors to a QgsProcessingContext.
An interface for objects which provide features via a getFeatures method.
#define SIP_OUT
Definition: qgis_sip.h:51
This class represents a coordinate reference system (CRS).
#define SIP_THROW(name)
Definition: qgis_sip.h:177
A storage object for map layers, in which the layers are owned by the store and have their lifetime b...
bool addFeature(QgsFeature &feature, QgsFeatureSink::Flags flags=nullptr) override
Adds a single feature to the sink.
virtual QVariant maximumValue(int fieldIndex) const
Returns the maximum value for an attribute column or an invalid variant in case of error...
virtual QString sourceName() const =0
Returns a friendly display name for the source.
Represents a vector layer which manages a vector based data sets.
virtual QgsFeatureIds allFeatureIds() const
Returns a list of all feature IDs for features present in the source.
Contains information about the context in which a processing algorithm is executed.
virtual QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const =0
Returns an iterator for the features in the source.
#define SIP_PYNAME(name)
Definition: qgis_sip.h:74
virtual long featureCount() const =0
Returns the number of features contained in the source, or -1 if the feature count is unknown...