QGIS API Documentation  3.10.0-A Coruña (6c816b4204)
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 "qgsmessagelog.h"
25 #include "qgsspatialindex.h"
26 #include "qgsprocessing.h"
27 #include "qgsfeaturesink.h"
28 #include "qgsfeaturesource.h"
29 
30 class QgsMeshLayer;
31 class QgsProject;
33 class QgsMapLayerStore;
37 
38 #include <QString>
39 #include <QVariant>
40 
47 class CORE_EXPORT QgsProcessingUtils
48 {
49  public:
50 
61  static QList< QgsRasterLayer * > compatibleRasterLayers( QgsProject *project, bool sort = true );
62 
78  static QList< QgsVectorLayer * > compatibleVectorLayers( QgsProject *project,
79  const QList< int > &sourceTypes = QList< int >(),
80  bool sort = true );
81 
95  static QList<QgsMeshLayer *> compatibleMeshLayers( QgsProject *project, bool sort = true );
96 
106  static QList< QgsMapLayer * > compatibleLayers( QgsProject *project, bool sort = true );
107 
113  {
114  UnknownType,
115  Vector,
116  Raster,
117  Mesh,
118  };
119 
132  static QgsMapLayer *mapLayerFromString( const QString &string, QgsProcessingContext &context, bool allowLoadingNewLayers = true, QgsProcessingUtils::LayerHint typeHint = QgsProcessingUtils::LayerHint::UnknownType );
133 
145  static QgsProcessingFeatureSource *variantToSource( const QVariant &value, QgsProcessingContext &context, const QVariant &fallbackValue = QVariant() ) SIP_FACTORY;
146 
151  static QString normalizeLayerSource( const QString &source );
152 
159  static QString variantToPythonLiteral( const QVariant &value );
160 
166  static QString stringToPythonLiteral( const QString &string );
167 
185 #ifndef SIP_RUN
186  static QgsFeatureSink *createFeatureSink( QString &destination,
187  QgsProcessingContext &context,
188  const QgsFields &fields,
189  QgsWkbTypes::Type geometryType,
191  const QVariantMap &createOptions = QVariantMap(),
192  QgsFeatureSink::SinkFlags sinkFlags = nullptr ) SIP_FACTORY;
193 #endif
194 
214  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 );
215 
216 
223  static QgsRectangle combineLayerExtents( const QList<QgsMapLayer *> &layers, const QgsCoordinateReferenceSystem &crs, QgsProcessingContext &context );
224 
230  Q_DECL_DEPRECATED static QgsRectangle combineLayerExtents( const QList<QgsMapLayer *> &layers, const QgsCoordinateReferenceSystem &crs = QgsCoordinateReferenceSystem() ) SIP_DEPRECATED;
231 
238  static QVariant generateIteratingDestination( const QVariant &input, const QVariant &id, QgsProcessingContext &context );
239 
244  static QString tempFolder();
245 
252  static QString generateTempFilename( const QString &basename );
253 
258  static QString formatHelpMapAsHtml( const QVariantMap &map, const QgsProcessingAlgorithm *algorithm );
259 
277  static QString convertToCompatibleFormat( const QgsVectorLayer *layer,
278  bool selectedFeaturesOnly,
279  const QString &baseName,
280  const QStringList &compatibleFormats,
281  const QString &preferredFormat,
282  QgsProcessingContext &context,
283  QgsProcessingFeedback *feedback );
284 
315  static QString convertToCompatibleFormatAndLayerName( const QgsVectorLayer *layer,
316  bool selectedFeaturesOnly,
317  const QString &baseName,
318  const QStringList &compatibleFormats,
319  const QString &preferredFormat,
320  QgsProcessingContext &context,
321  QgsProcessingFeedback *feedback,
322  QString &layerName SIP_OUT );
323 
334  static QgsFields combineFields( const QgsFields &fieldsA, const QgsFields &fieldsB, const QString &fieldsBPrefix = QString() );
335 
341  static QList<int> fieldNamesToIndices( const QStringList &fieldNames, const QgsFields &fields );
342 
347  static QgsFields indicesToFields( const QList<int> &indices, const QgsFields &fields );
348 
359  static QString defaultVectorExtension();
360 
371  static QString defaultRasterExtension();
372 
373  private:
374  static bool canUseLayer( const QgsRasterLayer *layer );
375  static bool canUseLayer( const QgsMeshLayer *layer );
376  static bool canUseLayer( const QgsVectorLayer *layer,
377  const QList< int > &sourceTypes = QList< int >() );
378 
389  static QgsMapLayer *mapLayerFromStore( const QString &string, QgsMapLayerStore *store, QgsProcessingUtils::LayerHint typeHint = QgsProcessingUtils::LayerHint::UnknownType );
390 
401  static QgsMapLayer *loadMapLayerFromString( const QString &string, const QgsCoordinateTransformContext &transformContext, LayerHint typeHint = LayerHint::UnknownType );
402 
411  Q_DECL_DEPRECATED static QgsMapLayer *loadMapLayerFromString( const QString &string, LayerHint typeHint = LayerHint::UnknownType ) SIP_DEPRECATED ;
412 
413  static void parseDestinationString( QString &destination, QString &providerKey, QString &uri, QString &layerName, QString &format, QMap<QString, QVariant> &options, bool &useWriter, QString &extension );
414 
415  friend class TestQgsProcessing;
416  friend class QgsProcessingProvider;
417 
418 };
419 
428 {
429  public:
430 
432  enum Flag
433  {
434  FlagSkipGeometryValidityChecks = 1 << 1,
435  };
436  Q_DECLARE_FLAGS( Flags, Flag )
437 
438 
445  QgsProcessingFeatureSource( QgsFeatureSource *originalSource, const QgsProcessingContext &context, bool ownsOriginalSource = false );
446 
447  ~QgsProcessingFeatureSource() override;
448 
454  QgsFeatureIterator getFeatures( const QgsFeatureRequest &request, Flags flags ) const;
455 
456  QgsFeatureSource::FeatureAvailability hasFeatures() const override;
457 
458  QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const override;
459  QgsCoordinateReferenceSystem sourceCrs() const override;
460  QgsFields fields() const override;
461  QgsWkbTypes::Type wkbType() const override;
462  long featureCount() const override;
463  QString sourceName() const override;
464  QSet<QVariant> uniqueValues( int fieldIndex, int limit = -1 ) const override;
465  QVariant minimumValue( int fieldIndex ) const override;
466  QVariant maximumValue( int fieldIndex ) const override;
467  QgsRectangle sourceExtent() const override;
468  QgsFeatureIds allFeatureIds() const override;
469 
473  QgsExpressionContextScope *createExpressionContextScope() const SIP_FACTORY;
474 
475  private:
476 
477  QgsFeatureSource *mSource = nullptr;
478  bool mOwnsSource = false;
479  QgsFeatureRequest::InvalidGeometryCheck mInvalidGeometryCheck = QgsFeatureRequest::GeometryNoCheck;
480  std::function< void( const QgsFeature & ) > mInvalidGeometryCallback;
481  std::function< void( const QgsFeature & ) > mTransformErrorCallback;
482 
483 };
484 
485 #ifndef SIP_RUN
486 
495 {
496  public:
497 
498 
512  QgsProcessingFeatureSink( QgsFeatureSink *originalSink, const QString &sinkName, QgsProcessingContext &context, bool ownsOriginalSink = false );
513  ~QgsProcessingFeatureSink() override;
514  bool addFeature( QgsFeature &feature, QgsFeatureSink::Flags flags = nullptr ) override;
515  bool addFeatures( QgsFeatureList &features, QgsFeatureSink::Flags flags = nullptr ) override;
516  bool addFeatures( QgsFeatureIterator &iterator, QgsFeatureSink::Flags flags = nullptr ) override;
517 
518  private:
519 
520  QgsProcessingContext &mContext;
521  QString mSinkName;
522  bool mOwnsSink = false;
523 
524 };
525 #endif
526 
527 #endif // QGSPROCESSINGUTILS_H
528 
529 
Wrapper for iterator of features from vector data provider or vector layer.
A rectangle specified with double values.
Definition: qgsrectangle.h:41
Base class for all map layer types.
Definition: qgsmaplayer.h:79
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:34
Base class for providing feedback from a processing algorithm.
A simple feature sink which proxies feature addition on to another feature sink.
FeatureAvailability
Possible return value for hasFeatures() to determine if a source is empty.
LayerHint
Layer type hints.
This class provides qgis with the ability to render raster datasets onto the mapcanvas.
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:571
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_MONKEYPATCH_SCOPEENUM
Definition: qgis_sip.h:251
Abstract base class for processing providers.
#define SIP_INOUT
Definition: qgis_sip.h:71
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:55
const QgsCoordinateReferenceSystem & crs
#define SIP_TRANSFERBACK
Definition: qgis_sip.h:48
Abstract base class for processing algorithms.
Utility functions for use with processing classes.
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:68
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
Encapsulates a QGIS project, including sets of map layers and their styles, layouts, annotations, canvases, etc.
Definition: qgsproject.h:89
#define SIP_FACTORY
Definition: qgis_sip.h:76
Single scope for storing variables and functions for use within a QgsExpressionContext.
Contains information about the context in which a coordinate transform is executed.
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
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
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:58
This class represents a coordinate reference system (CRS).
#define SIP_THROW(name)
Definition: qgis_sip.h:184
Represents a mesh layer supporting display of data on structured or unstructured meshes.
Definition: qgsmeshlayer.h:90
A storage object for map layers, in which the layers are owned by the store and have their lifetime b...
Represents a vector layer which manages a vector based data sets.
Contains information about the context in which a processing algorithm is executed.
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81