40 return QList<QgsRasterLayer *>();
42 QList<QgsRasterLayer *> layers;
47 if ( canUseLayer( l ) )
55 return QString::localeAwareCompare( a->
name(), b->name() ) < 0;
64 return QList<QgsVectorLayer *>();
66 QList<QgsVectorLayer *> layers;
70 if ( canUseLayer( l, geometryTypes ) )
78 return QString::localeAwareCompare( a->
name(), b->name() ) < 0;
87 return QList<QgsMeshLayer *>();
89 QList<QgsMeshLayer *> layers;
93 if ( canUseLayer( l ) )
101 return QString::localeAwareCompare( a->
name(), b->name() ) < 0;
110 return QList<QgsMapLayer *>();
112 QList<QgsMapLayer *> layers;
130 return QString::localeAwareCompare( a->
name(), b->name() ) < 0;
138 if ( !store ||
string.isEmpty() )
141 QList< QgsMapLayer * > layers = store->
mapLayers().values();
143 layers.erase( std::remove_if( layers.begin(), layers.end(), [](
QgsMapLayer * layer )
145 switch ( layer->type() )
148 return !canUseLayer( qobject_cast< QgsVectorLayer * >( layer ) );
150 return !canUseLayer( qobject_cast< QgsRasterLayer * >( layer ) );
154 return !canUseLayer( qobject_cast< QgsMeshLayer * >( layer ) );
159 auto isCompatibleType = [typeHint](
QgsMapLayer * l ) ->
bool 180 if ( isCompatibleType( l ) && l->id() == string )
185 if ( isCompatibleType( l ) && l->name() == string )
198 QStringList components =
string.split(
'|' );
199 if ( components.isEmpty() )
203 if ( QFileInfo::exists(
string ) )
204 fi = QFileInfo(
string );
205 else if ( QFileInfo::exists( components.at( 0 ) ) )
206 fi = QFileInfo( components.at( 0 ) );
210 QString name = fi.baseName();
216 options.loadDefaultStyle =
false;
217 options.skipCrsValidation =
true;
218 std::unique_ptr< QgsVectorLayer > layer = qgis::make_unique<QgsVectorLayer>( string, name, QStringLiteral(
"ogr" ), options );
219 if ( layer->isValid() )
221 return layer.release();
229 std::unique_ptr< QgsRasterLayer > rasterLayer(
new QgsRasterLayer(
string, name, QStringLiteral(
"gdal" ), rasterOptions ) );
230 if ( rasterLayer->isValid() )
232 return rasterLayer.release();
239 std::unique_ptr< QgsMeshLayer > meshLayer(
new QgsMeshLayer(
string, name, QStringLiteral(
"mdal" ), meshOptions ) );
240 if ( meshLayer->isValid() )
242 return meshLayer.release();
250 if (
string.isEmpty() )
266 if ( !allowLoadingNewLayers )
269 layer = loadMapLayerFromString(
string, context.
transformContext(), typeHint );
283 QVariant val = value;
284 bool selectedFeaturesOnly =
false;
299 if (
QgsVectorLayer *layer = qobject_cast< QgsVectorLayer * >( qvariant_cast<QObject *>( val ) ) )
309 else if ( !val.isValid() || val.toString().isEmpty() )
312 if (
QgsVectorLayer *layer = qobject_cast< QgsVectorLayer * >( qvariant_cast<QObject *>( fallbackValue ) ) )
317 layerRef = fallbackValue.toString();
321 layerRef = val.toString();
324 if ( layerRef.isEmpty() )
331 if ( selectedFeaturesOnly )
341 bool QgsProcessingUtils::canUseLayer(
const QgsMeshLayer *layer )
346 bool QgsProcessingUtils::canUseLayer(
const QgsRasterLayer *layer )
348 return layer && layer->
isValid();
351 bool QgsProcessingUtils::canUseLayer(
const QgsVectorLayer *layer,
const QList<int> &sourceTypes )
353 return layer && layer->
isValid() &&
354 ( sourceTypes.isEmpty()
365 QString normalized = source;
366 normalized.replace(
'\\',
'/' );
367 return normalized.trimmed();
372 if ( !value.isValid() )
373 return QStringLiteral(
"None" );
376 return QStringLiteral(
"QgsProperty.fromExpression('%1')" ).arg( value.value<
QgsProperty >().
asExpression() );
380 return QStringLiteral(
"QgsCoordinateReferenceSystem()" );
414 switch ( value.type() )
417 return value.toBool() ? QStringLiteral(
"True" ) : QStringLiteral(
"False" );
419 case QVariant::Double:
420 return QString::number( value.toDouble() );
424 return QString::number( value.toInt() );
426 case QVariant::LongLong:
427 case QVariant::ULongLong:
428 return QString::number( value.toLongLong() );
433 const QVariantList vl = value.toList();
434 for (
const QVariant &v : vl )
438 return parts.join(
',' ).prepend(
'[' ).append(
']' );
451 s.replace(
'\\', QStringLiteral(
"\\\\" ) );
452 s.replace(
'\n', QStringLiteral(
"\\n" ) );
453 s.replace(
'\r', QStringLiteral(
"\\r" ) );
454 s.replace(
'\t', QStringLiteral(
"\\t" ) );
455 s.replace(
'"', QStringLiteral(
"\\\"" ) );
456 s.replace(
'\'', QStringLiteral(
"\\\'" ) );
457 s = s.prepend(
'\'' ).append(
'\'' );
461 void QgsProcessingUtils::parseDestinationString( QString &destination, QString &providerKey, QString &uri, QString &layerName, QString &format, QMap<QString, QVariant> &options,
bool &useWriter, QString &extension )
464 QRegularExpression splitRx( QStringLiteral(
"^(.{3,}?):(.*)$" ) );
465 QRegularExpressionMatch match = splitRx.match( destination );
466 if ( match.hasMatch() )
468 providerKey = match.captured( 1 );
469 if ( providerKey == QStringLiteral(
"postgis" ) )
471 providerKey = QStringLiteral(
"postgres" );
473 uri = match.captured( 2 );
474 if ( providerKey == QLatin1String(
"ogr" ) )
479 if ( !dsUri.
table().isEmpty() )
481 layerName = dsUri.
table();
482 options.insert( QStringLiteral(
"layerName" ), layerName );
485 extension = QFileInfo( uri ).completeSuffix();
490 extension = QFileInfo( uri ).completeSuffix();
492 options.insert( QStringLiteral(
"update" ),
true );
499 providerKey = QStringLiteral(
"ogr" );
500 QRegularExpression splitRx( QStringLiteral(
"^(.*)\\.(.*?)$" ) );
501 QRegularExpressionMatch match = splitRx.match( destination );
502 if ( match.hasMatch() )
504 extension = match.captured( 2 );
508 if ( format.isEmpty() )
510 format = QStringLiteral(
"GPKG" );
511 destination = destination + QStringLiteral(
".gpkg" );
514 options.insert( QStringLiteral(
"driverName" ), format );
521 QVariantMap options = createOptions;
522 if ( !options.contains( QStringLiteral(
"fileEncoding" ) ) )
528 if ( destination.isEmpty() || destination.startsWith( QLatin1String(
"memory:" ) ) )
531 if ( destination.startsWith( QLatin1String(
"memory:" ) ) )
532 destination = destination.mid( 7 );
534 if ( destination.isEmpty() )
535 destination = QStringLiteral(
"output" );
539 if ( !layer || !layer->isValid() )
545 destination = layer->id();
548 std::unique_ptr< QgsProcessingFeatureSink > sink(
new QgsProcessingFeatureSink( layer->dataProvider(), destination, context ) );
551 return sink.release();
560 bool useWriter =
false;
561 parseDestinationString( destination, providerKey, uri, layerName, format, options, useWriter, extension );
564 if ( useWriter && providerKey == QLatin1String(
"ogr" ) )
568 QString finalFileName;
569 std::unique_ptr< QgsVectorFileWriter > writer = qgis::make_unique< QgsVectorFileWriter >( destination, options.value( QStringLiteral(
"fileEncoding" ) ).toString(), newFields, geometryType,
crs, format,
QgsVectorFileWriter::defaultDatasetOptions( format ),
572 if ( writer->hasError() )
574 throw QgsProcessingException( QObject::tr(
"Could not create layer %1: %2" ).arg( destination, writer->errorMessage() ) );
576 destination = finalFileName;
583 std::unique_ptr< QgsVectorLayerExporter > exporter = qgis::make_unique<QgsVectorLayerExporter>( uri, providerKey, newFields, geometryType,
crs,
true, options, sinkFlags );
584 if ( exporter->errorCode() )
586 throw QgsProcessingException( QObject::tr(
"Could not create layer %1: %2" ).arg( destination, exporter->errorMessage() ) );
590 if ( !layerName.isEmpty() )
591 uri += QStringLiteral(
"|layername=%1" ).arg( layerName );
592 std::unique_ptr< QgsVectorLayer > layer = qgis::make_unique<QgsVectorLayer>( uri, destination, providerKey, layerOptions );
594 destination = layer->
id();
604 *sink =
createFeatureSink( destination, context, fields, geometryType, crs, options );
649 if ( !input.isValid() )
650 return QStringLiteral(
"memory:%1" ).arg(
id.toString() );
666 QString res = input.toString();
672 else if ( res.startsWith( QLatin1String(
"memory:" ) ) )
674 return res +
'_' +
id.toString();
680 int lastIndex = res.lastIndexOf(
'.' );
681 return res.left( lastIndex ) +
'_' +
id.toString() + res.mid( lastIndex );
688 static QString sFolder;
689 static QMutex sMutex;
691 if ( sFolder.isEmpty() )
693 QString subPath = QUuid::createUuid().toString().remove(
'-' ).remove(
'{' ).remove(
'}' );
694 sFolder = QDir::tempPath() + QStringLiteral(
"/processing_" ) + subPath;
695 if ( !QDir( sFolder ).exists() )
696 QDir().mkpath( sFolder );
704 QString subPath = QUuid::createUuid().toString().remove(
'-' ).remove(
'{' ).remove(
'}' );
706 if ( !QDir( path ).exists() )
709 tmpDir.mkdir( path );
716 auto getText = [map](
const QString & key )->QString
718 if ( map.contains( key ) )
719 return map.value( key ).toString();
723 QString s = QObject::tr(
"<html><body><h2>Algorithm description</h2>\n" );
724 s += QStringLiteral(
"<p>" ) + getText( QStringLiteral(
"ALG_DESC" ) ) + QStringLiteral(
"</p>\n" );
731 inputs += QStringLiteral(
"<h3>" ) + def->description() + QStringLiteral(
"</h3>\n" );
732 inputs += QStringLiteral(
"<p>" ) + getText( def->name() ) + QStringLiteral(
"</p>\n" );
734 if ( !inputs.isEmpty() )
735 s += QObject::tr(
"<h2>Input parameters</h2>\n" ) + inputs;
741 outputs += QStringLiteral(
"<h3>" ) + def->description() + QStringLiteral(
"</h3>\n" );
742 outputs += QStringLiteral(
"<p>" ) + getText( def->name() ) + QStringLiteral(
"</p>\n" );
744 if ( !outputs.isEmpty() )
745 s += QObject::tr(
"<h2>Outputs</h2>\n" ) + outputs;
747 s += QLatin1String(
"<br>" );
748 if ( !map.value( QStringLiteral(
"ALG_CREATOR" ) ).toString().isEmpty() )
749 s += QObject::tr(
"<p align=\"right\">Algorithm author: %1</p>" ).arg( getText( QStringLiteral(
"ALG_CREATOR" ) ) );
750 if ( !map.value( QStringLiteral(
"ALG_HELP_CREATOR" ) ).toString().isEmpty() )
751 s += QObject::tr(
"<p align=\"right\">Help author: %1</p>" ).arg( getText( QStringLiteral(
"ALG_HELP_CREATOR" ) ) );
752 if ( !map.value( QStringLiteral(
"ALG_VERSION" ) ).toString().isEmpty() )
753 s += QObject::tr(
"<p align=\"right\">Algorithm version: %1</p>" ).arg( getText( QStringLiteral(
"ALG_VERSION" ) ) );
755 s += QStringLiteral(
"</body></html>" );
761 bool requiresTranslation =
false;
765 requiresTranslation = requiresTranslation || selectedFeaturesOnly;
770 requiresTranslation = requiresTranslation || vl->
providerType() != QLatin1String(
"ogr" );
774 requiresTranslation = requiresTranslation || !vl->
subsetString().isEmpty();
778 requiresTranslation = requiresTranslation || vl->
source().startsWith( QLatin1String(
"/vsi" ) );
782 if ( !requiresTranslation )
785 if ( parts.contains( QStringLiteral(
"path" ) ) )
787 diskPath = parts.value( QStringLiteral(
"path" ) ).toString();
788 QFileInfo fi( diskPath );
789 requiresTranslation = !compatibleFormats.contains( fi.suffix(), Qt::CaseInsensitive );
793 const QString srcLayerName = parts.value( QStringLiteral(
"layerName" ) ).toString();
797 *layerName = srcLayerName;
802 requiresTranslation = requiresTranslation || ( !srcLayerName.isEmpty() && srcLayerName != fi.baseName() );
807 requiresTranslation =
true;
811 if ( requiresTranslation )
819 if ( selectedFeaturesOnly )
852 QSet< QString > usedNames;
855 usedNames.insert( f.name().toLower() );
861 newField.
setName( fieldsBPrefix + f.name() );
862 if ( usedNames.contains( newField.
name().toLower() ) )
865 QString newName = newField.
name() +
'_' + QString::number( idx );
866 while ( usedNames.contains( newName.toLower() ) )
869 newName = newField.
name() +
'_' + QString::number( idx );
872 outFields.
append( newField );
876 outFields.
append( newField );
878 usedNames.insert( newField.
name() );
888 if ( !fieldNames.isEmpty() )
890 indices.reserve( fieldNames.count() );
891 for (
const QString &f : fieldNames )
895 indices.append( idx );
900 indices.reserve( fields.
count() );
901 for (
int i = 0; i < fields.
count(); ++i )
911 for (
int i : indices )
912 fieldsSubset.
append( fields.
at( i ) );
919 const int setting = settings.
value( QStringLiteral(
"Processing/Configuration/DefaultOutputVectorLayerExt" ), -1 ).toInt();
921 return QStringLiteral(
"gpkg" );
928 const int setting = settings.
value( QStringLiteral(
"Processing/Configuration/DefaultOutputRasterLayerExt" ), -1 ).toInt();
930 return QStringLiteral(
"tif" );
939 : mSource( originalSource )
940 , mOwnsSource( ownsOriginalSource )
943 : context.invalidGeometryCheck() )
944 , mInvalidGeometryCallback( context.invalidGeometryCallback() )
945 , mTransformErrorCallback( context.transformErrorCallback() )
976 return sourceAvailability;
1050 return expressionContextScope;
1059 , mContext( context )
1060 , mSinkName( sinkName )
1061 , mOwnsSink( ownsOriginalSink )
1074 mContext.
feedback()->
reportError( QObject::tr(
"Feature could not be written to %1" ).arg( mSinkName ) );
1082 mContext.
feedback()->
reportError( QObject::tr(
"%1 feature(s) could not be written to %2" ).arg( features.count() ).arg( mSinkName ) );
1090 mContext.
feedback()->
reportError( QObject::tr(
"Features could not be written to %1" ).arg( mSinkName ) );
int lookupField(const QString &fieldName) const
Looks up field's index from the field name.
QgsProperty sink
Sink/layer definition.
Wrapper for iterator of features from vector data provider or vector layer.
~QgsProcessingFeatureSource() override
virtual QgsRectangle sourceExtent() const
Returns the extent of all geometries from the source.
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
A rectangle specified with double values.
QgsWkbTypes::Type wkbType() const override
Returns the geometry type for features returned by this source.
QString asExpression() const
Returns an expression string representing the state of the property, or an empty string if the proper...
Base class for all map layer types.
QString table() const
Returns the table name stored in the URI.
QSet< QgsFeatureId > QgsFeatureIds
static QgsRectangle combineLayerExtents(const QList< QgsMapLayer *> &layers, const QgsCoordinateReferenceSystem &crs, QgsProcessingContext &context)
Combines the extent of several map layers.
QgsFeatureRequest & setInvalidGeometryCallback(const std::function< void(const QgsFeature &)> &callback)
Sets a callback function to use when encountering an invalid geometry and invalidGeometryCheck() is s...
Base class for providing feedback from a processing algorithm.
QgsProcessingParameterDefinitions parameterDefinitions() const
Returns an ordered list of parameter definitions utilized by the algorithm.
Invalid geometry checks should always be skipped. This flag can be useful for algorithms which always...
virtual QgsFields fields() const =0
Returns the fields associated with features in the source.
Encapsulates settings relating to a feature sink or output raster layer for a processing algorithm...
static void createFeatureSinkPython(QgsFeatureSink **sink, QString &destination, QgsProcessingContext &context, const QgsFields &fields, QgsWkbTypes::Type geometryType, const QgsCoordinateReferenceSystem &crs, const QVariantMap &createOptions=QVariantMap()) SIP_THROW(QgsProcessingException)
Creates a feature sink ready for adding features.
A simple feature sink which proxies feature addition on to another feature sink.
QgsFeatureRequest & setInvalidGeometryCheck(InvalidGeometryCheck check)
Sets invalid geometry checking behavior.
QgsProcessingFeatureSource(QgsFeatureSource *originalSource, const QgsProcessingContext &context, bool ownsOriginalSource=false)
Constructor for QgsProcessingFeatureSource, accepting an original feature source originalSource and p...
static QString defaultVectorExtension()
Returns the default vector extension to use, in the absence of all other constraints (e...
This class is a composition of two QSettings instances:
FeatureAvailability
Possible return value for hasFeatures() to determine if a source is empty.
LayerHint
Layer type hints.
QgsWkbTypes::Type wkbType() const FINAL
Returns the WKBType or WKBUnknown in case of error.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
Setting options for loading vector layers.
This class provides qgis with the ability to render raster datasets onto the mapcanvas.
QList< QgsFeature > QgsFeatureList
Handles storage of information regarding WKB types and their properties.
A class to represent a 2D point.
A QgsPointXY with associated coordinate reference system.
QString providerType() const
Returns the provider type (provider key) for this layer.
QgsFeatureIds allFeatureIds() const override
Returns a list of all feature IDs for features present in the source.
virtual QgsWkbTypes::Type wkbType() const =0
Returns the geometry type for features returned by this source.
An interface for objects which accept features via addFeature(s) methods.
static QList< QgsRasterLayer *> compatibleRasterLayers(QgsProject *project, bool sort=true)
Returns a list of raster layers from a project which are compatible with the processing framework...
static QString stringToPythonLiteral(const QString &string)
Converts a string to a Python string literal.
QgsWkbTypes::GeometryType geometryType() const
Returns point, line or polygon.
QgsFeatureSource subclass which proxies methods to an underlying QgsFeatureSource, modifying results according to the settings in a QgsProcessingContext.
Container of fields for a vector layer.
void setName(const QString &name)
Set the field name.
bool addFeatures(QgsFeatureList &features, QgsFeatureSink::Flags flags=nullptr) override
Adds a list of features to the sink.
QVariantMap decodeUri(const QString &providerKey, const QString &uri)
Breaks a provider data source URI into its component paths (e.g.
static QString driverForExtension(const QString &extension)
Returns the OGR driver name for a specified file extension.
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request, Flags flags) const
Returns an iterator for the features in the source, respecting the supplied feature flags...
static QList< QgsVectorLayer *> compatibleVectorLayers(QgsProject *project, const QList< int > &sourceTypes=QList< int >(), bool sort=true)
Returns a list of vector layers from a project which are compatible with the processing framework...
Setting options for loading mesh layers.
A convenience class for writing vector files to disk.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
const QgsCoordinateReferenceSystem & crs
QVariant maximumValue(int fieldIndex) const override
Returns the maximum value for an attribute column or an invalid variant in case of error...
bool isValid() const
Returns the status of the layer.
static QString convertToCompatibleFormat(const QgsVectorLayer *layer, bool selectedFeaturesOnly, const QString &baseName, const QStringList &compatibleFormats, const QString &preferredFormat, QgsProcessingContext &context, QgsProcessingFeedback *feedback)
Converts a source vector layer to a file path of a vector layer of compatible format.
QgsRectangle sourceExtent() const override
Returns the extent of all geometries from the source.
static QString normalizeLayerSource(const QString &source)
Normalizes a layer source string for safe comparison across different operating system environments...
Abstract base class for processing algorithms.
int count() const
Returns number of items.
bool isSpatial() const FINAL
Returns true if this is a geometry layer and false in case of NoGeometry (table only) or UnknownGeome...
QgsMapLayerStore * layerStore()
Returns a pointer to the project's internal layer store.
QgsProject * project() const
Returns the project in which the algorithm is being executed.
bool selectedFeaturesOnly
true if only selected features in the source should be used by algorithms.
QgsField at(int i) const
Gets field at particular index (must be in range 0..N-1)
static QgsMapLayer * mapLayerFromString(const QString &string, QgsProcessingContext &context, bool allowLoadingNewLayers=true, QgsProcessingUtils::LayerHint typeHint=QgsProcessingUtils::LayerHint::UnknownType)
Interprets a string as a map layer within the supplied context.
bool addFeatures(QgsFeatureList &features, QgsFeatureSink::Flags flags=nullptr) override
Adds a list of features to the sink.
QgsCoordinateReferenceSystem crs() const
Returns the associated coordinate reference system, or an invalid CRS if no reference system is set...
QSet< QVariant > uniqueValues(int fieldIndex, int limit=-1) const override
Returns the set of unique values contained within the specified fieldIndex from this source...
static QgsFeatureSink * createFeatureSink(QString &destination, QgsProcessingContext &context, const QgsFields &fields, QgsWkbTypes::Type geometryType, const QgsCoordinateReferenceSystem &crs, const QVariantMap &createOptions=QVariantMap(), QgsFeatureSink::SinkFlags sinkFlags=nullptr)
Creates a feature sink ready for adding features.
QgsProcessingFeedback * feedback()
Returns the associated feedback object.
static QList< int > fieldNamesToIndices(const QStringList &fieldNames, const QgsFields &fields)
Returns a list of field indices parsed from the given list of field names.
Type
The WKB type describes the number of dimensions a geometry has.
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
virtual QVariant minimumValue(int fieldIndex) const
Returns the minimum value for an attribute column or an invalid variant in case of error...
static QStringList supportedFormatExtensions(RasterFormatOptions options=SortRecommended)
Returns a list of file extensions for supported formats.
QgsFields fields() const override
Returns the fields associated with features in the source.
QString id() const
Returns the layer's unique ID, which is used to access this layer from QgsProject.
static QgsProperty fromValue(const QVariant &value, bool isActive=true)
Returns a new StaticProperty created from the specified value.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
QgsMapLayerStore * temporaryLayerStore()
Returns a reference to the layer store used for storing temporary layers during algorithm execution...
QgsProperty source
Source definition.
static QStringList defaultLayerOptions(const QString &driverName)
Returns a list of the default layer options for a specified driver.
QVariant minimumValue(int fieldIndex) const override
Returns the minimum value for an attribute column or an invalid variant in case of error...
QgsFeatureIterator getSelectedFeatures(QgsFeatureRequest request=QgsFeatureRequest()) const
Returns an iterator of the selected features.
static QString stringToSafeFilename(const QString &string)
Converts a string to a safe filename, replacing characters which are not safe for filenames with an '...
bool loadDefaultStyle
Sets to true if the default layer style should be loaded.
QgsCoordinateReferenceSystem sourceCrs() const override
Returns the coordinate reference system for features in the source.
static QString convertToCompatibleFormatAndLayerName(const QgsVectorLayer *layer, bool selectedFeaturesOnly, const QString &baseName, const QStringList &compatibleFormats, const QString &preferredFormat, QgsProcessingContext &context, QgsProcessingFeedback *feedback, QString &layerName)
Converts a source vector layer to a file path and layer name of a vector layer of compatible format...
QString qgsDoubleToString(double a, int precision=17)
Returns a string representation of a double.
~QgsProcessingFeatureSink() override
There are certainly no features available in this source.
bool skipCrsValidation
Controls whether the layer is allowed to have an invalid/unknown CRS.
static QString defaultRasterExtension()
Returns the default raster extension to use, in the absence of all other constraints (e...
static const QString TEMPORARY_OUTPUT
Constant used to indicate that a Processing algorithm output should be a temporary layer/file...
This class wraps a request for features to a vector layer (or directly its vector data provider)...
Custom exception class for processing related exceptions.
static QStringList supportedFormatExtensions(VectorFormatOptions options=SortRecommended)
Returns a list of file extensions for supported formats, e.g "shp", "gpkg".
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context.
static QList< QgsMapLayer *> compatibleLayers(QgsProject *project, bool sort=true)
Returns a list of map layers from a project which are compatible with the processing framework...
bool append(const QgsField &field, FieldOrigin origin=OriginProvider, int originIndex=-1)
Appends a field. The field must have unique name, otherwise it is rejected (returns false) ...
Encapsulates a QGIS project, including sets of map layers and their styles, layouts, annotations, canvases, etc.
No invalid geometry checking.
A QgsRectangle with associated coordinate reference system.
bool addFeature(QgsFeature &feature, QgsFeatureSink::Flags flags=nullptr) override
Adds a single feature to the sink.
QString convertToCompatibleFormatInternal(const QgsVectorLayer *vl, bool selectedFeaturesOnly, const QString &baseName, const QStringList &compatibleFormats, const QString &preferredFormat, QgsProcessingContext &context, QgsProcessingFeedback *feedback, QString *layerName)
Encapsulate a field in an attribute table or data source.
QgsMeshDataProvider * dataProvider() override
Returns the layer's data provider, it may be nullptr.
Single scope for storing variables and functions for use within a QgsExpressionContext.
Contains information about the context in which a coordinate transform is executed.
static QgsProcessingFeatureSource * variantToSource(const QVariant &value, QgsProcessingContext &context, const QVariant &fallbackValue=QVariant())
Converts a variant value to a new feature source.
A store for object properties.
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
virtual QSet< QVariant > uniqueValues(int fieldIndex, int limit=-1) const
Returns the set of unique values contained within the specified fieldIndex from this source...
QgsExpressionContext & expressionContext()
Returns the expression context.
QgsRectangle extent() const FINAL
Returns the extent of the layer.
static QList< QgsMeshLayer * > compatibleMeshLayers(QgsProject *project, bool sort=true)
Returns a list of mesh layers from a project which are compatible with the processing framework...
QgsFeatureRequest & setTransformErrorCallback(const std::function< void(const QgsFeature &)> &callback)
Sets a callback function to use when encountering a transform error when iterating features and a des...
static QString tempFolder()
Returns a session specific processing temporary folder for use in processing algorithms.
virtual QgsCoordinateReferenceSystem sourceCrs() const =0
Returns the coordinate reference system for features in the source.
QgsExpressionContextScope * createExpressionContextScope() const
Returns an expression context scope suitable for this source.
Encapsulates settings relating to a feature source input to a processing algorithm.
double yMinimum() const
Returns the y minimum value (bottom side of rectangle).
QgsProcessingOutputDefinitions outputDefinitions() const
Returns an ordered list of output definitions utilized by the algorithm.
static QString generateTempFilename(const QString &basename)
Returns a temporary filename for a given file, putting it into a temporary folder (creating that fold...
double xMaximum() const
Returns the x maximum value (right side of rectangle).
void combineExtentWith(const QgsRectangle &rect)
Expands the rectangle so that it covers both the original rectangle and the given rectangle...
bool skipCrsValidation
Controls whether the layer is allowed to have an invalid/unknown CRS.
Base class for the definition of processing outputs.
static QString variantToPythonLiteral(const QVariant &value)
Converts a variant to a Python literal.
QgsProxyFeatureSink subclass which reports feature addition errors to a QgsProcessingContext.
static QString formatHelpMapAsHtml(const QVariantMap &map, const QgsProcessingAlgorithm *algorithm)
Returns a HTML formatted version of the help text encoded in a variant map for a specified algorithm...
static QgsFields indicesToFields(const QList< int > &indices, const QgsFields &fields)
Returns a subset of fields based on the indices of desired fields.
QVector< T > layers() const
Returns a list of registered map layers with a specified layer type.
virtual QgsExpressionContextScope * createExpressionContextScope() const =0
This method needs to be reimplemented in all classes which implement this interface and return an exp...
QMap< QString, QgsMapLayer * > mapLayers() const
Returns a map of all layers by layer ID.
QgsFeatureSource subclass for the selected features from a QgsVectorLayer.
QgsMapLayer * addMapLayer(QgsMapLayer *layer, bool takeOwnership=true)
Add a layer to the store.
bool isCanceled() const
Tells whether the operation has been canceled already.
Abstract interface for generating an expression context scope.
QString defaultEncoding() const
Returns the default encoding to use for newly created files.
An interface for objects which provide features via a getFeatures method.
QString source() const
Returns the source for the layer.
QgsFeatureSource::FeatureAvailability hasFeatures() const override
Determines if there are any features available in the source.
static QVariant generateIteratingDestination(const QVariant &input, const QVariant &id, QgsProcessingContext &context)
Converts an input parameter value for use in source iterating mode, where one individual sink is crea...
QString sourceName() const override
Returns a friendly display name for the source.
static QStringList defaultDatasetOptions(const QString &driverName)
Returns a list of the default dataset options for a specified driver.
This class represents a coordinate reference system (CRS).
Base class for the definition of processing parameters.
Tables (i.e. vector layers with or without geometry). When used for a sink this indicates the sink ha...
double xMinimum() const
Returns the x minimum value (left side of rectangle).
double yMaximum() const
Returns the y maximum value (top side of rectangle).
Represents a mesh layer supporting display of data on structured or unstructured meshes.
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const FINAL
Queries the layer for features specified in request.
A storage object for map layers, in which the layers are owned by the store and have their lifetime b...
virtual void reportError(const QString &error, bool fatalError=false)
Reports that the algorithm encountered an error while executing.
bool addFeature(QgsFeature &feature, QgsFeatureSink::Flags flags=nullptr) override
Adds a single feature to the sink.
Custom exception class for Coordinate Reference System related exceptions.
static QgsVectorLayer * createMemoryLayer(const QString &name, const QgsFields &fields, QgsWkbTypes::Type geometryType=QgsWkbTypes::NoGeometry, const QgsCoordinateReferenceSystem &crs=QgsCoordinateReferenceSystem())
Creates a new memory layer using the specified parameters.
virtual QVariant maximumValue(int fieldIndex) const
Returns the maximum value for an attribute column or an invalid variant in case of error...
There may be features available in this source.
bool nextFeature(QgsFeature &f)
QgsFeatureSink * destinationSink()
Returns the destination QgsFeatureSink which the proxy will forward features to.
static QgsFields combineFields(const QgsFields &fieldsA, const QgsFields &fieldsB, const QString &fieldsBPrefix=QString())
Combines two field lists, avoiding duplicate field names (in a case-insensitive manner).
virtual QString sourceName() const =0
Returns a friendly display name for the source.
long featureCount() const override
Returns the number of features contained in the source, or -1 if the feature count is unknown...
Class for storing the component parts of a RDBMS data source URI (e.g.
Represents a vector layer which manages a vector based data sets.
virtual QgsFeatureIds allFeatureIds() const
Returns a list of all feature IDs for features present in the source.
Contains information about the context in which a processing algorithm is executed.
virtual FeatureAvailability hasFeatures() const
Determines if there are any features available in the source.
QString database() const
Returns the database name stored in the URI.
Any vector layer with geometry.
QString authid() const
Returns the authority identifier for the CRS.
Setting options for loading raster layers.
QgsCoordinateReferenceSystem crs
virtual QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const =0
Returns an iterator for the features in the source.
virtual long featureCount() const =0
Returns the number of features contained in the source, or -1 if the feature count is unknown...
bool isValid() const
Returns whether this CRS is correctly initialized and usable.
QgsProcessingFeatureSink(QgsFeatureSink *originalSink, const QString &sinkName, QgsProcessingContext &context, bool ownsOriginalSink=false)
Constructor for QgsProcessingFeatureSink, accepting an original feature sink originalSink and process...