QGIS API Documentation 3.34.0-Prizren (ffbdd678812)
Loading...
Searching...
No Matches
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
53class CORE_EXPORT QgsProcessingUtils
54{
55 public:
56
72 static QList< QgsRasterLayer * > compatibleRasterLayers( QgsProject *project, bool sort = true );
73
94 static QList< QgsVectorLayer * > compatibleVectorLayers( QgsProject *project,
95 const QList< int > &sourceTypes = QList< int >(),
96 bool sort = true );
97
116 static QList<QgsMeshLayer *> compatibleMeshLayers( QgsProject *project, bool sort = true );
117
136 static QList<QgsPluginLayer *> compatiblePluginLayers( QgsProject *project, bool sort = true );
137
156 static QList<QgsPointCloudLayer *> compatiblePointCloudLayers( QgsProject *project, bool sort = true );
157
176 static QList<QgsAnnotationLayer *> compatibleAnnotationLayers( QgsProject *project, bool sort = true );
177
196 static QList<QgsVectorTileLayer *> compatibleVectorTileLayers( QgsProject *project, bool sort = true );
197
216 static QList<QgsTiledSceneLayer *> compatibleTiledSceneLayers( QgsProject *project, bool sort = true );
217
227 static QList< QgsMapLayer * > compatibleLayers( QgsProject *project, bool sort = true );
228
235 static QString encodeProviderKeyAndUri( const QString &providerKey, const QString &uri );
236
248 static bool decodeProviderKeyAndUri( const QString &string, QString &providerKey SIP_OUT, QString &uri SIP_OUT );
249
255 {
256 UnknownType,
257 Vector,
258 Raster,
259 Mesh,
260 PointCloud,
261 Annotation,
262 VectorTile,
263 TiledScene,
264 };
265
278 static QgsMapLayer *mapLayerFromString( const QString &string, QgsProcessingContext &context, bool allowLoadingNewLayers = true, QgsProcessingUtils::LayerHint typeHint = QgsProcessingUtils::LayerHint::UnknownType, QgsProcessing::LayerOptionsFlags flags = QgsProcessing::LayerOptionsFlags() );
279
291 static QgsProcessingFeatureSource *variantToSource( const QVariant &value, QgsProcessingContext &context, const QVariant &fallbackValue = QVariant() ) SIP_FACTORY;
292
301 static QgsCoordinateReferenceSystem variantToCrs( const QVariant &value, QgsProcessingContext &context, const QVariant &fallbackValue = QVariant() );
302
307 static QString normalizeLayerSource( const QString &source );
308
315 static QString variantToPythonLiteral( const QVariant &value );
316
322 static QString stringToPythonLiteral( const QString &string );
323
341#ifndef SIP_RUN
342 static QgsFeatureSink *createFeatureSink( QString &destination,
343 QgsProcessingContext &context,
344 const QgsFields &fields,
345 Qgis::WkbType geometryType,
347 const QVariantMap &createOptions = QVariantMap(),
348 const QStringList &datasourceOptions = QStringList(),
349 const QStringList &layerOptions = QStringList(),
350 QgsFeatureSink::SinkFlags sinkFlags = QgsFeatureSink::SinkFlags(),
351 QgsRemappingSinkDefinition *remappingDefinition = nullptr ) SIP_FACTORY;
352#endif
353
373 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 );
374
375
382 static QgsRectangle combineLayerExtents( const QList<QgsMapLayer *> &layers, const QgsCoordinateReferenceSystem &crs, QgsProcessingContext &context );
383
389 Q_DECL_DEPRECATED static QgsRectangle combineLayerExtents( const QList<QgsMapLayer *> &layers, const QgsCoordinateReferenceSystem &crs = QgsCoordinateReferenceSystem() ) SIP_DEPRECATED;
390
397 static QVariant generateIteratingDestination( const QVariant &input, const QVariant &id, QgsProcessingContext &context );
398
403 static QString tempFolder( const QgsProcessingContext *context = nullptr );
404
411 static QString generateTempFilename( const QString &basename, const QgsProcessingContext *context = nullptr );
412
417 static QString formatHelpMapAsHtml( const QVariantMap &map, const QgsProcessingAlgorithm *algorithm );
418
441 static QString convertToCompatibleFormat( const QgsVectorLayer *layer,
442 bool selectedFeaturesOnly,
443 const QString &baseName,
444 const QStringList &compatibleFormats,
445 const QString &preferredFormat,
446 QgsProcessingContext &context,
447 QgsProcessingFeedback *feedback,
448 long long featureLimit = -1,
449 const QString &filterExpression = QString() );
450
485 static QString convertToCompatibleFormatAndLayerName( const QgsVectorLayer *layer,
486 bool selectedFeaturesOnly,
487 const QString &baseName,
488 const QStringList &compatibleFormats,
489 const QString &preferredFormat,
490 QgsProcessingContext &context,
491 QgsProcessingFeedback *feedback,
492 QString &layerName SIP_OUT,
493 long long featureLimit = -1,
494 const QString &filterExpression = QString() );
495
506 static QgsFields combineFields( const QgsFields &fieldsA, const QgsFields &fieldsB, const QString &fieldsBPrefix = QString() );
507
513 static QList<int> fieldNamesToIndices( const QStringList &fieldNames, const QgsFields &fields );
514
519 static QgsFields indicesToFields( const QList<int> &indices, const QgsFields &fields );
520
533 static QString defaultVectorExtension();
534
547 static QString defaultRasterExtension();
548
560 static QString defaultPointCloudExtension();
561
573 static QString defaultVectorTileExtension();
574
581 static QVariantMap removePointerValuesFromMap( const QVariantMap &map );
582
590 static QVariantMap preprocessQgisProcessParameters( const QVariantMap &parameters, bool &ok, QString &error );
591
600 static QString resolveDefaultEncoding( const QString &defaultEncoding = "System" );
601
602 private:
603 static bool canUseLayer( const QgsRasterLayer *layer );
604 static bool canUseLayer( const QgsMeshLayer *layer );
605 static bool canUseLayer( const QgsPluginLayer *layer );
606 static bool canUseLayer( const QgsVectorTileLayer *layer );
607 static bool canUseLayer( const QgsPointCloudLayer *layer );
608 static bool canUseLayer( const QgsAnnotationLayer *layer );
609 static bool canUseLayer( const QgsTiledSceneLayer *layer );
610 static bool canUseLayer( const QgsVectorLayer *layer,
611 const QList< int > &sourceTypes = QList< int >() );
612
625 template< typename T> static QList< T * > compatibleMapLayers( QgsProject *project, bool sort = true );
626
637 static QgsMapLayer *mapLayerFromStore( const QString &string, QgsMapLayerStore *store, QgsProcessingUtils::LayerHint typeHint = QgsProcessingUtils::LayerHint::UnknownType );
638
649 static QgsMapLayer *loadMapLayerFromString( const QString &string, const QgsCoordinateTransformContext &transformContext, LayerHint typeHint = LayerHint::UnknownType, QgsProcessing::LayerOptionsFlags flags = QgsProcessing::LayerOptionsFlags() );
650
659 Q_DECL_DEPRECATED static QgsMapLayer *loadMapLayerFromString( const QString &string, LayerHint typeHint = LayerHint::UnknownType ) SIP_DEPRECATED ;
660
661 static void parseDestinationString( QString &destination, QString &providerKey, QString &uri, QString &layerName, QString &format, QMap<QString, QVariant> &options, bool &useWriter, QString &extension );
662
663 friend class TestQgsProcessing;
665
666};
667
676{
677 public:
678
680 enum Flag
681 {
682 FlagSkipGeometryValidityChecks = 1 << 1,
683 };
684 Q_DECLARE_FLAGS( Flags, Flag )
685
686
698 QgsProcessingFeatureSource( QgsFeatureSource *originalSource, const QgsProcessingContext &context, bool ownsOriginalSource = false,
699 long long featureLimit = -1, const QString &filterExpression = QString() );
700
702
708 QgsFeatureIterator getFeatures( const QgsFeatureRequest &request, Flags flags ) const;
709
710 QgsFeatureSource::FeatureAvailability hasFeatures() const override;
711
712 QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const override;
713 QgsCoordinateReferenceSystem sourceCrs() const override;
714 QgsFields fields() const override;
715 Qgis::WkbType wkbType() const override;
716 long long featureCount() const override;
717 QString sourceName() const override;
718 QSet<QVariant> uniqueValues( int fieldIndex, int limit = -1 ) const override;
719 QVariant minimumValue( int fieldIndex ) const override;
720 QVariant maximumValue( int fieldIndex ) const override;
721 QgsRectangle sourceExtent() const override;
722 QgsFeatureIds allFeatureIds() const override;
723 SpatialIndexPresence hasSpatialIndex() const override;
724
728 QgsExpressionContextScope *createExpressionContextScope() const SIP_FACTORY;
729
735 void setInvalidGeometryCheck( QgsFeatureRequest::InvalidGeometryCheck method );
736
737 private:
738
739 QgsFeatureSource *mSource = nullptr;
740 bool mOwnsSource = false;
742 QgsFields mSourceFields;
743 Qgis::WkbType mSourceWkbType = Qgis::WkbType::Unknown;
744 QString mSourceName;
745 QgsRectangle mSourceExtent;
746 QgsFeatureSource::SpatialIndexPresence mSourceSpatialIndexPresence = QgsFeatureSource::SpatialIndexPresence::SpatialIndexUnknown;
747
748 QgsFeatureRequest::InvalidGeometryCheck mInvalidGeometryCheck = QgsFeatureRequest::GeometryNoCheck;
749 std::function< void( const QgsFeature & ) > mInvalidGeometryCallback;
750 std::function< void( const QgsFeature & ) > mTransformErrorCallback;
751
752 std::function< void( const QgsFeature & ) > mInvalidGeometryCallbackSkip;
753 std::function< void( const QgsFeature & ) > mInvalidGeometryCallbackAbort;
754
755 long long mFeatureLimit = -1;
756 QString mFilterExpression;
757
758};
759
760#ifndef SIP_RUN
761
770{
771 public:
772
773
787 QgsProcessingFeatureSink( QgsFeatureSink *originalSink, const QString &sinkName, QgsProcessingContext &context, bool ownsOriginalSink = false );
788 ~QgsProcessingFeatureSink() override;
789 bool addFeature( QgsFeature &feature, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
790 bool addFeatures( QgsFeatureList &features, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
791 bool addFeatures( QgsFeatureIterator &iterator, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
792
793 private:
794
795 QgsProcessingContext &mContext;
796 QString mSinkName;
797 bool mOwnsSink = false;
798
799};
800#endif
801
802#endif // QGSPROCESSINGUTILS_H
803
804
The Qgis class provides global constants for use throughout the application.
Definition qgis.h:54
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:182
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:74
Represents a mesh layer supporting display of data on structured or unstructured meshes.
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.
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.
Contains enumerations and other constants for use in processing algorithms and parameters.
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.
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: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
const QgsCoordinateReferenceSystem & crs