QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
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 "qgsfeaturesink.h"
25#include "qgsfeaturesource.h"
26#include "qgsprocessing.h"
27#include "qgsproxyfeaturesink.h"
29
30class QgsMeshLayer;
31class QgsPluginLayer;
32class QgsProject;
43
44#include <QString>
45#include <QVariant>
46
52class CORE_EXPORT QgsProcessingUtils
53{
54 Q_GADGET
55
56 public:
57
73 static QList< QgsRasterLayer * > compatibleRasterLayers( QgsProject *project, bool sort = true );
74
95 static QList< QgsVectorLayer * > compatibleVectorLayers( QgsProject *project,
96 const QList< int > &sourceTypes = QList< int >(),
97 bool sort = true );
98
117 static QList<QgsMeshLayer *> compatibleMeshLayers( QgsProject *project, bool sort = true );
118
137 static QList<QgsPluginLayer *> compatiblePluginLayers( QgsProject *project, bool sort = true );
138
157 static QList<QgsPointCloudLayer *> compatiblePointCloudLayers( QgsProject *project, bool sort = true );
158
177 static QList<QgsAnnotationLayer *> compatibleAnnotationLayers( QgsProject *project, bool sort = true );
178
197 static QList<QgsVectorTileLayer *> compatibleVectorTileLayers( QgsProject *project, bool sort = true );
198
217 static QList<QgsTiledSceneLayer *> compatibleTiledSceneLayers( QgsProject *project, bool sort = true );
218
228 static QList< QgsMapLayer * > compatibleLayers( QgsProject *project, bool sort = true );
229
236 static QString encodeProviderKeyAndUri( const QString &providerKey, const QString &uri );
237
249 static bool decodeProviderKeyAndUri( const QString &string, QString &providerKey SIP_OUT, QString &uri SIP_OUT );
250
256 {
257 UnknownType,
258 Vector,
259 Raster,
260 Mesh,
261 PointCloud,
262 Annotation,
263 VectorTile,
264 TiledScene,
265 };
266 Q_ENUM( LayerHint )
267
268
280 static QgsMapLayer *mapLayerFromString( const QString &string, QgsProcessingContext &context, bool allowLoadingNewLayers = true, QgsProcessingUtils::LayerHint typeHint = QgsProcessingUtils::LayerHint::UnknownType, QgsProcessing::LayerOptionsFlags flags = QgsProcessing::LayerOptionsFlags() );
281
293 static QgsProcessingFeatureSource *variantToSource( const QVariant &value, QgsProcessingContext &context, const QVariant &fallbackValue = QVariant() ) SIP_FACTORY;
294
303 static QgsCoordinateReferenceSystem variantToCrs( const QVariant &value, QgsProcessingContext &context, const QVariant &fallbackValue = QVariant() );
304
309 static QString normalizeLayerSource( const QString &source ) SIP_HOLDGIL;
310
318 static QString layerToStringIdentifier( const QgsMapLayer *layer ) SIP_HOLDGIL;
319
326 static QString variantToPythonLiteral( const QVariant &value );
327
333 static QString stringToPythonLiteral( const QString &string ) SIP_HOLDGIL;
334
352#ifndef SIP_RUN
353 static QgsFeatureSink *createFeatureSink( QString &destination,
354 QgsProcessingContext &context,
355 const QgsFields &fields,
356 Qgis::WkbType geometryType,
358 const QVariantMap &createOptions = QVariantMap(),
359 const QStringList &datasourceOptions = QStringList(),
360 const QStringList &layerOptions = QStringList(),
362 QgsRemappingSinkDefinition *remappingDefinition = nullptr ) SIP_FACTORY;
363#endif
364
384 static void createFeatureSinkPython( QgsFeatureSink **sink SIP_OUT SIP_TRANSFERBACK, QString &destination SIP_INOUT, QgsProcessingContext &context, const QgsFields &fields, Qgis::WkbType geometryType, const QgsCoordinateReferenceSystem &crs, const QVariantMap &createOptions = QVariantMap() ) SIP_THROW( QgsProcessingException ) SIP_PYNAME( createFeatureSink );
385
386
393 static QgsRectangle combineLayerExtents( const QList<QgsMapLayer *> &layers, const QgsCoordinateReferenceSystem &crs, QgsProcessingContext &context );
394
400 Q_DECL_DEPRECATED static QgsRectangle combineLayerExtents( const QList<QgsMapLayer *> &layers, const QgsCoordinateReferenceSystem &crs = QgsCoordinateReferenceSystem() ) SIP_DEPRECATED;
401
408 static QVariant generateIteratingDestination( const QVariant &input, const QVariant &id, QgsProcessingContext &context );
409
414 static QString tempFolder( const QgsProcessingContext *context = nullptr );
415
422 static QString generateTempFilename( const QString &basename, const QgsProcessingContext *context = nullptr );
423
428 static QString formatHelpMapAsHtml( const QVariantMap &map, const QgsProcessingAlgorithm *algorithm );
429
452 static QString convertToCompatibleFormat( const QgsVectorLayer *layer,
453 bool selectedFeaturesOnly,
454 const QString &baseName,
455 const QStringList &compatibleFormats,
456 const QString &preferredFormat,
457 QgsProcessingContext &context,
458 QgsProcessingFeedback *feedback,
459 long long featureLimit = -1,
460 const QString &filterExpression = QString() );
461
496 static QString convertToCompatibleFormatAndLayerName( const QgsVectorLayer *layer,
497 bool selectedFeaturesOnly,
498 const QString &baseName,
499 const QStringList &compatibleFormats,
500 const QString &preferredFormat,
501 QgsProcessingContext &context,
502 QgsProcessingFeedback *feedback,
503 QString &layerName SIP_OUT,
504 long long featureLimit = -1,
505 const QString &filterExpression = QString() );
506
517 static QgsFields combineFields( const QgsFields &fieldsA, const QgsFields &fieldsB, const QString &fieldsBPrefix = QString() ) SIP_HOLDGIL;
518
524 static QList<int> fieldNamesToIndices( const QStringList &fieldNames, const QgsFields &fields ) SIP_HOLDGIL;
525
530 static QgsFields indicesToFields( const QList<int> &indices, const QgsFields &fields ) SIP_HOLDGIL;
531
544 static QString defaultVectorExtension();
545
558 static QString defaultRasterExtension();
559
571 static QString defaultPointCloudExtension();
572
584 static QString defaultVectorTileExtension();
585
592 static QVariantMap removePointerValuesFromMap( const QVariantMap &map );
593
601 static QVariantMap preprocessQgisProcessParameters( const QVariantMap &parameters, bool &ok, QString &error );
602
611 static QString resolveDefaultEncoding( const QString &defaultEncoding = "System" );
612
613 private:
614 static bool canUseLayer( const QgsRasterLayer *layer );
615 static bool canUseLayer( const QgsMeshLayer *layer );
616 static bool canUseLayer( const QgsPluginLayer *layer );
617 static bool canUseLayer( const QgsVectorTileLayer *layer );
618 static bool canUseLayer( const QgsPointCloudLayer *layer );
619 static bool canUseLayer( const QgsAnnotationLayer *layer );
620 static bool canUseLayer( const QgsTiledSceneLayer *layer );
621 static bool canUseLayer( const QgsVectorLayer *layer,
622 const QList< int > &sourceTypes = QList< int >() );
623
636 template< typename T> static QList< T * > compatibleMapLayers( QgsProject *project, bool sort = true );
637
648 static QgsMapLayer *mapLayerFromStore( const QString &string, QgsMapLayerStore *store, QgsProcessingUtils::LayerHint typeHint = QgsProcessingUtils::LayerHint::UnknownType );
649
660 static QgsMapLayer *loadMapLayerFromString( const QString &string, const QgsCoordinateTransformContext &transformContext, LayerHint typeHint = LayerHint::UnknownType, QgsProcessing::LayerOptionsFlags flags = QgsProcessing::LayerOptionsFlags() );
661
670 Q_DECL_DEPRECATED static QgsMapLayer *loadMapLayerFromString( const QString &string, LayerHint typeHint = LayerHint::UnknownType ) SIP_DEPRECATED ;
671
672 static void parseDestinationString( QString &destination, QString &providerKey, QString &uri, QString &layerName, QString &format, QMap<QString, QVariant> &options, bool &useWriter, QString &extension );
673
674 friend class TestQgsProcessing;
676
677};
678
686{
687 public:
688
701 QgsProcessingFeatureSource( QgsFeatureSource *originalSource, const QgsProcessingContext &context, bool ownsOriginalSource = false,
702 long long featureLimit = -1, const QString &filterExpression = QString() );
703
705
711 QgsFeatureIterator getFeatures( const QgsFeatureRequest &request, Qgis::ProcessingFeatureSourceFlags flags ) const;
712
713 Qgis::FeatureAvailability hasFeatures() const override;
714
715 QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const override;
716 QgsCoordinateReferenceSystem sourceCrs() const override;
717 QgsFields fields() const override;
718 Qgis::WkbType wkbType() const override;
719 long long featureCount() const override;
720 QString sourceName() const override;
721 QSet<QVariant> uniqueValues( int fieldIndex, int limit = -1 ) const override;
722 QVariant minimumValue( int fieldIndex ) const override;
723 QVariant maximumValue( int fieldIndex ) const override;
724 QgsRectangle sourceExtent() const override;
725 QgsFeatureIds allFeatureIds() const override;
726 Qgis::SpatialIndexPresence hasSpatialIndex() const override;
727
731 QgsExpressionContextScope *createExpressionContextScope() const SIP_FACTORY;
732
739 void setInvalidGeometryCheck( Qgis::InvalidGeometryCheck method );
740
747 Qgis::InvalidGeometryCheck invalidGeometryCheck() const;
748
749 private:
750
751 QgsFeatureSource *mSource = nullptr;
752 bool mOwnsSource = false;
754 QgsFields mSourceFields;
755 Qgis::WkbType mSourceWkbType = Qgis::WkbType::Unknown;
756 QString mSourceName;
757 QgsRectangle mSourceExtent;
759
761 std::function< void( const QgsFeature & ) > mInvalidGeometryCallback;
762 std::function< void( const QgsFeature & ) > mTransformErrorCallback;
763
764 std::function< void( const QgsFeature & ) > mInvalidGeometryCallbackSkip;
765 std::function< void( const QgsFeature & ) > mInvalidGeometryCallbackAbort;
766
767 long long mFeatureLimit = -1;
768 QString mFilterExpression;
769
770};
771
772#ifndef SIP_RUN
773
781{
782 public:
783
784
798 QgsProcessingFeatureSink( QgsFeatureSink *originalSink, const QString &sinkName, QgsProcessingContext &context, bool ownsOriginalSink = false );
799 ~QgsProcessingFeatureSink() override;
800 bool addFeature( QgsFeature &feature, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
801 bool addFeatures( QgsFeatureList &features, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
802 bool addFeatures( QgsFeatureIterator &iterator, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
803
804 private:
805
806 QgsProcessingContext &mContext;
807 QString mSinkName;
808 bool mOwnsSink = false;
809
810};
811#endif
812
813#endif // QGSPROCESSINGUTILS_H
814
815
SpatialIndexPresence
Enumeration of spatial index presence states.
Definition: qgis.h:349
@ Unknown
Spatial index presence cannot be determined, index may or may not exist.
FeatureAvailability
Possible return value for QgsFeatureSource::hasFeatures() to determine if a source is empty.
Definition: qgis.h:368
InvalidGeometryCheck
Methods for handling of features with invalid geometries.
Definition: qgis.h:1778
@ NoCheck
No invalid geometry checking.
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition: qgis.h:182
@ Unknown
Unknown.
QFlags< ProcessingFeatureSourceFlag > ProcessingFeatureSourceFlags
Flags which control how QgsProcessingFeatureSource fetches features.
Definition: qgis.h:3011
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.
QFlags< SinkFlag > SinkFlags
QFlags< Flag > Flags
An interface for objects which provide features via a getFeatures method.
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:75
Represents a mesh layer supporting display of data on structured or unstructured meshes.
Definition: qgsmeshlayer.h:101
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,...
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.
Contains enumerations and other constants for use in processing algorithms and parameters.
Definition: qgsprocessing.h:41
QFlags< LayerOptionsFlag > LayerOptionsFlags
Definition: qgsprocessing.h:63
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:107
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 map layer supporting display of tiled scene objects.
Represents a vector layer which manages a vector based data sets.
Implements a map layer that is dedicated to rendering of vector tiles.
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_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
#define SIP_MONKEYPATCH_SCOPEENUM
Definition: qgis_sip.h:270
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_TRANSFERBACK
Definition: qgis_sip.h:48
#define SIP_HOLDGIL
Definition: qgis_sip.h:171
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define SIP_INOUT
Definition: qgis_sip.h:71
#define SIP_THROW(name,...)
Definition: qgis_sip.h:203
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:917
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
const QgsCoordinateReferenceSystem & crs