QGIS API Documentation 3.30.0-'s-Hertogenbosch (f186b8efe0)
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
32class QgsMeshLayer;
33class QgsPluginLayer;
34class QgsProject;
43
44#include <QString>
45#include <QVariant>
46
53class 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 Qgis::WkbType 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, Qgis::WkbType 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
503 static QVariantMap removePointerValuesFromMap( const QVariantMap &map );
504
512 static QVariantMap preprocessQgisProcessParameters( const QVariantMap &parameters, bool &ok, QString &error );
513
514 private:
515 static bool canUseLayer( const QgsRasterLayer *layer );
516 static bool canUseLayer( const QgsMeshLayer *layer );
517 static bool canUseLayer( const QgsPluginLayer *layer );
518 static bool canUseLayer( const QgsVectorTileLayer *layer );
519 static bool canUseLayer( const QgsPointCloudLayer *layer );
520 static bool canUseLayer( const QgsAnnotationLayer *layer );
521 static bool canUseLayer( const QgsVectorLayer *layer,
522 const QList< int > &sourceTypes = QList< int >() );
523
536 template< typename T> static QList< T * > compatibleMapLayers( QgsProject *project, bool sort = true );
537
548 static QgsMapLayer *mapLayerFromStore( const QString &string, QgsMapLayerStore *store, QgsProcessingUtils::LayerHint typeHint = QgsProcessingUtils::LayerHint::UnknownType );
549
560 static QgsMapLayer *loadMapLayerFromString( const QString &string, const QgsCoordinateTransformContext &transformContext, LayerHint typeHint = LayerHint::UnknownType );
561
570 Q_DECL_DEPRECATED static QgsMapLayer *loadMapLayerFromString( const QString &string, LayerHint typeHint = LayerHint::UnknownType ) SIP_DEPRECATED ;
571
572 static void parseDestinationString( QString &destination, QString &providerKey, QString &uri, QString &layerName, QString &format, QMap<QString, QVariant> &options, bool &useWriter, QString &extension );
573
574 friend class TestQgsProcessing;
576
577};
578
587{
588 public:
589
591 enum Flag
592 {
593 FlagSkipGeometryValidityChecks = 1 << 1,
594 };
595 Q_DECLARE_FLAGS( Flags, Flag )
596
597
607 QgsProcessingFeatureSource( QgsFeatureSource *originalSource, const QgsProcessingContext &context, bool ownsOriginalSource = false,
608 long long featureLimit = -1 );
609
611
617 QgsFeatureIterator getFeatures( const QgsFeatureRequest &request, Flags flags ) const;
618
619 QgsFeatureSource::FeatureAvailability hasFeatures() const override;
620
621 QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const override;
622 QgsCoordinateReferenceSystem sourceCrs() const override;
623 QgsFields fields() const override;
624 Qgis::WkbType wkbType() const override;
625 long long featureCount() const override;
626 QString sourceName() const override;
627 QSet<QVariant> uniqueValues( int fieldIndex, int limit = -1 ) const override;
628 QVariant minimumValue( int fieldIndex ) const override;
629 QVariant maximumValue( int fieldIndex ) const override;
630 QgsRectangle sourceExtent() const override;
631 QgsFeatureIds allFeatureIds() const override;
632 SpatialIndexPresence hasSpatialIndex() const override;
633
637 QgsExpressionContextScope *createExpressionContextScope() const SIP_FACTORY;
638
644 void setInvalidGeometryCheck( QgsFeatureRequest::InvalidGeometryCheck method );
645
646 private:
647
648 QgsFeatureSource *mSource = nullptr;
649 bool mOwnsSource = false;
650 QgsFeatureRequest::InvalidGeometryCheck mInvalidGeometryCheck = QgsFeatureRequest::GeometryNoCheck;
651 std::function< void( const QgsFeature & ) > mInvalidGeometryCallback;
652 std::function< void( const QgsFeature & ) > mTransformErrorCallback;
653
654 std::function< void( const QgsFeature & ) > mInvalidGeometryCallbackSkip;
655 std::function< void( const QgsFeature & ) > mInvalidGeometryCallbackAbort;
656
657 long long mFeatureLimit = -1;
658
659};
660
661#ifndef SIP_RUN
662
671{
672 public:
673
674
688 QgsProcessingFeatureSink( QgsFeatureSink *originalSink, const QString &sinkName, QgsProcessingContext &context, bool ownsOriginalSink = false );
689 ~QgsProcessingFeatureSink() override;
690 bool addFeature( QgsFeature &feature, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
691 bool addFeatures( QgsFeatureList &features, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
692 bool addFeatures( QgsFeatureIterator &iterator, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
693
694 private:
695
696 QgsProcessingContext &mContext;
697 QString mSinkName;
698 bool mOwnsSink = false;
699
700};
701#endif
702
703#endif // QGSPROCESSINGUTILS_H
704
705
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition: qgis.h:155
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:100
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:105
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.
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:265
#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
#define SIP_THROW(name,...)
Definition: qgis_sip.h:198
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:920
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
const QgsCoordinateReferenceSystem & crs