QGIS API Documentation 3.43.0-Master (69d1901085b)
qgsprocessingalgorithm.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsprocessingalgorithm.cpp
3 --------------------------
4 begin : December 2016
5 copyright : (C) 2016 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
19#include "qgsapplication.h"
23#include "qgsrectangle.h"
25#include "qgsprocessingutils.h"
26#include "qgsexception.h"
27#include "qgsmessagelog.h"
28#include "qgsvectorlayer.h"
30#include "qgsmeshlayer.h"
31#include "qgspointcloudlayer.h"
33#include <QRegularExpression>
34#include <QRegularExpressionMatch>
35
37{
38 qDeleteAll( mParameters );
39 qDeleteAll( mOutputs );
40}
41
42QgsProcessingAlgorithm *QgsProcessingAlgorithm::create( const QVariantMap &configuration ) const
43{
44 std::unique_ptr< QgsProcessingAlgorithm > creation( createInstance() );
45 if ( ! creation )
46 throw QgsProcessingException( QObject::tr( "Error creating algorithm from createInstance()" ) );
47 creation->setProvider( provider() );
48 creation->initAlgorithm( configuration );
49 return creation.release();
50}
51
53{
54 if ( mProvider )
55 return QStringLiteral( "%1:%2" ).arg( mProvider->id(), name() );
56 else
57 return name();
58}
59
61{
62 return QString();
63}
64
66{
67 return QString();
68}
69
71{
72 return QString();
73}
74
76{
77 return QString();
78}
79
84
86{
87 return QgsApplication::getThemeIcon( "/processingAlgorithm.svg" );
88}
89
91{
92 return QgsApplication::iconPath( QStringLiteral( "processingAlgorithm.svg" ) );
93}
94
99
101{
102 return true;
103}
104
105bool QgsProcessingAlgorithm::checkParameterValues( const QVariantMap &parameters, QgsProcessingContext &context, QString *message ) const
106{
107 for ( const QgsProcessingParameterDefinition *def : mParameters )
108 {
109 if ( !def->checkValueIsAcceptable( parameters.value( def->name() ), &context ) )
110 {
111 if ( message )
112 {
113 // TODO QGIS 4 - move the message handling to the parameter subclasses (but this
114 // requires a change in signature for the virtual checkValueIsAcceptable method)
116 *message = invalidSourceError( parameters, def->name() );
117 else if ( def->type() == QgsProcessingParameterFeatureSink::typeName() )
118 *message = invalidSinkError( parameters, def->name() );
119 else if ( def->type() == QgsProcessingParameterRasterLayer::typeName() )
120 *message = invalidRasterError( parameters, def->name() );
121 else if ( def->type() == QgsProcessingParameterPointCloudLayer::typeName() )
122 *message = invalidPointCloudError( parameters, def->name() );
123 else
124 *message = QObject::tr( "Incorrect parameter value for %1" ).arg( def->name() );
125 }
126 return false;
127 }
128 }
129 return true;
130}
131
132QVariantMap QgsProcessingAlgorithm::preprocessParameters( const QVariantMap &parameters )
133{
134 return parameters;
135}
136
137QVariantMap QgsProcessingAlgorithm::autogenerateParameterValues( const QVariantMap &, const QString &, Qgis::ProcessingMode ) const
138{
139 return {};
140}
141
143{
144 return mProvider;
145}
146
148{
149 mProvider = provider;
150
151 if ( mProvider && !mProvider->supportsNonFileBasedOutput() )
152 {
153 // need to update all destination parameters to turn off non file based outputs
154 for ( const QgsProcessingParameterDefinition *definition : std::as_const( mParameters ) )
155 {
156 if ( definition->isDestination() )
157 {
158 const QgsProcessingDestinationParameter *destParam = static_cast< const QgsProcessingDestinationParameter *>( definition );
159 const_cast< QgsProcessingDestinationParameter *>( destParam )->setSupportsNonFileBasedOutput( false );
160 }
161 }
162 }
163}
164
166{
167 return nullptr;
168}
169
171 QgsProcessingContext &context, QgsProcessingFeatureSource *source ) const
172{
173 // start with context's expression context
175
176 // If there's a source capable of generating a context scope, use it
177 if ( source )
178 {
180 if ( scope )
181 c << scope;
182 }
183 else if ( c.scopeCount() == 0 )
184 {
185 //empty scope, populate with initial scopes
188 }
189
190 c << QgsExpressionContextUtils::processingAlgorithmScope( this, parameters, context );
191 return c;
192}
193
194bool QgsProcessingAlgorithm::validateInputCrs( const QVariantMap &parameters, QgsProcessingContext &context ) const
195{
197 {
198 // I'm a well behaved algorithm - I take work AWAY from users!
199 return true;
200 }
201
202 bool foundCrs = false;
204 for ( const QgsProcessingParameterDefinition *def : mParameters )
205 {
207 {
208 QgsMapLayer *layer = QgsProcessingParameters::parameterAsLayer( def, parameters, context );
209 if ( layer )
210 {
211 if ( foundCrs && layer->crs().isValid() && crs != layer->crs() )
212 {
213 return false;
214 }
215 else if ( !foundCrs && layer->crs().isValid() )
216 {
217 foundCrs = true;
218 crs = layer->crs();
219 }
220 }
221 }
222 else if ( def->type() == QgsProcessingParameterFeatureSource::typeName() )
223 {
224 std::unique_ptr< QgsFeatureSource > source( QgsProcessingParameters::parameterAsSource( def, parameters, context ) );
225 if ( source )
226 {
227 if ( foundCrs && source->sourceCrs().isValid() && crs != source->sourceCrs() )
228 {
229 return false;
230 }
231 else if ( !foundCrs && source->sourceCrs().isValid() )
232 {
233 foundCrs = true;
234 crs = source->sourceCrs();
235 }
236 }
237 }
238 else if ( def->type() == QgsProcessingParameterMultipleLayers::typeName() )
239 {
240 QList< QgsMapLayer *> layers = QgsProcessingParameters::parameterAsLayerList( def, parameters, context );
241 const auto constLayers = layers;
242 for ( QgsMapLayer *layer : constLayers )
243 {
244 if ( !layer )
245 continue;
246
247 if ( foundCrs && layer->crs().isValid() && crs != layer->crs() )
248 {
249 return false;
250 }
251 else if ( !foundCrs && layer->crs().isValid() )
252 {
253 foundCrs = true;
254 crs = layer->crs();
255 }
256 }
257 }
258 else if ( def->type() == QgsProcessingParameterExtent::typeName() )
259 {
261 if ( foundCrs && extentCrs.isValid() && crs != extentCrs )
262 {
263 return false;
264 }
265 else if ( !foundCrs && extentCrs.isValid() )
266 {
267 foundCrs = true;
268 crs = extentCrs;
269 }
270 }
271 else if ( def->type() == QgsProcessingParameterPoint::typeName() )
272 {
274 if ( foundCrs && pointCrs.isValid() && crs != pointCrs )
275 {
276 return false;
277 }
278 else if ( !foundCrs && pointCrs.isValid() )
279 {
280 foundCrs = true;
281 crs = pointCrs;
282 }
283 }
284 else if ( def->type() == QgsProcessingParameterGeometry::typeName() )
285 {
287 if ( foundCrs && geomCrs.isValid() && crs != geomCrs )
288 {
289 return false;
290 }
291 else if ( !foundCrs && geomCrs.isValid() )
292 {
293 foundCrs = true;
294 crs = geomCrs;
295 }
296 }
297
298 }
299 return true;
300}
301
302QString QgsProcessingAlgorithm::asPythonCommand( const QVariantMap &parameters, QgsProcessingContext &context ) const
303{
304 QString s = QStringLiteral( "processing.run(\"%1\"," ).arg( id() );
305
306 QStringList parts;
307 for ( const QgsProcessingParameterDefinition *def : mParameters )
308 {
309 if ( def->flags() & Qgis::ProcessingParameterFlag::Hidden )
310 continue;
311
312 if ( !parameters.contains( def->name() ) )
313 continue;
314
315 parts << QStringLiteral( "'%1':%2" ).arg( def->name(), def->valueAsPythonString( parameters.value( def->name() ), context ) );
316 }
317
318 s += QStringLiteral( " {%1})" ).arg( parts.join( ',' ) );
319 return s;
320}
321
322QString QgsProcessingAlgorithm::asQgisProcessCommand( const QVariantMap &parameters, QgsProcessingContext &context, bool &ok ) const
323{
324 ok = true;
325 QStringList parts;
326 parts.append( QStringLiteral( "qgis_process" ) );
327 parts.append( QStringLiteral( "run" ) );
328 parts.append( id() );
329
331 // we only include the project path argument if a project is actually required by the algorithm
334
335 parts.append( context.asQgisProcessArguments( argumentFlags ) );
336
337 auto escapeIfNeeded = []( const QString & input ) -> QString
338 {
339 // play it safe and escape everything UNLESS it's purely alphanumeric characters (and a very select scattering of other common characters!)
340 const thread_local QRegularExpression nonAlphaNumericRx( QStringLiteral( "[^a-zA-Z0-9.\\-/_]" ) );
341 if ( nonAlphaNumericRx.match( input ).hasMatch() )
342 {
343 QString escaped = input;
344 escaped.replace( '\'', QLatin1String( "'\\''" ) );
345 return QStringLiteral( "'%1'" ).arg( escaped );
346 }
347 else
348 {
349 return input;
350 }
351 };
352
353 for ( const QgsProcessingParameterDefinition *def : mParameters )
354 {
355 if ( def->flags() & Qgis::ProcessingParameterFlag::Hidden )
356 continue;
357
358 if ( !parameters.contains( def->name() ) )
359 continue;
360
361 const QStringList partValues = def->valueAsStringList( parameters.value( def->name() ), context, ok );
362 if ( !ok )
363 return QString();
364
365 for ( const QString &partValue : partValues )
366 {
367 parts << QStringLiteral( "--%1=%2" ).arg( def->name(), escapeIfNeeded( partValue ) );
368 }
369 }
370
371 return parts.join( ' ' );
372}
373
374QVariantMap QgsProcessingAlgorithm::asMap( const QVariantMap &parameters, QgsProcessingContext &context ) const
375{
376 QVariantMap properties = context.exportToMap();
377
378 // we only include the project path argument if a project is actually required by the algorithm
380 properties.remove( QStringLiteral( "project_path" ) );
381
382 QVariantMap paramValues;
383 for ( const QgsProcessingParameterDefinition *def : mParameters )
384 {
385 if ( def->flags() & Qgis::ProcessingParameterFlag::Hidden )
386 continue;
387
388 if ( !parameters.contains( def->name() ) )
389 continue;
390
391 paramValues.insert( def->name(), def->valueAsJsonObject( parameters.value( def->name() ), context ) );
392 }
393
394 properties.insert( QStringLiteral( "inputs" ), paramValues );
395 return properties;
396}
397
399{
400 return addParameter( std::unique_ptr<QgsProcessingParameterDefinition>( definition ), createOutput );
401}
402
403bool QgsProcessingAlgorithm::addParameter( std::unique_ptr<QgsProcessingParameterDefinition> definition, bool createOutput )
404{
405 if ( !definition )
406 return false;
407
408 // check for duplicate named parameters
409 const QgsProcessingParameterDefinition *existingDef = QgsProcessingAlgorithm::parameterDefinition( definition->name() );
410 if ( existingDef && existingDef->name() == definition->name() ) // parameterDefinition is case-insensitive, but we DO allow case-different duplicate names
411 {
412 QgsMessageLog::logMessage( QObject::tr( "Duplicate parameter %1 registered for alg %2" ).arg( definition->name(), id() ), QObject::tr( "Processing" ) );
413 return false;
414 }
415
416 if ( definition->isDestination() && mProvider )
417 {
418 QgsProcessingDestinationParameter *destParam = static_cast< QgsProcessingDestinationParameter *>( definition.get() );
419 if ( !mProvider->supportsNonFileBasedOutput() )
420 destParam->setSupportsNonFileBasedOutput( false );
421 }
422
423 definition->mAlgorithm = this;
424 mParameters << definition.release();
425 const QgsProcessingParameterDefinition *definitionRawPtr = mParameters.back();
426
427 if ( createOutput )
428 return createAutoOutputForParameter( definitionRawPtr );
429 else
430 return true;
431}
432
434{
436 if ( def )
437 {
438 delete def;
439 mParameters.removeAll( def );
440
441 // remove output automatically created when adding parameter
443 if ( outputDef && outputDef->autoCreated() )
444 {
445 delete outputDef;
446 mOutputs.removeAll( outputDef );
447 }
448 }
449}
450
452{
453 return addOutput( std::unique_ptr<QgsProcessingOutputDefinition>( definition ) );
454}
455
456bool QgsProcessingAlgorithm::addOutput( std::unique_ptr<QgsProcessingOutputDefinition> definition )
457{
458 if ( !definition )
459 return false;
460
461 // check for duplicate named outputs
462 if ( QgsProcessingAlgorithm::outputDefinition( definition->name() ) )
463 {
464 QgsMessageLog::logMessage( QObject::tr( "Duplicate output %1 registered for alg %2" ).arg( definition->name(), id() ), QObject::tr( "Processing" ) );
465 return false;
466 }
467
468 mOutputs << definition.release();
469 return true;
470}
471
473{
474 return true;
475}
476
481
483{
484 // first pass - case sensitive match
485 for ( const QgsProcessingParameterDefinition *def : mParameters )
486 {
487 if ( def->name() == name )
488 return def;
489 }
490
491 // second pass - case insensitive
492 for ( const QgsProcessingParameterDefinition *def : mParameters )
493 {
494 if ( def->name().compare( name, Qt::CaseInsensitive ) == 0 )
495 return def;
496 }
497 return nullptr;
498}
499
501{
502 int count = 0;
503 for ( const QgsProcessingParameterDefinition *def : mParameters )
504 {
505 if ( !( def->flags() & Qgis::ProcessingParameterFlag::Hidden ) )
506 count++;
507 }
508 return count;
509}
510
512{
514 for ( const QgsProcessingParameterDefinition *def : mParameters )
515 {
516 if ( def->isDestination() )
517 result << def;
518 }
519 return result;
520}
521
523{
524 for ( const QgsProcessingOutputDefinition *def : mOutputs )
525 {
526 if ( def->name().compare( name, Qt::CaseInsensitive ) == 0 )
527 return def;
528 }
529 return nullptr;
530}
531
533{
534 for ( const QgsProcessingOutputDefinition *def : mOutputs )
535 {
536 if ( def->type() == QLatin1String( "outputHtml" ) )
537 return true;
538 }
539 return false;
540}
541
542QgsProcessingAlgorithm::VectorProperties QgsProcessingAlgorithm::sinkProperties( const QString &, const QVariantMap &, QgsProcessingContext &, const QMap<QString, QgsProcessingAlgorithm::VectorProperties> & ) const
543{
544 return VectorProperties();
545}
546
547QVariantMap QgsProcessingAlgorithm::run( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback, bool *ok, const QVariantMap &configuration, bool catchExceptions ) const
548{
549 std::unique_ptr< QgsProcessingAlgorithm > alg( create( configuration ) );
550 if ( ok )
551 *ok = false;
552
553 bool res = alg->prepare( parameters, context, feedback );
554 if ( !res )
555 return QVariantMap();
556
557 QVariantMap runRes;
558 bool success = false;
559 try
560 {
561 runRes = alg->runPrepared( parameters, context, feedback );
562 success = true;
563 }
564 catch ( QgsProcessingException &e )
565 {
566 if ( !catchExceptions )
567 {
568 alg->postProcess( context, feedback, false );
569 throw e;
570 }
571
572 QgsMessageLog::logMessage( e.what(), QObject::tr( "Processing" ), Qgis::MessageLevel::Critical );
573 feedback->reportError( e.what() );
574 }
575
576 if ( ok )
577 *ok = success;
578
579 QVariantMap ppRes = alg->postProcess( context, feedback, success );
580 if ( !ppRes.isEmpty() )
581 return ppRes;
582 else
583 return runRes;
584}
585
586bool QgsProcessingAlgorithm::prepare( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
587{
588 // cppcheck-suppress assertWithSideEffect
589 Q_ASSERT_X( QThread::currentThread() == context.temporaryLayerStore()->thread(), "QgsProcessingAlgorithm::prepare", "prepare() must be called from the same thread as context was created in" );
590 Q_ASSERT_X( !mHasPrepared, "QgsProcessingAlgorithm::prepare", "prepare() has already been called for the algorithm instance" );
591 try
592 {
593 mHasPrepared = prepareAlgorithm( parameters, context, feedback );
594 return mHasPrepared;
595 }
596 catch ( QgsProcessingException &e )
597 {
598 QgsMessageLog::logMessage( e.what(), QObject::tr( "Processing" ), Qgis::MessageLevel::Critical );
599 feedback->reportError( e.what() );
600 return false;
601 }
602}
603
604QVariantMap QgsProcessingAlgorithm::runPrepared( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
605{
606 Q_ASSERT_X( mHasPrepared, "QgsProcessingAlgorithm::runPrepared", QStringLiteral( "prepare() was not called for the algorithm instance %1" ).arg( name() ).toLatin1() );
607 Q_ASSERT_X( !mHasExecuted, "QgsProcessingAlgorithm::runPrepared", "runPrepared() was already called for this algorithm instance" );
608
609 // Hey kids, let's all be thread safe! It's the fun thing to do!
610 //
611 // First, let's see if we're going to run into issues.
612 QgsProcessingContext *runContext = nullptr;
613 if ( context.thread() == QThread::currentThread() )
614 {
615 // OH. No issues. Seems you're running everything in the same thread, so go about your business. Sorry about
616 // the intrusion, we're just making sure everything's nice and safe here. We like to keep a clean and tidy neighbourhood,
617 // you know, for the kids and dogs and all.
618 runContext = &context;
619 }
620 else
621 {
622 // HA! I knew things looked a bit suspicious - seems you're running this algorithm in a different thread
623 // from that which the passed context has an affinity for. That's fine and all, but we need to make sure
624 // we proceed safely...
625
626 // So first we create a temporary local context with affinity for the current thread
627 mLocalContext.reset( new QgsProcessingContext() );
628 // copy across everything we can safely do from the passed context
629 mLocalContext->copyThreadSafeSettings( context );
630
631 // and we'll run the actual algorithm processing using the local thread safe context
632 runContext = mLocalContext.get();
633 }
634
635 std::unique_ptr< QgsProcessingModelInitialRunConfig > modelConfig = context.takeModelInitialRunConfig();
636 if ( modelConfig )
637 {
638 std::unique_ptr< QgsMapLayerStore > modelPreviousLayerStore = modelConfig->takePreviousLayerStore();
639 if ( modelPreviousLayerStore )
640 {
641 // move layers from previous layer store to context's temporary layer store, in a thread-safe way
642 Q_ASSERT_X( !modelPreviousLayerStore->thread(), "QgsProcessingAlgorithm::runPrepared", "QgsProcessingModelConfig::modelPreviousLayerStore must have been pushed to a nullptr thread" );
643 modelPreviousLayerStore->moveToThread( QThread::currentThread() );
644 runContext->temporaryLayerStore()->transferLayersFromStore( modelPreviousLayerStore.get() );
645 }
646 runContext->setModelInitialRunConfig( std::move( modelConfig ) );
647 }
648
649 mHasExecuted = true;
650 try
651 {
652 QVariantMap runResults = processAlgorithm( parameters, *runContext, feedback );
653
654 if ( mLocalContext )
655 {
656 // ok, time to clean things up. We need to push the temporary context back into
657 // the thread that the passed context is associated with (we can only push from the
658 // current thread, so we HAVE to do this here)
659 mLocalContext->pushToThread( context.thread() );
660 }
661 return runResults;
662 }
663 catch ( QgsProcessingException & )
664 {
665 if ( mLocalContext )
666 {
667 // see above!
668 mLocalContext->pushToThread( context.thread() );
669 }
670 //rethrow
671 throw;
672 }
673}
674
676{
677 // cppcheck-suppress assertWithSideEffect
678 Q_ASSERT_X( QThread::currentThread() == context.temporaryLayerStore()->thread(), "QgsProcessingAlgorithm::postProcess", "postProcess() must be called from the same thread the context was created in" );
679 Q_ASSERT_X( mHasExecuted, "QgsProcessingAlgorithm::postProcess", QStringLiteral( "algorithm instance %1 was not executed" ).arg( name() ).toLatin1() );
680 Q_ASSERT_X( !mHasPostProcessed, "QgsProcessingAlgorithm::postProcess", "postProcess() was already called for this algorithm instance" );
681
682 if ( mLocalContext )
683 {
684 // algorithm was processed using a temporary thread safe context. So now we need
685 // to take the results from that temporary context, and smash them into the passed
686 // context
687 context.takeResultsFrom( *mLocalContext );
688 // now get lost, we don't need you anymore
689 mLocalContext.reset();
690 }
691
692 mHasPostProcessed = true;
693 if ( runResult )
694 {
695 try
696 {
697 return postProcessAlgorithm( context, feedback );
698 }
699 catch ( QgsProcessingException &e )
700 {
701 QgsMessageLog::logMessage( e.what(), QObject::tr( "Processing" ), Qgis::MessageLevel::Critical );
702 feedback->reportError( e.what() );
703 return QVariantMap();
704 }
705 }
706 else
707 {
708 return QVariantMap();
709 }
710}
711
712QString QgsProcessingAlgorithm::parameterAsString( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
713{
715}
716
717QString QgsProcessingAlgorithm::parameterAsExpression( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
718{
720}
721
722double QgsProcessingAlgorithm::parameterAsDouble( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
723{
725}
726
727int QgsProcessingAlgorithm::parameterAsInt( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
728{
729 return QgsProcessingParameters::parameterAsInt( parameterDefinition( name ), parameters, context );
730}
731
732QList<int> QgsProcessingAlgorithm::parameterAsInts( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
733{
734 return QgsProcessingParameters::parameterAsInts( parameterDefinition( name ), parameters, context );
735}
736
737int QgsProcessingAlgorithm::parameterAsEnum( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
738{
739 return QgsProcessingParameters::parameterAsEnum( parameterDefinition( name ), parameters, context );
740}
741
742QList<int> QgsProcessingAlgorithm::parameterAsEnums( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
743{
745}
746
747QString QgsProcessingAlgorithm::parameterAsEnumString( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
748{
750}
751
752QStringList QgsProcessingAlgorithm::parameterAsEnumStrings( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
753{
755}
756
757bool QgsProcessingAlgorithm::parameterAsBool( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
758{
759 return QgsProcessingParameters::parameterAsBool( parameterDefinition( name ), parameters, context );
760}
761
762bool QgsProcessingAlgorithm::parameterAsBoolean( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
763{
764 return QgsProcessingParameters::parameterAsBool( parameterDefinition( name ), parameters, context );
765}
766
767QgsFeatureSink *QgsProcessingAlgorithm::parameterAsSink( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, QString &destinationIdentifier, const QgsFields &fields, Qgis::WkbType geometryType, const QgsCoordinateReferenceSystem &crs, QgsFeatureSink::SinkFlags sinkFlags, const QVariantMap &createOptions, const QStringList &datasourceOptions, const QStringList &layerOptions ) const
768{
769 if ( !parameterDefinition( name ) )
770 throw QgsProcessingException( QObject::tr( "No parameter definition for the sink '%1'" ).arg( name ) );
771
772 return QgsProcessingParameters::parameterAsSink( parameterDefinition( name ), parameters, fields, geometryType, crs, context, destinationIdentifier, sinkFlags, createOptions, datasourceOptions, layerOptions );
773}
774
775QgsProcessingFeatureSource *QgsProcessingAlgorithm::parameterAsSource( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
776{
778}
779
780QString QgsProcessingAlgorithm::parameterAsCompatibleSourceLayerPath( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QStringList &compatibleFormats, const QString &preferredFormat, QgsProcessingFeedback *feedback ) const
781{
782 return QgsProcessingParameters::parameterAsCompatibleSourceLayerPath( parameterDefinition( name ), parameters, context, compatibleFormats, preferredFormat, feedback );
783}
784
785QString QgsProcessingAlgorithm::parameterAsCompatibleSourceLayerPathAndLayerName( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QStringList &compatibleFormats, const QString &preferredFormat, QgsProcessingFeedback *feedback, QString *layerName ) const
786{
787 return QgsProcessingParameters::parameterAsCompatibleSourceLayerPathAndLayerName( parameterDefinition( name ), parameters, context, compatibleFormats, preferredFormat, feedback, layerName );
788}
789
790QgsMapLayer *QgsProcessingAlgorithm::parameterAsLayer( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
791{
793}
794
795QgsRasterLayer *QgsProcessingAlgorithm::parameterAsRasterLayer( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
796{
798}
799
800QgsMeshLayer *QgsProcessingAlgorithm::parameterAsMeshLayer( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
801{
803}
804
805QString QgsProcessingAlgorithm::parameterAsOutputLayer( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
806{
808}
809
810QString QgsProcessingAlgorithm::parameterAsFileOutput( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
811{
813}
814
815QgsVectorLayer *QgsProcessingAlgorithm::parameterAsVectorLayer( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
816{
818}
819
820QgsCoordinateReferenceSystem QgsProcessingAlgorithm::parameterAsCrs( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
821{
822 return QgsProcessingParameters::parameterAsCrs( parameterDefinition( name ), parameters, context );
823}
824
825QgsCoordinateReferenceSystem QgsProcessingAlgorithm::parameterAsExtentCrs( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
826{
828}
829
830QgsRectangle QgsProcessingAlgorithm::parameterAsExtent( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs ) const
831{
833}
834
835QgsGeometry QgsProcessingAlgorithm::parameterAsExtentGeometry( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs ) const
836{
838}
839
840QgsPointXY QgsProcessingAlgorithm::parameterAsPoint( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs ) const
841{
843}
844
845QgsCoordinateReferenceSystem QgsProcessingAlgorithm::parameterAsPointCrs( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
846{
848}
849
850QgsGeometry QgsProcessingAlgorithm::parameterAsGeometry( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs ) const
851{
853}
854
855QgsCoordinateReferenceSystem QgsProcessingAlgorithm::parameterAsGeometryCrs( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
856{
858}
859
860QString QgsProcessingAlgorithm::parameterAsFile( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
861{
862 return QgsProcessingParameters::parameterAsFile( parameterDefinition( name ), parameters, context );
863}
864
865QVariantList QgsProcessingAlgorithm::parameterAsMatrix( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
866{
868}
869
870QList<QgsMapLayer *> QgsProcessingAlgorithm::parameterAsLayerList( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, QgsProcessing::LayerOptionsFlags flags ) const
871{
873}
874
875QStringList QgsProcessingAlgorithm::parameterAsFileList( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
876{
878}
879
880QList<double> QgsProcessingAlgorithm::parameterAsRange( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
881{
883}
884
885QStringList QgsProcessingAlgorithm::parameterAsFields( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
886{
888}
889
890QStringList QgsProcessingAlgorithm::parameterAsStrings( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
891{
893}
894
895QgsPrintLayout *QgsProcessingAlgorithm::parameterAsLayout( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context )
896{
898}
899
900QgsLayoutItem *QgsProcessingAlgorithm::parameterAsLayoutItem( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, QgsPrintLayout *layout )
901{
902 return QgsProcessingParameters::parameterAsLayoutItem( parameterDefinition( name ), parameters, context, layout );
903}
904
905QColor QgsProcessingAlgorithm::parameterAsColor( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
906{
908}
909
910QString QgsProcessingAlgorithm::parameterAsConnectionName( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
911{
913}
914
915QDateTime QgsProcessingAlgorithm::parameterAsDateTime( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
916{
918}
919
920QString QgsProcessingAlgorithm::parameterAsSchema( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
921{
923}
924
925QString QgsProcessingAlgorithm::parameterAsDatabaseTableName( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
926{
928}
929
931{
933}
934
935QgsAnnotationLayer *QgsProcessingAlgorithm::parameterAsAnnotationLayer( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
936{
938}
939
940QString QgsProcessingAlgorithm::invalidSourceError( const QVariantMap &parameters, const QString &name )
941{
942 if ( !parameters.contains( name ) )
943 return QObject::tr( "Could not load source layer for %1: no value specified for parameter" ).arg( name );
944 else
945 {
946 QVariant var = parameters.value( name );
947 if ( var.userType() == qMetaTypeId<QgsProcessingFeatureSourceDefinition>() )
948 {
949 QgsProcessingFeatureSourceDefinition fromVar = qvariant_cast<QgsProcessingFeatureSourceDefinition>( var );
950 var = fromVar.source;
951 }
952 else if ( var.userType() == qMetaTypeId<QgsProcessingOutputLayerDefinition>() )
953 {
954 QgsProcessingOutputLayerDefinition fromVar = qvariant_cast<QgsProcessingOutputLayerDefinition>( var );
955 var = fromVar.sink;
956 }
957 if ( var.userType() == qMetaTypeId<QgsProperty>() )
958 {
959 QgsProperty p = var.value< QgsProperty >();
961 {
962 var = p.staticValue();
963 }
964 }
965 if ( !var.toString().isEmpty() )
966 return QObject::tr( "Could not load source layer for %1: %2 not found" ).arg( name, var.toString() );
967 else
968 return QObject::tr( "Could not load source layer for %1: invalid value" ).arg( name );
969 }
970}
971
972QString QgsProcessingAlgorithm::invalidRasterError( const QVariantMap &parameters, const QString &name )
973{
974 if ( !parameters.contains( name ) )
975 return QObject::tr( "Could not load source layer for %1: no value specified for parameter" ).arg( name );
976 else
977 {
978 QVariant var = parameters.value( name );
979 if ( var.userType() == qMetaTypeId<QgsProperty>() )
980 {
981 QgsProperty p = var.value< QgsProperty >();
983 {
984 var = p.staticValue();
985 }
986 }
987 if ( !var.toString().isEmpty() )
988 return QObject::tr( "Could not load source layer for %1: %2 not found" ).arg( name, var.toString() );
989 else
990 return QObject::tr( "Could not load source layer for %1: invalid value" ).arg( name );
991 }
992}
993
994QString QgsProcessingAlgorithm::invalidSinkError( const QVariantMap &parameters, const QString &name )
995{
996 if ( !parameters.contains( name ) )
997 return QObject::tr( "Could not create destination layer for %1: no value specified for parameter" ).arg( name );
998 else
999 {
1000 QVariant var = parameters.value( name );
1001 if ( var.userType() == qMetaTypeId<QgsProcessingOutputLayerDefinition>() )
1002 {
1003 QgsProcessingOutputLayerDefinition fromVar = qvariant_cast<QgsProcessingOutputLayerDefinition>( var );
1004 var = fromVar.sink;
1005 }
1006 if ( var.userType() == qMetaTypeId<QgsProperty>() )
1007 {
1008 QgsProperty p = var.value< QgsProperty >();
1010 {
1011 var = p.staticValue();
1012 }
1013 }
1014 if ( !var.toString().isEmpty() )
1015 return QObject::tr( "Could not create destination layer for %1: %2" ).arg( name, var.toString() );
1016 else
1017 return QObject::tr( "Could not create destination layer for %1: invalid value" ).arg( name );
1018 }
1019}
1020
1021QString QgsProcessingAlgorithm::invalidPointCloudError( const QVariantMap &parameters, const QString &name )
1022{
1023 if ( !parameters.contains( name ) )
1024 return QObject::tr( "Could not load source layer for %1: no value specified for parameter" ).arg( name );
1025 else
1026 {
1027 QVariant var = parameters.value( name );
1028 if ( var.userType() == qMetaTypeId<QgsProperty>() )
1029 {
1030 QgsProperty p = var.value< QgsProperty >();
1032 {
1033 var = p.staticValue();
1034 }
1035 }
1036 if ( !var.toString().isEmpty() )
1037 return QObject::tr( "Could not load source layer for %1: %2 not found" ).arg( name, var.toString() );
1038 else
1039 return QObject::tr( "Could not load source layer for %1: invalid value" ).arg( name );
1040 }
1041}
1042
1043QString QgsProcessingAlgorithm::writeFeatureError( QgsFeatureSink *sink, const QVariantMap &parameters, const QString &name )
1044{
1045 Q_UNUSED( sink );
1046 Q_UNUSED( parameters );
1047 if ( !name.isEmpty() )
1048 return QObject::tr( "Could not write feature into %1" ).arg( name );
1049 else
1050 return QObject::tr( "Could not write feature" );
1051}
1052
1054{
1055 Q_UNUSED( layer )
1056 return false;
1057}
1058
1059
1060bool QgsProcessingAlgorithm::createAutoOutputForParameter( const QgsProcessingParameterDefinition *parameter )
1061{
1062 if ( !parameter->isDestination() )
1063 return true; // nothing created, but nothing went wrong - so return true
1064
1065 const QgsProcessingDestinationParameter *dest = static_cast< const QgsProcessingDestinationParameter * >( parameter );
1067 if ( !output )
1068 return true; // nothing created - but nothing went wrong - so return true
1069 output->setAutoCreated( true );
1070
1071 if ( !addOutput( output ) )
1072 {
1073 // couldn't add output - probably a duplicate name
1074 return false;
1075 }
1076 else
1077 {
1078 return true;
1079 }
1080}
1081
1082
1083//
1084// QgsProcessingFeatureBasedAlgorithm
1085//
1086
1093
1095{
1097 initParameters( config );
1098 addParameter( new QgsProcessingParameterFeatureSink( QStringLiteral( "OUTPUT" ), outputName(), outputLayerType(), QVariant(), false, true, true ) );
1099}
1100
1102{
1103 return QStringLiteral( "INPUT" );
1104}
1105
1107{
1108 return QObject::tr( "Input layer" );
1109}
1110
1112{
1113 return QList<int>();
1114}
1115
1120
1125
1130
1132{
1133 return inputWkbType;
1134}
1135
1137{
1138 return inputFields;
1139}
1140
1145
1147{
1148}
1149
1151{
1152 if ( mSource )
1153 return mSource->sourceCrs();
1154 else
1156}
1157
1158QVariantMap QgsProcessingFeatureBasedAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
1159{
1160 prepareSource( parameters, context );
1161 QString dest;
1162 std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest,
1163 outputFields( mSource->fields() ),
1164 outputWkbType( mSource->wkbType() ),
1165 outputCrs( mSource->sourceCrs() ),
1166 sinkFlags() ) );
1167 if ( !sink )
1168 throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) );
1169
1170 // prepare expression context for feature iteration
1171 QgsExpressionContext prevContext = context.expressionContext();
1172 QgsExpressionContext algContext = prevContext;
1173
1174 algContext.appendScopes( createExpressionContext( parameters, context, mSource.get() ).takeScopes() );
1175 context.setExpressionContext( algContext );
1176
1177 long count = mSource->featureCount();
1178
1179 QgsFeature f;
1180 QgsFeatureIterator it = mSource->getFeatures( request(), sourceFlags() );
1181
1182 double step = count > 0 ? 100.0 / count : 1;
1183 int current = 0;
1184 while ( it.nextFeature( f ) )
1185 {
1186 if ( feedback->isCanceled() )
1187 {
1188 break;
1189 }
1190
1191 context.expressionContext().setFeature( f );
1192 const QgsFeatureList transformed = processFeature( f, context, feedback );
1193 for ( QgsFeature transformedFeature : transformed )
1194 sink->addFeature( transformedFeature, QgsFeatureSink::FastInsert );
1195
1196 feedback->setProgress( current * step );
1197 current++;
1198 }
1199
1200 sink->finalize();
1201
1202 mSource.reset();
1203
1204 // probably not necessary - context's aren't usually recycled, but can't hurt
1205 context.setExpressionContext( prevContext );
1206
1207 QVariantMap outputs;
1208 outputs.insert( QStringLiteral( "OUTPUT" ), dest );
1209 return outputs;
1210}
1211
1216
1218{
1219 const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l );
1220 if ( !layer )
1221 return false;
1222
1223 Qgis::GeometryType inPlaceGeometryType = layer->geometryType();
1224 if ( !inputLayerTypes().empty() &&
1225 !inputLayerTypes().contains( static_cast< int >( Qgis::ProcessingSourceType::Vector ) ) &&
1226 !inputLayerTypes().contains( static_cast< int >( Qgis::ProcessingSourceType::VectorAnyGeometry ) ) &&
1227 ( ( inPlaceGeometryType == Qgis::GeometryType::Polygon && !inputLayerTypes().contains( static_cast< int >( Qgis::ProcessingSourceType::VectorPolygon ) ) ) ||
1228 ( inPlaceGeometryType == Qgis::GeometryType::Line && !inputLayerTypes().contains( static_cast< int >( Qgis::ProcessingSourceType::VectorLine ) ) ) ||
1229 ( inPlaceGeometryType == Qgis::GeometryType::Point && !inputLayerTypes().contains( static_cast< int >( Qgis::ProcessingSourceType::VectorPoint ) ) ) ) )
1230 return false;
1231
1233 if ( inPlaceGeometryType == Qgis::GeometryType::Point )
1234 type = Qgis::WkbType::Point;
1235 else if ( inPlaceGeometryType == Qgis::GeometryType::Line )
1237 else if ( inPlaceGeometryType == Qgis::GeometryType::Polygon )
1239
1240 if ( QgsWkbTypes::geometryType( outputWkbType( type ) ) != inPlaceGeometryType )
1241 return false;
1242
1243 return true;
1244}
1245
1247{
1248 if ( ! mSource )
1249 {
1250 mSource.reset( parameterAsSource( parameters, inputParameterName(), context ) );
1251 if ( !mSource )
1253 }
1254}
1255
1256
1257QgsProcessingAlgorithm::VectorProperties QgsProcessingFeatureBasedAlgorithm::sinkProperties( const QString &sink, const QVariantMap &parameters, QgsProcessingContext &context, const QMap<QString, QgsProcessingAlgorithm::VectorProperties> &sourceProperties ) const
1258{
1260 if ( sink == QLatin1String( "OUTPUT" ) )
1261 {
1262 if ( sourceProperties.value( QStringLiteral( "INPUT" ) ).availability == Qgis::ProcessingPropertyAvailability::Available )
1263 {
1264 const VectorProperties inputProps = sourceProperties.value( QStringLiteral( "INPUT" ) );
1265 result.fields = outputFields( inputProps.fields );
1266 result.crs = outputCrs( inputProps.crs );
1267 result.wkbType = outputWkbType( inputProps.wkbType );
1269 return result;
1270 }
1271 else
1272 {
1273 std::unique_ptr< QgsProcessingFeatureSource > source( parameterAsSource( parameters, QStringLiteral( "INPUT" ), context ) );
1274 if ( source )
1275 {
1276 result.fields = outputFields( source->fields() );
1277 result.crs = outputCrs( source->sourceCrs() );
1278 result.wkbType = outputWkbType( source->wkbType() );
1280 return result;
1281 }
1282 }
1283 }
1284 return result;
1285}
1286
ProcessingSourceType
Processing data source types.
Definition qgis.h:3399
@ Vector
Tables (i.e. vector layers with or without geometry). When used for a sink this indicates the sink ha...
@ VectorAnyGeometry
Any vector layer with geometry.
@ VectorPoint
Vector point layers.
@ VectorPolygon
Vector polygon layers.
@ VectorLine
Vector line layers.
ProcessingMode
Types of modes which Processing widgets can be created for.
Definition qgis.h:3537
@ Critical
Critical/error message.
Definition qgis.h:157
@ Static
Static property.
@ Available
Properties are available.
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
Definition qgis.h:337
@ Polygon
Polygons.
QFlags< ProcessingAlgorithmFlag > ProcessingAlgorithmFlags
Flags indicating how and when an algorithm operates and should be exposed to users.
Definition qgis.h:3476
QFlags< ProcessingAlgorithmDocumentationFlag > ProcessingAlgorithmDocumentationFlags
Flags describing algorithm behavior for documentation purposes.
Definition qgis.h:3496
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:256
@ LineString
LineString.
@ Polygon
Polygon.
@ Unknown
Unknown.
@ SupportsBatch
Algorithm supports batch mode.
@ SupportsInPlaceEdits
Algorithm supports in-place editing.
@ RequiresMatchingCrs
Algorithm requires that all input layers have matching coordinate reference systems.
@ CanCancel
Algorithm can be canceled.
@ RequiresProject
The algorithm requires that a valid QgsProject is available from the processing context in order to e...
@ Hidden
Parameter is hidden and should not be shown to users.
QFlags< ProcessingFeatureSourceFlag > ProcessingFeatureSourceFlags
Flags which control how QgsProcessingFeatureSource fetches features.
Definition qgis.h:3588
Represents a map layer containing a set of georeferenced annotations, e.g.
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
static QString iconPath(const QString &iconFile)
Returns path to the desired icon file.
Represents a coordinate reference system (CRS).
bool isValid() const
Returns whether this CRS is correctly initialized and usable.
QString what() const
Single scope for storing variables and functions for use within a QgsExpressionContext.
static QgsExpressionContextScope * processingAlgorithmScope(const QgsProcessingAlgorithm *algorithm, const QVariantMap &parameters, QgsProcessingContext &context)
Creates a new scope which contains variables and functions relating to a processing algorithm,...
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
QList< QgsExpressionContextScope * > takeScopes()
Returns all scopes from this context and remove them, leaving this context without any context.
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
void appendScopes(const QList< QgsExpressionContextScope * > &scopes)
Appends a list of scopes to the end of the context.
Wrapper for iterator of features from vector data provider or vector layer.
bool nextFeature(QgsFeature &f)
Fetch next feature and stores in f, returns true on success.
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
@ FastInsert
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition qgsfeature.h:58
bool isCanceled() const
Tells whether the operation has been canceled already.
Definition qgsfeedback.h:53
void setProgress(double progress)
Sets the current progress for the feedback object.
Definition qgsfeedback.h:61
Container of fields for a vector layer.
Definition qgsfields.h:46
A geometry is the spatial representation of a feature.
Base class for graphical items within a QgsLayout.
void transferLayersFromStore(QgsMapLayerStore *other)
Transfers all the map layers contained within another map layer store and adds them to this store.
Base class for all map layer types.
Definition qgsmaplayer.h:77
QgsCoordinateReferenceSystem crs
Definition qgsmaplayer.h:84
Represents a mesh layer supporting display of data on structured or unstructured meshes.
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true, const char *file=__builtin_FILE(), const char *function=__builtin_FUNCTION(), int line=__builtin_LINE())
Adds a message to the log instance (and creates it if necessary).
Represents a map layer supporting display of point clouds.
Represents a 2D point.
Definition qgspointxy.h:60
Print layout, a QgsLayout subclass for static or atlas-based layouts.
Abstract base class for processing algorithms.
QString parameterAsCompatibleSourceLayerPath(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QStringList &compatibleFormats, const QString &preferredFormat=QString("shp"), QgsProcessingFeedback *feedback=nullptr) const
Evaluates the parameter with matching name to a source vector layer file path of compatible format.
QString parameterAsConnectionName(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a connection name string.
const QgsProcessingOutputDefinition * outputDefinition(const QString &name) const
Returns a matching output by name.
QString parameterAsCompatibleSourceLayerPathAndLayerName(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QStringList &compatibleFormats, const QString &preferredFormat=QString("shp"), QgsProcessingFeedback *feedback=nullptr, QString *layerName=nullptr) const
Evaluates the parameter with matching name to a source vector layer file path and layer name of compa...
QStringList parameterAsStrings(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a list of strings (e.g.
QgsGeometry parameterAsExtentGeometry(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs=QgsCoordinateReferenceSystem()) const
Evaluates the parameter with matching name to a rectangular extent, and returns a geometry covering t...
virtual QgsProcessingAlgorithm * createInstance() const =0
Creates a new instance of the algorithm class.
QgsMapLayer * parameterAsLayer(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a map layer.
QgsRasterLayer * parameterAsRasterLayer(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a raster layer.
virtual bool prepareAlgorithm(const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback)
Prepares the algorithm to run using the specified parameters.
int parameterAsInt(const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context) const
Evaluates the parameter with matching name to a static integer value.
virtual QString helpUrl() const
Returns a url pointing to the algorithm's help page.
virtual QVariantMap autogenerateParameterValues(const QVariantMap &existingParameters, const QString &changedParameter, Qgis::ProcessingMode mode) const
Returns a map of default auto-generated parameters to fill in, based on existing parameters.
int parameterAsEnum(const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context) const
Evaluates the parameter with matching name to a enum value.
void setProvider(QgsProcessingProvider *provider)
Associates this algorithm with its provider.
virtual QIcon icon() const
Returns an icon for the algorithm.
virtual QString shortHelpString() const
Returns a localised short helper string for the algorithm.
virtual bool validateInputCrs(const QVariantMap &parameters, QgsProcessingContext &context) const
Checks whether the coordinate reference systems for the specified set of parameters are valid for the...
virtual Qgis::ProcessingAlgorithmFlags flags() const
Returns the flags indicating how and when the algorithm operates and should be exposed to users.
virtual QString shortDescription() const
Returns an optional translated short description of the algorithm.
Q_DECL_DEPRECATED QStringList parameterAsFields(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a list of fields.
QgsProcessingFeatureSource * parameterAsSource(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a feature source.
int countVisibleParameters() const
Returns the number of visible (non-hidden) parameters defined by this algorithm.
QString parameterAsFile(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a file/folder name.
QString id() const
Returns the unique ID for the algorithm, which is a combination of the algorithm provider's ID and th...
virtual QVariantMap preprocessParameters(const QVariantMap &parameters)
Pre-processes a set of parameters, allowing the algorithm to clean their values.
static QString invalidRasterError(const QVariantMap &parameters, const QString &name)
Returns a user-friendly string to use as an error when a raster layer input could not be loaded.
QgsVectorLayer * parameterAsVectorLayer(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a vector layer.
static QString writeFeatureError(QgsFeatureSink *sink, const QVariantMap &parameters, const QString &name)
Returns a user-friendly string to use as an error when a feature cannot be written into a sink.
QStringList parameterAsFileList(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a list of files (for QgsProcessingParameterMultipleLaye...
QVariantMap postProcess(QgsProcessingContext &context, QgsProcessingFeedback *feedback, bool runResult=true)
Should be called in the main thread following the completion of runPrepared().
bool prepare(const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback)
Prepares the algorithm for execution.
QString parameterAsDatabaseTableName(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a database table name string.
QString parameterAsExpression(const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context) const
Evaluates the parameter with matching name to an expression.
void removeParameter(const QString &name)
Removes the parameter with matching name from the algorithm, and deletes any existing definition.
QList< QgsMapLayer * > parameterAsLayerList(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, QgsProcessing::LayerOptionsFlags flags=QgsProcessing::LayerOptionsFlags()) const
Evaluates the parameter with matching name to a list of map layers.
QgsAnnotationLayer * parameterAsAnnotationLayer(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to an annotation layer.
bool addParameter(QgsProcessingParameterDefinition *parameterDefinition, bool createOutput=true)
Adds a parameter definition to the algorithm.
QgsGeometry parameterAsGeometry(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs=QgsCoordinateReferenceSystem()) const
Evaluates the parameter with matching name to a geometry.
virtual QString asQgisProcessCommand(const QVariantMap &parameters, QgsProcessingContext &context, bool &ok) const
Returns a command string which will execute the algorithm using the specified parameters via the comm...
bool parameterAsBoolean(const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context) const
Evaluates the parameter with matching name to a static boolean value.
QList< double > parameterAsRange(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a range of values.
QVariantList parameterAsMatrix(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a matrix/table of values.
virtual QgsExpressionContext createExpressionContext(const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeatureSource *source=nullptr) const
Creates an expression context relating to the algorithm.
QgsProcessingParameterDefinitions destinationParameterDefinitions() const
Returns a list of destination parameters definitions utilized by the algorithm.
static QString invalidSinkError(const QVariantMap &parameters, const QString &name)
Returns a user-friendly string to use as an error when a sink parameter could not be created.
bool hasHtmlOutputs() const
Returns true if this algorithm generates HTML outputs.
bool addOutput(QgsProcessingOutputDefinition *outputDefinition)
Adds an output definition to the algorithm.
double parameterAsDouble(const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context) const
Evaluates the parameter with matching name to a static double value.
QgsCoordinateReferenceSystem parameterAsPointCrs(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Returns the coordinate reference system associated with an point parameter value.
QString parameterAsString(const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context) const
Evaluates the parameter with matching name to a static string value.
QgsRectangle parameterAsExtent(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs=QgsCoordinateReferenceSystem()) const
Evaluates the parameter with matching name to a rectangular extent.
QgsPrintLayout * parameterAsLayout(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context)
Evaluates the parameter with matching name to a print layout.
virtual QVariantMap processAlgorithm(const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback)=0
Runs the algorithm using the specified parameters.
QgsPointCloudLayer * parameterAsPointCloudLayer(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, QgsProcessing::LayerOptionsFlags flags=QgsProcessing::LayerOptionsFlags()) const
Evaluates the parameter with matching name to a point cloud layer.
QgsCoordinateReferenceSystem parameterAsCrs(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a coordinate reference system.
QString parameterAsFileOutput(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a file based output destination.
QgsLayoutItem * parameterAsLayoutItem(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, QgsPrintLayout *layout)
Evaluates the parameter with matching name to a print layout item, taken from the specified layout.
const QgsProcessingParameterDefinition * parameterDefinition(const QString &name) const
Returns a matching parameter by name.
virtual QString svgIconPath() const
Returns a path to an SVG version of the algorithm's icon.
QgsFeatureSink * parameterAsSink(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, QString &destinationIdentifier, const QgsFields &fields, Qgis::WkbType geometryType=Qgis::WkbType::NoGeometry, const QgsCoordinateReferenceSystem &crs=QgsCoordinateReferenceSystem(), QgsFeatureSink::SinkFlags sinkFlags=QgsFeatureSink::SinkFlags(), const QVariantMap &createOptions=QVariantMap(), const QStringList &datasourceOptions=QStringList(), const QStringList &layerOptions=QStringList()) const
Evaluates the parameter with matching name to a feature sink.
QVariantMap run(const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback, bool *ok=nullptr, const QVariantMap &configuration=QVariantMap(), bool catchExceptions=true) const
Executes the algorithm using the specified parameters.
QString parameterAsSchema(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a database schema name string.
virtual Q_DECL_DEPRECATED QString helpString() const
Returns a localised help string for the algorithm.
QStringList parameterAsEnumStrings(const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context) const
Evaluates the parameter with matching name to list of static enum strings.
QgsPointXY parameterAsPoint(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs=QgsCoordinateReferenceSystem()) const
Evaluates the parameter with matching name to a point.
virtual QWidget * createCustomParametersWidget(QWidget *parent=nullptr) const
If an algorithm subclass implements a custom parameters widget, a copy of this widget should be const...
virtual QgsProcessingAlgorithm::VectorProperties sinkProperties(const QString &sink, const QVariantMap &parameters, QgsProcessingContext &context, const QMap< QString, QgsProcessingAlgorithm::VectorProperties > &sourceProperties) const
Returns the vector properties which will be used for the sink with matching name.
QgsCoordinateReferenceSystem parameterAsExtentCrs(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Returns the coordinate reference system associated with an extent parameter value.
QgsMeshLayer * parameterAsMeshLayer(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a mesh layer.
QgsCoordinateReferenceSystem parameterAsGeometryCrs(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Returns the coordinate reference system associated with a geometry parameter value.
virtual QString asPythonCommand(const QVariantMap &parameters, QgsProcessingContext &context) const
Returns a Python command string which can be executed to run the algorithm using the specified parame...
QString parameterAsEnumString(const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context) const
Evaluates the parameter with matching name to a static enum string.
virtual QVariantMap postProcessAlgorithm(QgsProcessingContext &context, QgsProcessingFeedback *feedback)
Allows the algorithm to perform any required cleanup tasks.
virtual bool canExecute(QString *errorMessage=nullptr) const
Returns true if the algorithm can execute.
QgsProcessingProvider * provider() const
Returns the provider to which this algorithm belongs.
QgsProcessingAlgorithm * create(const QVariantMap &configuration=QVariantMap()) const
Creates a copy of the algorithm, ready for execution.
virtual QVariantMap asMap(const QVariantMap &parameters, QgsProcessingContext &context) const
Returns a JSON serializable variant map containing the specified parameters and context settings.
QList< int > parameterAsInts(const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context) const
Evaluates the parameter with matching name to a list of integer values.
virtual bool supportInPlaceEdit(const QgsMapLayer *layer) const
Checks whether this algorithm supports in-place editing on the given layer Default implementation ret...
bool parameterAsBool(const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context) const
Evaluates the parameter with matching name to a static boolean value.
virtual QString name() const =0
Returns the algorithm name, used for identifying the algorithm.
static QString invalidPointCloudError(const QVariantMap &parameters, const QString &name)
Returns a user-friendly string to use as an error when a point cloud layer input could not be loaded.
QList< int > parameterAsEnums(const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context) const
Evaluates the parameter with matching name to list of enum values.
virtual bool checkParameterValues(const QVariantMap &parameters, QgsProcessingContext &context, QString *message=nullptr) const
Checks the supplied parameter values to verify that they satisfy the requirements of this algorithm i...
virtual Qgis::ProcessingAlgorithmDocumentationFlags documentationFlags() const
Returns the flags describing algorithm behavior for documentation purposes.
static QString invalidSourceError(const QVariantMap &parameters, const QString &name)
Returns a user-friendly string to use as an error when a source parameter could not be loaded.
QVariantMap runPrepared(const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback)
Runs the algorithm, which has been prepared by an earlier call to prepare().
QDateTime parameterAsDateTime(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a DateTime, or returns an invalid date time if the para...
QString parameterAsOutputLayer(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a output layer destination.
QColor parameterAsColor(const QVariantMap &parameters, const QString &name, QgsProcessingContext &context) const
Evaluates the parameter with matching name to a color, or returns an invalid color if the parameter w...
Contains information about the context in which a processing algorithm is executed.
QThread * thread()
Returns the thread in which the context lives.
@ IncludeProjectPath
Include the associated project path argument.
QFlags< ProcessArgumentFlag > ProcessArgumentFlags
std::unique_ptr< QgsProcessingModelInitialRunConfig > takeModelInitialRunConfig()
Takes the model initial run configuration from the context.
QgsExpressionContext & expressionContext()
Returns the expression context.
void takeResultsFrom(QgsProcessingContext &context)
Takes the results from another context and merges them with the results currently stored in this cont...
QVariantMap exportToMap() const
Exports the context's settings to a variant map.
QStringList asQgisProcessArguments(QgsProcessingContext::ProcessArgumentFlags flags=QgsProcessingContext::ProcessArgumentFlags()) const
Returns list of the equivalent qgis_process arguments representing the settings from the context.
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
QgsProject * project() const
Returns the project in which the algorithm is being executed.
void setModelInitialRunConfig(std::unique_ptr< QgsProcessingModelInitialRunConfig > config)
Sets the model initial run configuration, used to run a model algorithm.
QgsMapLayerStore * temporaryLayerStore()
Returns a reference to the layer store used for storing temporary layers during algorithm execution.
Base class for all parameter definitions which represent file or layer destinations,...
virtual QgsProcessingOutputDefinition * toOutputDefinition() const =0
Returns a new QgsProcessingOutputDefinition corresponding to the definition of the destination parame...
void setSupportsNonFileBasedOutput(bool supportsNonFileBasedOutput)
Sets whether the destination parameter supports non filed-based outputs, such as memory layers or dir...
Custom exception class for processing related exceptions.
virtual QgsFeatureRequest request() const
Returns the feature request used for fetching features to process from the source layer.
virtual QgsFeatureList processFeature(const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback)=0
Processes an individual input feature from the source.
bool supportInPlaceEdit(const QgsMapLayer *layer) const override
Checks whether this algorithm supports in-place editing on the given layer Default implementation for...
virtual QString inputParameterName() const
Returns the name of the parameter corresponding to the input layer.
QgsProcessingAlgorithm::VectorProperties sinkProperties(const QString &sink, const QVariantMap &parameters, QgsProcessingContext &context, const QMap< QString, QgsProcessingAlgorithm::VectorProperties > &sourceProperties) const override
Returns the vector properties which will be used for the sink with matching name.
virtual void initParameters(const QVariantMap &configuration=QVariantMap())
Initializes any extra parameters added by the algorithm subclass.
Qgis::ProcessingAlgorithmFlags flags() const override
Returns the flags indicating how and when the algorithm operates and should be exposed to users.
virtual Qgis::WkbType outputWkbType(Qgis::WkbType inputWkbType) const
Maps the input WKB geometry type (inputWkbType) to the corresponding output WKB type generated by the...
virtual Qgis::ProcessingSourceType outputLayerType() const
Returns the layer type for layers generated by this algorithm, if this is possible to determine in ad...
virtual QgsCoordinateReferenceSystem outputCrs(const QgsCoordinateReferenceSystem &inputCrs) const
Maps the input source coordinate reference system (inputCrs) to a corresponding output CRS generated ...
void prepareSource(const QVariantMap &parameters, QgsProcessingContext &context)
Read the source from parameters and context and set it.
QVariantMap processAlgorithm(const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback) override
Runs the algorithm using the specified parameters.
virtual QgsFields outputFields(const QgsFields &inputFields) const
Maps the input source fields (inputFields) to corresponding output fields generated by the algorithm.
virtual QString outputName() const =0
Returns the translated, user visible name for any layers created by this algorithm.
virtual QString inputParameterDescription() const
Returns the translated description of the parameter corresponding to the input layer.
virtual QgsFeatureSink::SinkFlags sinkFlags() const
Returns the feature sink flags to be used for the output.
void initAlgorithm(const QVariantMap &configuration=QVariantMap()) override
Initializes the algorithm using the specified configuration.
virtual QList< int > inputLayerTypes() const
Returns the valid input layer types for the source layer for this algorithm.
QgsCoordinateReferenceSystem sourceCrs() const
Returns the source's coordinate reference system.
virtual Qgis::ProcessingFeatureSourceFlags sourceFlags() const
Returns the processing feature source flags to be used in the algorithm.
Encapsulates settings relating to a feature source input to a processing algorithm.
QgsFeatureSource subclass which proxies methods to an underlying QgsFeatureSource,...
QgsExpressionContextScope * createExpressionContextScope() const
Returns an expression context scope suitable for this source.
Base class for providing feedback from a processing algorithm.
virtual void reportError(const QString &error, bool fatalError=false)
Reports that the algorithm encountered an error while executing.
Base class for the definition of processing outputs.
bool autoCreated() const
Returns true if the output was automatically created when adding a parameter.
Encapsulates settings relating to a feature sink or output raster layer for a processing algorithm.
QgsProperty sink
Sink/layer definition.
Base class for the definition of processing parameters.
virtual bool isDestination() const
Returns true if this parameter represents a file or layer destination, e.g.
QString name() const
Returns the name of the parameter.
static QString typeName()
Returns the type name for the parameter class.
A feature sink output for processing algorithms.
static QString typeName()
Returns the type name for the parameter class.
An input feature source (such as vector layers) parameter for processing algorithms.
static QString typeName()
Returns the type name for the parameter class.
static QString typeName()
Returns the type name for the parameter class.
static QString typeName()
Returns the type name for the parameter class.
static QString typeName()
Returns the type name for the parameter class.
static QString typeName()
Returns the type name for the parameter class.
static QString typeName()
Returns the type name for the parameter class.
static QString typeName()
Returns the type name for the parameter class.
static int parameterAsEnum(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to a enum value.
static double parameterAsDouble(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to a static double value.
static QgsPointXY parameterAsPoint(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs=QgsCoordinateReferenceSystem())
Evaluates the parameter with matching definition to a point.
static QString parameterAsOutputLayer(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Evaluates the parameter with matching definition to a output layer destination.
static QgsFeatureSink * parameterAsSink(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsFields &fields, Qgis::WkbType geometryType, const QgsCoordinateReferenceSystem &crs, QgsProcessingContext &context, QString &destinationIdentifier, QgsFeatureSink::SinkFlags sinkFlags=QgsFeatureSink::SinkFlags(), const QVariantMap &createOptions=QVariantMap(), const QStringList &datasourceOptions=QStringList(), const QStringList &layerOptions=QStringList())
Evaluates the parameter with matching definition to a feature sink.
static QgsPrintLayout * parameterAsLayout(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Evaluates the parameter with matching definition to a print layout.
static QList< QgsMapLayer * > parameterAsLayerList(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessing::LayerOptionsFlags flags=QgsProcessing::LayerOptionsFlags())
Evaluates the parameter with matching definition to a list of map layers.
static QgsRectangle parameterAsExtent(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs=QgsCoordinateReferenceSystem())
Evaluates the parameter with matching definition to a rectangular extent.
static QgsCoordinateReferenceSystem parameterAsGeometryCrs(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Returns the coordinate reference system associated with a geometry parameter value.
static QgsAnnotationLayer * parameterAsAnnotationLayer(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Evaluates the parameter with matching definition to an annotation layer.
static QString parameterAsEnumString(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to a static enum string.
static QList< double > parameterAsRange(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Evaluates the parameter with matching definition to a range of values.
static QStringList parameterAsStrings(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Evaluates the parameter with matching definition to a list of strings (e.g.
static QList< int > parameterAsInts(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to a list of integer values.
static QString parameterAsConnectionName(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to a connection name string.
static QgsProcessingFeatureSource * parameterAsSource(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Evaluates the parameter with matching definition to a feature source.
static QString parameterAsFileOutput(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Evaluates the parameter with matching definition to a file based output destination.
static QgsPointCloudLayer * parameterAsPointCloudLayer(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessing::LayerOptionsFlags flags=QgsProcessing::LayerOptionsFlags())
Evaluates the parameter with matching definition to a point cloud layer.
static QgsCoordinateReferenceSystem parameterAsPointCrs(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Returns the coordinate reference system associated with an point parameter value.
static QgsLayoutItem * parameterAsLayoutItem(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context, QgsPrintLayout *layout)
Evaluates the parameter with matching definition to a print layout item, taken from the specified lay...
static bool parameterAsBool(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to a static boolean value.
static QString parameterAsCompatibleSourceLayerPathAndLayerName(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context, const QStringList &compatibleFormats, const QString &preferredFormat=QString("shp"), QgsProcessingFeedback *feedback=nullptr, QString *layerName=nullptr)
Evaluates the parameter with matching definition to a source vector layer file path and layer name of...
static QgsMeshLayer * parameterAsMeshLayer(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Evaluates the parameter with matching definition and value to a mesh layer.
static QString parameterAsCompatibleSourceLayerPath(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context, const QStringList &compatibleFormats, const QString &preferredFormat=QString("shp"), QgsProcessingFeedback *feedback=nullptr)
Evaluates the parameter with matching definition to a source vector layer file path of compatible for...
static QColor parameterAsColor(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Returns the color associated with an point parameter value, or an invalid color if the parameter was ...
static QgsVectorLayer * parameterAsVectorLayer(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Evaluates the parameter with matching definition to a vector layer.
static int parameterAsInt(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to a static integer value.
static QString parameterAsDatabaseTableName(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to a database table name.
static QString parameterAsSchema(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to a database schema name.
static QgsGeometry parameterAsGeometry(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs=QgsCoordinateReferenceSystem())
Evaluates the parameter with matching definition to a geometry.
static QgsMapLayer * parameterAsLayer(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingUtils::LayerHint layerHint=QgsProcessingUtils::LayerHint::UnknownType, QgsProcessing::LayerOptionsFlags flags=QgsProcessing::LayerOptionsFlags())
Evaluates the parameter with matching definition to a map layer.
static QString parameterAsExpression(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to an expression.
static QString parameterAsString(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to a static string value.
static QgsRasterLayer * parameterAsRasterLayer(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Evaluates the parameter with matching definition to a raster layer.
static QList< int > parameterAsEnums(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to list of enum values.
static QStringList parameterAsEnumStrings(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to list of static enum strings.
static QgsGeometry parameterAsExtentGeometry(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs=QgsCoordinateReferenceSystem())
Evaluates the parameter with matching definition to a rectangular extent, and returns a geometry cove...
static QStringList parameterAsFileList(const QgsProcessingParameterDefinition *definition, const QVariant &value, QgsProcessingContext &context)
Evaluates the parameter with matching definition to a list of files (for QgsProcessingParameterMultip...
static QgsCoordinateReferenceSystem parameterAsExtentCrs(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Returns the coordinate reference system associated with an extent parameter value.
static QDateTime parameterAsDateTime(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, const QgsProcessingContext &context)
Evaluates the parameter with matching definition to a static datetime value.
static QString parameterAsFile(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Evaluates the parameter with matching definition to a file/folder name.
static QVariantList parameterAsMatrix(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Evaluates the parameter with matching definition to a matrix/table of values.
static QgsCoordinateReferenceSystem parameterAsCrs(const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context)
Evaluates the parameter with matching definition to a coordinate reference system.
Abstract base class for processing providers.
virtual QString id() const =0
Returns the unique provider id, used for identifying the provider.
virtual bool supportsNonFileBasedOutput() const
Returns true if the provider supports non-file based outputs (such as memory layers or direct databas...
QFlags< LayerOptionsFlag > LayerOptionsFlags
A store for object properties.
Qgis::PropertyType propertyType() const
Returns the property type.
QVariant value(const QgsExpressionContext &context, const QVariant &defaultValue=QVariant(), bool *ok=nullptr) const
Calculates the current value of the property, including any transforms which are set for the property...
QVariant staticValue() const
Returns the current static value for the property.
Represents a raster layer.
A rectangle specified with double values.
Represents a vector layer which manages a vector based dataset.
Q_INVOKABLE Qgis::GeometryType geometryType() const
Returns point, line or polygon.
static Qgis::GeometryType geometryType(Qgis::WkbType type)
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
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 c
QList< QgsFeature > QgsFeatureList
QList< const QgsProcessingParameterDefinition * > QgsProcessingParameterDefinitions
List of processing parameters.
const QgsCoordinateReferenceSystem & outputCrs
const QgsCoordinateReferenceSystem & crs
Properties of a vector source or sink used in an algorithm.
Qgis::WkbType wkbType
Geometry (WKB) type.
QgsCoordinateReferenceSystem crs
Coordinate Reference System.
Qgis::ProcessingPropertyAvailability availability
Availability of the properties. By default properties are not available.