QGIS API Documentation  3.21.0-Master (5b68dc587e)
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 
469  static QString defaultVectorExtension();
470 
481  static QString defaultRasterExtension();
482 
483  private:
484  static bool canUseLayer( const QgsRasterLayer *layer );
485  static bool canUseLayer( const QgsMeshLayer *layer );
486  static bool canUseLayer( const QgsPluginLayer *layer );
487  static bool canUseLayer( const QgsVectorTileLayer *layer );
488  static bool canUseLayer( const QgsPointCloudLayer *layer );
489  static bool canUseLayer( const QgsAnnotationLayer *layer );
490  static bool canUseLayer( const QgsVectorLayer *layer,
491  const QList< int > &sourceTypes = QList< int >() );
492 
505  template< typename T> static QList< T * > compatibleMapLayers( QgsProject *project, bool sort = true );
506 
517  static QgsMapLayer *mapLayerFromStore( const QString &string, QgsMapLayerStore *store, QgsProcessingUtils::LayerHint typeHint = QgsProcessingUtils::LayerHint::UnknownType );
518 
529  static QgsMapLayer *loadMapLayerFromString( const QString &string, const QgsCoordinateTransformContext &transformContext, LayerHint typeHint = LayerHint::UnknownType );
530 
539  Q_DECL_DEPRECATED static QgsMapLayer *loadMapLayerFromString( const QString &string, LayerHint typeHint = LayerHint::UnknownType ) SIP_DEPRECATED ;
540 
541  static void parseDestinationString( QString &destination, QString &providerKey, QString &uri, QString &layerName, QString &format, QMap<QString, QVariant> &options, bool &useWriter, QString &extension );
542 
543  friend class TestQgsProcessing;
544  friend class QgsProcessingProvider;
545 
546 };
547 
556 {
557  public:
558 
560  enum Flag
561  {
562  FlagSkipGeometryValidityChecks = 1 << 1,
563  };
564  Q_DECLARE_FLAGS( Flags, Flag )
565 
566 
576  QgsProcessingFeatureSource( QgsFeatureSource *originalSource, const QgsProcessingContext &context, bool ownsOriginalSource = false,
577  long long featureLimit = -1 );
578 
579  ~QgsProcessingFeatureSource() override;
580 
586  QgsFeatureIterator getFeatures( const QgsFeatureRequest &request, Flags flags ) const;
587 
588  QgsFeatureSource::FeatureAvailability hasFeatures() const override;
589 
590  QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const override;
591  QgsCoordinateReferenceSystem sourceCrs() const override;
592  QgsFields fields() const override;
593  QgsWkbTypes::Type wkbType() const override;
594  long long featureCount() const override;
595  QString sourceName() const override;
596  QSet<QVariant> uniqueValues( int fieldIndex, int limit = -1 ) const override;
597  QVariant minimumValue( int fieldIndex ) const override;
598  QVariant maximumValue( int fieldIndex ) const override;
599  QgsRectangle sourceExtent() const override;
600  QgsFeatureIds allFeatureIds() const override;
601  SpatialIndexPresence hasSpatialIndex() const override;
602 
606  QgsExpressionContextScope *createExpressionContextScope() const SIP_FACTORY;
607 
613  void setInvalidGeometryCheck( QgsFeatureRequest::InvalidGeometryCheck method );
614 
615  private:
616 
617  QgsFeatureSource *mSource = nullptr;
618  bool mOwnsSource = false;
619  QgsFeatureRequest::InvalidGeometryCheck mInvalidGeometryCheck = QgsFeatureRequest::GeometryNoCheck;
620  std::function< void( const QgsFeature & ) > mInvalidGeometryCallback;
621  std::function< void( const QgsFeature & ) > mTransformErrorCallback;
622 
623  std::function< void( const QgsFeature & ) > mInvalidGeometryCallbackSkip;
624  std::function< void( const QgsFeature & ) > mInvalidGeometryCallbackAbort;
625 
626  long long mFeatureLimit = -1;
627 
628 };
629 
630 #ifndef SIP_RUN
631 
640 {
641  public:
642 
643 
657  QgsProcessingFeatureSink( QgsFeatureSink *originalSink, const QString &sinkName, QgsProcessingContext &context, bool ownsOriginalSink = false );
658  ~QgsProcessingFeatureSink() override;
659  bool addFeature( QgsFeature &feature, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
660  bool addFeatures( QgsFeatureList &features, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
661  bool addFeatures( QgsFeatureIterator &iterator, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
662 
663  private:
664 
665  QgsProcessingContext &mContext;
666  QString mSinkName;
667  bool mOwnsSink = false;
668 
669 };
670 #endif
671 
672 #endif // QGSPROCESSINGUTILS_H
673 
674 
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:834
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
const QgsCoordinateReferenceSystem & crs