QGIS API Documentation  3.23.0-Master (b5237dafc3)
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 #include "qgsproxyfeaturesink.h"
31 
32 class QgsMeshLayer;
33 class QgsPluginLayer;
34 class QgsProject;
36 class QgsMapLayerStore;
40 class QgsVectorTileLayer;
41 class QgsPointCloudLayer;
42 class QgsAnnotationLayer;
43 
44 #include <QString>
45 #include <QVariant>
46 
53 class CORE_EXPORT QgsProcessingUtils
54 {
55  public:
56 
70  static QList< QgsRasterLayer * > compatibleRasterLayers( QgsProject *project, bool sort = true );
71 
90  static QList< QgsVectorLayer * > compatibleVectorLayers( QgsProject *project,
91  const QList< int > &sourceTypes = QList< int >(),
92  bool sort = true );
93 
110  static QList<QgsMeshLayer *> compatibleMeshLayers( QgsProject *project, bool sort = true );
111 
128  static QList<QgsPluginLayer *> compatiblePluginLayers( QgsProject *project, bool sort = true );
129 
146  static QList<QgsPointCloudLayer *> compatiblePointCloudLayers( QgsProject *project, bool sort = true );
147 
164  static QList<QgsAnnotationLayer *> compatibleAnnotationLayers( QgsProject *project, bool sort = true );
165 
175  static QList< QgsMapLayer * > compatibleLayers( QgsProject *project, bool sort = true );
176 
183  static QString encodeProviderKeyAndUri( const QString &providerKey, const QString &uri );
184 
196  static bool decodeProviderKeyAndUri( const QString &string, QString &providerKey SIP_OUT, QString &uri SIP_OUT );
197 
203  {
204  UnknownType,
205  Vector,
206  Raster,
207  Mesh,
208  PointCloud,
209  Annotation,
210  };
211 
224  static QgsMapLayer *mapLayerFromString( const QString &string, QgsProcessingContext &context, bool allowLoadingNewLayers = true, QgsProcessingUtils::LayerHint typeHint = QgsProcessingUtils::LayerHint::UnknownType );
225 
237  static QgsProcessingFeatureSource *variantToSource( const QVariant &value, QgsProcessingContext &context, const QVariant &fallbackValue = QVariant() ) SIP_FACTORY;
238 
247  static QgsCoordinateReferenceSystem variantToCrs( const QVariant &value, QgsProcessingContext &context, const QVariant &fallbackValue = QVariant() );
248 
253  static QString normalizeLayerSource( const QString &source );
254 
261  static QString variantToPythonLiteral( const QVariant &value );
262 
268  static QString stringToPythonLiteral( const QString &string );
269 
287 #ifndef SIP_RUN
288  static QgsFeatureSink *createFeatureSink( QString &destination,
289  QgsProcessingContext &context,
290  const QgsFields &fields,
291  QgsWkbTypes::Type geometryType,
293  const QVariantMap &createOptions = QVariantMap(),
294  const QStringList &datasourceOptions = QStringList(),
295  const QStringList &layerOptions = QStringList(),
296  QgsFeatureSink::SinkFlags sinkFlags = QgsFeatureSink::SinkFlags(),
297  QgsRemappingSinkDefinition *remappingDefinition = nullptr ) SIP_FACTORY;
298 #endif
299 
319  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 );
320 
321 
328  static QgsRectangle combineLayerExtents( const QList<QgsMapLayer *> &layers, const QgsCoordinateReferenceSystem &crs, QgsProcessingContext &context );
329 
335  Q_DECL_DEPRECATED static QgsRectangle combineLayerExtents( const QList<QgsMapLayer *> &layers, const QgsCoordinateReferenceSystem &crs = QgsCoordinateReferenceSystem() ) SIP_DEPRECATED;
336 
343  static QVariant generateIteratingDestination( const QVariant &input, const QVariant &id, QgsProcessingContext &context );
344 
349  static QString tempFolder();
350 
357  static QString generateTempFilename( const QString &basename );
358 
363  static QString formatHelpMapAsHtml( const QVariantMap &map, const QgsProcessingAlgorithm *algorithm );
364 
384  static QString convertToCompatibleFormat( const QgsVectorLayer *layer,
385  bool selectedFeaturesOnly,
386  const QString &baseName,
387  const QStringList &compatibleFormats,
388  const QString &preferredFormat,
389  QgsProcessingContext &context,
390  QgsProcessingFeedback *feedback, long long featureLimit = -1 );
391 
425  static QString convertToCompatibleFormatAndLayerName( const QgsVectorLayer *layer,
426  bool selectedFeaturesOnly,
427  const QString &baseName,
428  const QStringList &compatibleFormats,
429  const QString &preferredFormat,
430  QgsProcessingContext &context,
431  QgsProcessingFeedback *feedback,
432  QString &layerName SIP_OUT, long long featureLimit = -1 );
433 
444  static QgsFields combineFields( const QgsFields &fieldsA, const QgsFields &fieldsB, const QString &fieldsBPrefix = QString() );
445 
451  static QList<int> fieldNamesToIndices( const QStringList &fieldNames, const QgsFields &fields );
452 
457  static QgsFields indicesToFields( const QList<int> &indices, const QgsFields &fields );
458 
470  static QString defaultVectorExtension();
471 
483  static QString defaultRasterExtension();
484 
495  static QString defaultPointCloudExtension();
496 
497 
498  private:
499  static bool canUseLayer( const QgsRasterLayer *layer );
500  static bool canUseLayer( const QgsMeshLayer *layer );
501  static bool canUseLayer( const QgsPluginLayer *layer );
502  static bool canUseLayer( const QgsVectorTileLayer *layer );
503  static bool canUseLayer( const QgsPointCloudLayer *layer );
504  static bool canUseLayer( const QgsAnnotationLayer *layer );
505  static bool canUseLayer( const QgsVectorLayer *layer,
506  const QList< int > &sourceTypes = QList< int >() );
507 
520  template< typename T> static QList< T * > compatibleMapLayers( QgsProject *project, bool sort = true );
521 
532  static QgsMapLayer *mapLayerFromStore( const QString &string, QgsMapLayerStore *store, QgsProcessingUtils::LayerHint typeHint = QgsProcessingUtils::LayerHint::UnknownType );
533 
544  static QgsMapLayer *loadMapLayerFromString( const QString &string, const QgsCoordinateTransformContext &transformContext, LayerHint typeHint = LayerHint::UnknownType );
545 
554  Q_DECL_DEPRECATED static QgsMapLayer *loadMapLayerFromString( const QString &string, LayerHint typeHint = LayerHint::UnknownType ) SIP_DEPRECATED ;
555 
556  static void parseDestinationString( QString &destination, QString &providerKey, QString &uri, QString &layerName, QString &format, QMap<QString, QVariant> &options, bool &useWriter, QString &extension );
557 
558  friend class TestQgsProcessing;
559  friend class QgsProcessingProvider;
560 
561 };
562 
571 {
572  public:
573 
575  enum Flag
576  {
577  FlagSkipGeometryValidityChecks = 1 << 1,
578  };
579  Q_DECLARE_FLAGS( Flags, Flag )
580 
581 
591  QgsProcessingFeatureSource( QgsFeatureSource *originalSource, const QgsProcessingContext &context, bool ownsOriginalSource = false,
592  long long featureLimit = -1 );
593 
594  ~QgsProcessingFeatureSource() override;
595 
601  QgsFeatureIterator getFeatures( const QgsFeatureRequest &request, Flags flags ) const;
602 
603  QgsFeatureSource::FeatureAvailability hasFeatures() const override;
604 
605  QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const override;
606  QgsCoordinateReferenceSystem sourceCrs() const override;
607  QgsFields fields() const override;
608  QgsWkbTypes::Type wkbType() const override;
609  long long featureCount() const override;
610  QString sourceName() const override;
611  QSet<QVariant> uniqueValues( int fieldIndex, int limit = -1 ) const override;
612  QVariant minimumValue( int fieldIndex ) const override;
613  QVariant maximumValue( int fieldIndex ) const override;
614  QgsRectangle sourceExtent() const override;
615  QgsFeatureIds allFeatureIds() const override;
616  SpatialIndexPresence hasSpatialIndex() const override;
617 
621  QgsExpressionContextScope *createExpressionContextScope() const SIP_FACTORY;
622 
628  void setInvalidGeometryCheck( QgsFeatureRequest::InvalidGeometryCheck method );
629 
630  private:
631 
632  QgsFeatureSource *mSource = nullptr;
633  bool mOwnsSource = false;
634  QgsFeatureRequest::InvalidGeometryCheck mInvalidGeometryCheck = QgsFeatureRequest::GeometryNoCheck;
635  std::function< void( const QgsFeature & ) > mInvalidGeometryCallback;
636  std::function< void( const QgsFeature & ) > mTransformErrorCallback;
637 
638  std::function< void( const QgsFeature & ) > mInvalidGeometryCallbackSkip;
639  std::function< void( const QgsFeature & ) > mInvalidGeometryCallbackAbort;
640 
641  long long mFeatureLimit = -1;
642 
643 };
644 
645 #ifndef SIP_RUN
646 
655 {
656  public:
657 
658 
672  QgsProcessingFeatureSink( QgsFeatureSink *originalSink, const QString &sinkName, QgsProcessingContext &context, bool ownsOriginalSink = false );
673  ~QgsProcessingFeatureSink() override;
674  bool addFeature( QgsFeature &feature, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
675  bool addFeatures( QgsFeatureList &features, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
676  bool addFeatures( QgsFeatureIterator &iterator, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
677 
678  private:
679 
680  QgsProcessingContext &mContext;
681  QString mSinkName;
682  bool mOwnsSink = false;
683 
684 };
685 #endif
686 
687 #endif // QGSPROCESSINGUTILS_H
688 
689 
Represents a map layer containing a set of georeferenced annotations, e.g.
This class represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
Single scope for storing variables and functions for use within a QgsExpressionContext.
Wrapper for iterator of features from vector data provider or vector layer.
This class wraps a request for features to a vector layer (or directly its vector data provider).
An interface for objects which accept features via addFeature(s) methods.
An interface for objects which provide features via a getFeatures method.
FeatureAvailability
Possible return value for hasFeatures() to determine if a source is empty.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
Container of fields for a vector layer.
Definition: qgsfields.h:45
A storage object for map layers, in which the layers are owned by the store and have their lifetime b...
Base class for all map layer types.
Definition: qgsmaplayer.h:73
Represents a mesh layer supporting display of data on structured or unstructured meshes.
Definition: qgsmeshlayer.h:97
Base class for plugin layers.
Represents a map layer supporting display of point clouds.
Abstract base class for processing algorithms.
Contains information about the context in which a processing algorithm is executed.
Custom exception class for processing related exceptions.
Definition: qgsexception.h:83
QgsProxyFeatureSink subclass which reports feature addition errors to a QgsProcessingContext.
QgsFeatureSource subclass which proxies methods to an underlying QgsFeatureSource,...
Flag
Flags controlling how QgsProcessingFeatureSource fetches features.
Base class for providing feedback from a processing algorithm.
Abstract base class for processing providers.
Utility functions for use with processing classes.
LayerHint
Layer type hints.
@ UnknownType
Unknown layer type.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:101
A simple feature sink which proxies feature addition on to another feature sink.
Represents a raster layer.
A rectangle specified with double values.
Definition: qgsrectangle.h:42
Defines the parameters used to remap features when creating a QgsRemappingProxyFeatureSink.
Represents a vector layer which manages a vector based data sets.
Implements a map layer that is dedicated to rendering of vector tiles.
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:70
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
#define SIP_THROW(name)
Definition: qgis_sip.h:189
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
#define SIP_MONKEYPATCH_SCOPEENUM
Definition: qgis_sip.h:256
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_TRANSFERBACK
Definition: qgis_sip.h:48
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define SIP_INOUT
Definition: qgis_sip.h:71
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:882
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
const QgsCoordinateReferenceSystem & crs