QGIS API Documentation 3.41.0-Master (af5edcb665c)
Loading...
Searching...
No Matches
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
138{
139 return mProvider;
140}
141
143{
144 mProvider = provider;
145
146 if ( mProvider && !mProvider->supportsNonFileBasedOutput() )
147 {
148 // need to update all destination parameters to turn off non file based outputs
149 for ( const QgsProcessingParameterDefinition *definition : std::as_const( mParameters ) )
150 {
151 if ( definition->isDestination() )
152 {
153 const QgsProcessingDestinationParameter *destParam = static_cast< const QgsProcessingDestinationParameter *>( definition );
154 const_cast< QgsProcessingDestinationParameter *>( destParam )->setSupportsNonFileBasedOutput( false );
155 }
156 }
157 }
158}
159
161{
162 return nullptr;
163}
164
166 QgsProcessingContext &context, QgsProcessingFeatureSource *source ) const
167{
168 // start with context's expression context
170
171 // If there's a source capable of generating a context scope, use it
172 if ( source )
173 {
175 if ( scope )
176 c << scope;
177 }
178 else if ( c.scopeCount() == 0 )
179 {
180 //empty scope, populate with initial scopes
183 }
184
185 c << QgsExpressionContextUtils::processingAlgorithmScope( this, parameters, context );
186 return c;
187}
188
189bool QgsProcessingAlgorithm::validateInputCrs( const QVariantMap &parameters, QgsProcessingContext &context ) const
190{
192 {
193 // I'm a well behaved algorithm - I take work AWAY from users!
194 return true;
195 }
196
197 bool foundCrs = false;
199 for ( const QgsProcessingParameterDefinition *def : mParameters )
200 {
202 {
203 QgsMapLayer *layer = QgsProcessingParameters::parameterAsLayer( def, parameters, context );
204 if ( layer )
205 {
206 if ( foundCrs && layer->crs().isValid() && crs != layer->crs() )
207 {
208 return false;
209 }
210 else if ( !foundCrs && layer->crs().isValid() )
211 {
212 foundCrs = true;
213 crs = layer->crs();
214 }
215 }
216 }
217 else if ( def->type() == QgsProcessingParameterFeatureSource::typeName() )
218 {
219 std::unique_ptr< QgsFeatureSource > source( QgsProcessingParameters::parameterAsSource( def, parameters, context ) );
220 if ( source )
221 {
222 if ( foundCrs && source->sourceCrs().isValid() && crs != source->sourceCrs() )
223 {
224 return false;
225 }
226 else if ( !foundCrs && source->sourceCrs().isValid() )
227 {
228 foundCrs = true;
229 crs = source->sourceCrs();
230 }
231 }
232 }
233 else if ( def->type() == QgsProcessingParameterMultipleLayers::typeName() )
234 {
235 QList< QgsMapLayer *> layers = QgsProcessingParameters::parameterAsLayerList( def, parameters, context );
236 const auto constLayers = layers;
237 for ( QgsMapLayer *layer : constLayers )
238 {
239 if ( !layer )
240 continue;
241
242 if ( foundCrs && layer->crs().isValid() && crs != layer->crs() )
243 {
244 return false;
245 }
246 else if ( !foundCrs && layer->crs().isValid() )
247 {
248 foundCrs = true;
249 crs = layer->crs();
250 }
251 }
252 }
253 else if ( def->type() == QgsProcessingParameterExtent::typeName() )
254 {
256 if ( foundCrs && extentCrs.isValid() && crs != extentCrs )
257 {
258 return false;
259 }
260 else if ( !foundCrs && extentCrs.isValid() )
261 {
262 foundCrs = true;
263 crs = extentCrs;
264 }
265 }
266 else if ( def->type() == QgsProcessingParameterPoint::typeName() )
267 {
269 if ( foundCrs && pointCrs.isValid() && crs != pointCrs )
270 {
271 return false;
272 }
273 else if ( !foundCrs && pointCrs.isValid() )
274 {
275 foundCrs = true;
276 crs = pointCrs;
277 }
278 }
279 else if ( def->type() == QgsProcessingParameterGeometry::typeName() )
280 {
282 if ( foundCrs && geomCrs.isValid() && crs != geomCrs )
283 {
284 return false;
285 }
286 else if ( !foundCrs && geomCrs.isValid() )
287 {
288 foundCrs = true;
289 crs = geomCrs;
290 }
291 }
292
293 }
294 return true;
295}
296
297QString QgsProcessingAlgorithm::asPythonCommand( const QVariantMap &parameters, QgsProcessingContext &context ) const
298{
299 QString s = QStringLiteral( "processing.run(\"%1\"," ).arg( id() );
300
301 QStringList parts;
302 for ( const QgsProcessingParameterDefinition *def : mParameters )
303 {
304 if ( def->flags() & Qgis::ProcessingParameterFlag::Hidden )
305 continue;
306
307 if ( !parameters.contains( def->name() ) )
308 continue;
309
310 parts << QStringLiteral( "'%1':%2" ).arg( def->name(), def->valueAsPythonString( parameters.value( def->name() ), context ) );
311 }
312
313 s += QStringLiteral( " {%1})" ).arg( parts.join( ',' ) );
314 return s;
315}
316
317QString QgsProcessingAlgorithm::asQgisProcessCommand( const QVariantMap &parameters, QgsProcessingContext &context, bool &ok ) const
318{
319 ok = true;
320 QStringList parts;
321 parts.append( QStringLiteral( "qgis_process" ) );
322 parts.append( QStringLiteral( "run" ) );
323 parts.append( id() );
324
326 // we only include the project path argument if a project is actually required by the algorithm
329
330 parts.append( context.asQgisProcessArguments( argumentFlags ) );
331
332 auto escapeIfNeeded = []( const QString & input ) -> QString
333 {
334 // play it safe and escape everything UNLESS it's purely alphanumeric characters (and a very select scattering of other common characters!)
335 const thread_local QRegularExpression nonAlphaNumericRx( QStringLiteral( "[^a-zA-Z0-9.\\-/_]" ) );
336 if ( nonAlphaNumericRx.match( input ).hasMatch() )
337 {
338 QString escaped = input;
339 escaped.replace( '\'', QLatin1String( "'\\''" ) );
340 return QStringLiteral( "'%1'" ).arg( escaped );
341 }
342 else
343 {
344 return input;
345 }
346 };
347
348 for ( const QgsProcessingParameterDefinition *def : mParameters )
349 {
350 if ( def->flags() & Qgis::ProcessingParameterFlag::Hidden )
351 continue;
352
353 if ( !parameters.contains( def->name() ) )
354 continue;
355
356 const QStringList partValues = def->valueAsStringList( parameters.value( def->name() ), context, ok );
357 if ( !ok )
358 return QString();
359
360 for ( const QString &partValue : partValues )
361 {
362 parts << QStringLiteral( "--%1=%2" ).arg( def->name(), escapeIfNeeded( partValue ) );
363 }
364 }
365
366 return parts.join( ' ' );
367}
368
369QVariantMap QgsProcessingAlgorithm::asMap( const QVariantMap &parameters, QgsProcessingContext &context ) const
370{
371 QVariantMap properties = context.exportToMap();
372
373 // we only include the project path argument if a project is actually required by the algorithm
375 properties.remove( QStringLiteral( "project_path" ) );
376
377 QVariantMap paramValues;
378 for ( const QgsProcessingParameterDefinition *def : mParameters )
379 {
380 if ( def->flags() & Qgis::ProcessingParameterFlag::Hidden )
381 continue;
382
383 if ( !parameters.contains( def->name() ) )
384 continue;
385
386 paramValues.insert( def->name(), def->valueAsJsonObject( parameters.value( def->name() ), context ) );
387 }
388
389 properties.insert( QStringLiteral( "inputs" ), paramValues );
390 return properties;
391}
392
394{
395 return addParameter( std::unique_ptr<QgsProcessingParameterDefinition>( definition ), createOutput );
396}
397
398bool QgsProcessingAlgorithm::addParameter( std::unique_ptr<QgsProcessingParameterDefinition> definition, bool createOutput )
399{
400 if ( !definition )
401 return false;
402
403 // check for duplicate named parameters
404 const QgsProcessingParameterDefinition *existingDef = QgsProcessingAlgorithm::parameterDefinition( definition->name() );
405 if ( existingDef && existingDef->name() == definition->name() ) // parameterDefinition is case-insensitive, but we DO allow case-different duplicate names
406 {
407 QgsMessageLog::logMessage( QObject::tr( "Duplicate parameter %1 registered for alg %2" ).arg( definition->name(), id() ), QObject::tr( "Processing" ) );
408 return false;
409 }
410
411 if ( definition->isDestination() && mProvider )
412 {
413 QgsProcessingDestinationParameter *destParam = static_cast< QgsProcessingDestinationParameter *>( definition.get() );
414 if ( !mProvider->supportsNonFileBasedOutput() )
415 destParam->setSupportsNonFileBasedOutput( false );
416 }
417
418 definition->mAlgorithm = this;
419 mParameters << definition.release();
420 const QgsProcessingParameterDefinition *definitionRawPtr = mParameters.back();
421
422 if ( createOutput )
423 return createAutoOutputForParameter( definitionRawPtr );
424 else
425 return true;
426}
427
429{
431 if ( def )
432 {
433 delete def;
434 mParameters.removeAll( def );
435
436 // remove output automatically created when adding parameter
438 if ( outputDef && outputDef->autoCreated() )
439 {
440 delete outputDef;
441 mOutputs.removeAll( outputDef );
442 }
443 }
444}
445
447{
448 return addOutput( std::unique_ptr<QgsProcessingOutputDefinition>( definition ) );
449}
450
451bool QgsProcessingAlgorithm::addOutput( std::unique_ptr<QgsProcessingOutputDefinition> definition )
452{
453 if ( !definition )
454 return false;
455
456 // check for duplicate named outputs
457 if ( QgsProcessingAlgorithm::outputDefinition( definition->name() ) )
458 {
459 QgsMessageLog::logMessage( QObject::tr( "Duplicate output %1 registered for alg %2" ).arg( definition->name(), id() ), QObject::tr( "Processing" ) );
460 return false;
461 }
462
463 mOutputs << definition.release();
464 return true;
465}
466
468{
469 return true;
470}
471
476
478{
479 // first pass - case sensitive match
480 for ( const QgsProcessingParameterDefinition *def : mParameters )
481 {
482 if ( def->name() == name )
483 return def;
484 }
485
486 // second pass - case insensitive
487 for ( const QgsProcessingParameterDefinition *def : mParameters )
488 {
489 if ( def->name().compare( name, Qt::CaseInsensitive ) == 0 )
490 return def;
491 }
492 return nullptr;
493}
494
496{
497 int count = 0;
498 for ( const QgsProcessingParameterDefinition *def : mParameters )
499 {
500 if ( !( def->flags() & Qgis::ProcessingParameterFlag::Hidden ) )
501 count++;
502 }
503 return count;
504}
505
507{
509 for ( const QgsProcessingParameterDefinition *def : mParameters )
510 {
511 if ( def->isDestination() )
512 result << def;
513 }
514 return result;
515}
516
518{
519 for ( const QgsProcessingOutputDefinition *def : mOutputs )
520 {
521 if ( def->name().compare( name, Qt::CaseInsensitive ) == 0 )
522 return def;
523 }
524 return nullptr;
525}
526
528{
529 for ( const QgsProcessingOutputDefinition *def : mOutputs )
530 {
531 if ( def->type() == QLatin1String( "outputHtml" ) )
532 return true;
533 }
534 return false;
535}
536
537QgsProcessingAlgorithm::VectorProperties QgsProcessingAlgorithm::sinkProperties( const QString &, const QVariantMap &, QgsProcessingContext &, const QMap<QString, QgsProcessingAlgorithm::VectorProperties> & ) const
538{
539 return VectorProperties();
540}
541
542QVariantMap QgsProcessingAlgorithm::run( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback, bool *ok, const QVariantMap &configuration, bool catchExceptions ) const
543{
544 std::unique_ptr< QgsProcessingAlgorithm > alg( create( configuration ) );
545 if ( ok )
546 *ok = false;
547
548 bool res = alg->prepare( parameters, context, feedback );
549 if ( !res )
550 return QVariantMap();
551
552 QVariantMap runRes;
553 bool success = false;
554 try
555 {
556 runRes = alg->runPrepared( parameters, context, feedback );
557 success = true;
558 }
559 catch ( QgsProcessingException &e )
560 {
561 if ( !catchExceptions )
562 {
563 alg->postProcess( context, feedback, false );
564 throw e;
565 }
566
567 QgsMessageLog::logMessage( e.what(), QObject::tr( "Processing" ), Qgis::MessageLevel::Critical );
568 feedback->reportError( e.what() );
569 }
570
571 if ( ok )
572 *ok = success;
573
574 QVariantMap ppRes = alg->postProcess( context, feedback, success );
575 if ( !ppRes.isEmpty() )
576 return ppRes;
577 else
578 return runRes;
579}
580
581bool QgsProcessingAlgorithm::prepare( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
582{
583 // cppcheck-suppress assertWithSideEffect
584 Q_ASSERT_X( QThread::currentThread() == context.temporaryLayerStore()->thread(), "QgsProcessingAlgorithm::prepare", "prepare() must be called from the same thread as context was created in" );
585 Q_ASSERT_X( !mHasPrepared, "QgsProcessingAlgorithm::prepare", "prepare() has already been called for the algorithm instance" );
586 try
587 {
588 mHasPrepared = prepareAlgorithm( parameters, context, feedback );
589 return mHasPrepared;
590 }
591 catch ( QgsProcessingException &e )
592 {
593 QgsMessageLog::logMessage( e.what(), QObject::tr( "Processing" ), Qgis::MessageLevel::Critical );
594 feedback->reportError( e.what() );
595 return false;
596 }
597}
598
599QVariantMap QgsProcessingAlgorithm::runPrepared( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
600{
601 Q_ASSERT_X( mHasPrepared, "QgsProcessingAlgorithm::runPrepared", QStringLiteral( "prepare() was not called for the algorithm instance %1" ).arg( name() ).toLatin1() );
602 Q_ASSERT_X( !mHasExecuted, "QgsProcessingAlgorithm::runPrepared", "runPrepared() was already called for this algorithm instance" );
603
604 // Hey kids, let's all be thread safe! It's the fun thing to do!
605 //
606 // First, let's see if we're going to run into issues.
607 QgsProcessingContext *runContext = nullptr;
608 if ( context.thread() == QThread::currentThread() )
609 {
610 // OH. No issues. Seems you're running everything in the same thread, so go about your business. Sorry about
611 // the intrusion, we're just making sure everything's nice and safe here. We like to keep a clean and tidy neighbourhood,
612 // you know, for the kids and dogs and all.
613 runContext = &context;
614 }
615 else
616 {
617 // HA! I knew things looked a bit suspicious - seems you're running this algorithm in a different thread
618 // from that which the passed context has an affinity for. That's fine and all, but we need to make sure
619 // we proceed safely...
620
621 // So first we create a temporary local context with affinity for the current thread
622 mLocalContext.reset( new QgsProcessingContext() );
623 // copy across everything we can safely do from the passed context
624 mLocalContext->copyThreadSafeSettings( context );
625
626 // and we'll run the actual algorithm processing using the local thread safe context
627 runContext = mLocalContext.get();
628 }
629
630 std::unique_ptr< QgsProcessingModelInitialRunConfig > modelConfig = context.takeModelInitialRunConfig();
631 if ( modelConfig )
632 {
633 std::unique_ptr< QgsMapLayerStore > modelPreviousLayerStore = modelConfig->takePreviousLayerStore();
634 if ( modelPreviousLayerStore )
635 {
636 // move layers from previous layer store to context's temporary layer store, in a thread-safe way
637 Q_ASSERT_X( !modelPreviousLayerStore->thread(), "QgsProcessingAlgorithm::runPrepared", "QgsProcessingModelConfig::modelPreviousLayerStore must have been pushed to a nullptr thread" );
638 modelPreviousLayerStore->moveToThread( QThread::currentThread() );
639 runContext->temporaryLayerStore()->transferLayersFromStore( modelPreviousLayerStore.get() );
640 }
641 runContext->setModelInitialRunConfig( std::move( modelConfig ) );
642 }
643
644 mHasExecuted = true;
645 try
646 {
647 QVariantMap runResults = processAlgorithm( parameters, *runContext, feedback );
648
649 if ( mLocalContext )
650 {
651 // ok, time to clean things up. We need to push the temporary context back into
652 // the thread that the passed context is associated with (we can only push from the
653 // current thread, so we HAVE to do this here)
654 mLocalContext->pushToThread( context.thread() );
655 }
656 return runResults;
657 }
658 catch ( QgsProcessingException & )
659 {
660 if ( mLocalContext )
661 {
662 // see above!
663 mLocalContext->pushToThread( context.thread() );
664 }
665 //rethrow
666 throw;
667 }
668}
669
671{
672 // cppcheck-suppress assertWithSideEffect
673 Q_ASSERT_X( QThread::currentThread() == context.temporaryLayerStore()->thread(), "QgsProcessingAlgorithm::postProcess", "postProcess() must be called from the same thread the context was created in" );
674 Q_ASSERT_X( mHasExecuted, "QgsProcessingAlgorithm::postProcess", QStringLiteral( "algorithm instance %1 was not executed" ).arg( name() ).toLatin1() );
675 Q_ASSERT_X( !mHasPostProcessed, "QgsProcessingAlgorithm::postProcess", "postProcess() was already called for this algorithm instance" );
676
677 if ( mLocalContext )
678 {
679 // algorithm was processed using a temporary thread safe context. So now we need
680 // to take the results from that temporary context, and smash them into the passed
681 // context
682 context.takeResultsFrom( *mLocalContext );
683 // now get lost, we don't need you anymore
684 mLocalContext.reset();
685 }
686
687 mHasPostProcessed = true;
688 if ( runResult )
689 {
690 try
691 {
692 return postProcessAlgorithm( context, feedback );
693 }
694 catch ( QgsProcessingException &e )
695 {
696 QgsMessageLog::logMessage( e.what(), QObject::tr( "Processing" ), Qgis::MessageLevel::Critical );
697 feedback->reportError( e.what() );
698 return QVariantMap();
699 }
700 }
701 else
702 {
703 return QVariantMap();
704 }
705}
706
707QString QgsProcessingAlgorithm::parameterAsString( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
708{
710}
711
712QString QgsProcessingAlgorithm::parameterAsExpression( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
713{
715}
716
717double QgsProcessingAlgorithm::parameterAsDouble( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
718{
720}
721
722int QgsProcessingAlgorithm::parameterAsInt( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
723{
724 return QgsProcessingParameters::parameterAsInt( parameterDefinition( name ), parameters, context );
725}
726
727QList<int> QgsProcessingAlgorithm::parameterAsInts( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
728{
729 return QgsProcessingParameters::parameterAsInts( parameterDefinition( name ), parameters, context );
730}
731
732int QgsProcessingAlgorithm::parameterAsEnum( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
733{
734 return QgsProcessingParameters::parameterAsEnum( parameterDefinition( name ), parameters, context );
735}
736
737QList<int> QgsProcessingAlgorithm::parameterAsEnums( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
738{
740}
741
742QString QgsProcessingAlgorithm::parameterAsEnumString( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
743{
745}
746
747QStringList QgsProcessingAlgorithm::parameterAsEnumStrings( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
748{
750}
751
752bool QgsProcessingAlgorithm::parameterAsBool( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
753{
754 return QgsProcessingParameters::parameterAsBool( parameterDefinition( name ), parameters, context );
755}
756
757bool QgsProcessingAlgorithm::parameterAsBoolean( const QVariantMap &parameters, const QString &name, const QgsProcessingContext &context ) const
758{
759 return QgsProcessingParameters::parameterAsBool( parameterDefinition( name ), parameters, context );
760}
761
762QgsFeatureSink *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
763{
764 if ( !parameterDefinition( name ) )
765 throw QgsProcessingException( QObject::tr( "No parameter definition for the sink '%1'" ).arg( name ) );
766
767 return QgsProcessingParameters::parameterAsSink( parameterDefinition( name ), parameters, fields, geometryType, crs, context, destinationIdentifier, sinkFlags, createOptions, datasourceOptions, layerOptions );
768}
769
770QgsProcessingFeatureSource *QgsProcessingAlgorithm::parameterAsSource( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
771{
773}
774
775QString QgsProcessingAlgorithm::parameterAsCompatibleSourceLayerPath( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QStringList &compatibleFormats, const QString &preferredFormat, QgsProcessingFeedback *feedback ) const
776{
777 return QgsProcessingParameters::parameterAsCompatibleSourceLayerPath( parameterDefinition( name ), parameters, context, compatibleFormats, preferredFormat, feedback );
778}
779
780QString QgsProcessingAlgorithm::parameterAsCompatibleSourceLayerPathAndLayerName( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QStringList &compatibleFormats, const QString &preferredFormat, QgsProcessingFeedback *feedback, QString *layerName ) const
781{
782 return QgsProcessingParameters::parameterAsCompatibleSourceLayerPathAndLayerName( parameterDefinition( name ), parameters, context, compatibleFormats, preferredFormat, feedback, layerName );
783}
784
785QgsMapLayer *QgsProcessingAlgorithm::parameterAsLayer( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
786{
788}
789
790QgsRasterLayer *QgsProcessingAlgorithm::parameterAsRasterLayer( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
791{
793}
794
795QgsMeshLayer *QgsProcessingAlgorithm::parameterAsMeshLayer( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
796{
798}
799
800QString QgsProcessingAlgorithm::parameterAsOutputLayer( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
801{
803}
804
805QString QgsProcessingAlgorithm::parameterAsFileOutput( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
806{
808}
809
810QgsVectorLayer *QgsProcessingAlgorithm::parameterAsVectorLayer( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
811{
813}
814
815QgsCoordinateReferenceSystem QgsProcessingAlgorithm::parameterAsCrs( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
816{
817 return QgsProcessingParameters::parameterAsCrs( parameterDefinition( name ), parameters, context );
818}
819
820QgsCoordinateReferenceSystem QgsProcessingAlgorithm::parameterAsExtentCrs( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
821{
823}
824
825QgsRectangle QgsProcessingAlgorithm::parameterAsExtent( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs ) const
826{
828}
829
830QgsGeometry QgsProcessingAlgorithm::parameterAsExtentGeometry( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs ) const
831{
833}
834
835QgsPointXY QgsProcessingAlgorithm::parameterAsPoint( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs ) const
836{
838}
839
840QgsCoordinateReferenceSystem QgsProcessingAlgorithm::parameterAsPointCrs( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
841{
843}
844
845QgsGeometry QgsProcessingAlgorithm::parameterAsGeometry( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QgsCoordinateReferenceSystem &crs ) const
846{
848}
849
850QgsCoordinateReferenceSystem QgsProcessingAlgorithm::parameterAsGeometryCrs( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
851{
853}
854
855QString QgsProcessingAlgorithm::parameterAsFile( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
856{
857 return QgsProcessingParameters::parameterAsFile( parameterDefinition( name ), parameters, context );
858}
859
860QVariantList QgsProcessingAlgorithm::parameterAsMatrix( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
861{
863}
864
865QList<QgsMapLayer *> QgsProcessingAlgorithm::parameterAsLayerList( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, QgsProcessing::LayerOptionsFlags flags ) const
866{
868}
869
870QStringList QgsProcessingAlgorithm::parameterAsFileList( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
871{
873}
874
875QList<double> QgsProcessingAlgorithm::parameterAsRange( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
876{
878}
879
880QStringList QgsProcessingAlgorithm::parameterAsFields( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
881{
883}
884
885QStringList QgsProcessingAlgorithm::parameterAsStrings( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
886{
888}
889
890QgsPrintLayout *QgsProcessingAlgorithm::parameterAsLayout( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context )
891{
893}
894
895QgsLayoutItem *QgsProcessingAlgorithm::parameterAsLayoutItem( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, QgsPrintLayout *layout )
896{
897 return QgsProcessingParameters::parameterAsLayoutItem( parameterDefinition( name ), parameters, context, layout );
898}
899
900QColor QgsProcessingAlgorithm::parameterAsColor( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
901{
903}
904
905QString QgsProcessingAlgorithm::parameterAsConnectionName( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
906{
908}
909
910QDateTime QgsProcessingAlgorithm::parameterAsDateTime( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
911{
913}
914
915QString QgsProcessingAlgorithm::parameterAsSchema( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
916{
918}
919
920QString QgsProcessingAlgorithm::parameterAsDatabaseTableName( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
921{
923}
924
926{
928}
929
930QgsAnnotationLayer *QgsProcessingAlgorithm::parameterAsAnnotationLayer( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
931{
933}
934
935QString QgsProcessingAlgorithm::invalidSourceError( const QVariantMap &parameters, const QString &name )
936{
937 if ( !parameters.contains( name ) )
938 return QObject::tr( "Could not load source layer for %1: no value specified for parameter" ).arg( name );
939 else
940 {
941 QVariant var = parameters.value( name );
942 if ( var.userType() == qMetaTypeId<QgsProcessingFeatureSourceDefinition>() )
943 {
944 QgsProcessingFeatureSourceDefinition fromVar = qvariant_cast<QgsProcessingFeatureSourceDefinition>( var );
945 var = fromVar.source;
946 }
947 else if ( var.userType() == qMetaTypeId<QgsProcessingOutputLayerDefinition>() )
948 {
949 QgsProcessingOutputLayerDefinition fromVar = qvariant_cast<QgsProcessingOutputLayerDefinition>( var );
950 var = fromVar.sink;
951 }
952 if ( var.userType() == qMetaTypeId<QgsProperty>() )
953 {
954 QgsProperty p = var.value< QgsProperty >();
956 {
957 var = p.staticValue();
958 }
959 }
960 if ( !var.toString().isEmpty() )
961 return QObject::tr( "Could not load source layer for %1: %2 not found" ).arg( name, var.toString() );
962 else
963 return QObject::tr( "Could not load source layer for %1: invalid value" ).arg( name );
964 }
965}
966
967QString QgsProcessingAlgorithm::invalidRasterError( const QVariantMap &parameters, const QString &name )
968{
969 if ( !parameters.contains( name ) )
970 return QObject::tr( "Could not load source layer for %1: no value specified for parameter" ).arg( name );
971 else
972 {
973 QVariant var = parameters.value( name );
974 if ( var.userType() == qMetaTypeId<QgsProperty>() )
975 {
976 QgsProperty p = var.value< QgsProperty >();
978 {
979 var = p.staticValue();
980 }
981 }
982 if ( !var.toString().isEmpty() )
983 return QObject::tr( "Could not load source layer for %1: %2 not found" ).arg( name, var.toString() );
984 else
985 return QObject::tr( "Could not load source layer for %1: invalid value" ).arg( name );
986 }
987}
988
989QString QgsProcessingAlgorithm::invalidSinkError( const QVariantMap &parameters, const QString &name )
990{
991 if ( !parameters.contains( name ) )
992 return QObject::tr( "Could not create destination layer for %1: no value specified for parameter" ).arg( name );
993 else
994 {
995 QVariant var = parameters.value( name );
996 if ( var.userType() == qMetaTypeId<QgsProcessingOutputLayerDefinition>() )
997 {
998 QgsProcessingOutputLayerDefinition fromVar = qvariant_cast<QgsProcessingOutputLayerDefinition>( var );
999 var = fromVar.sink;
1000 }
1001 if ( var.userType() == qMetaTypeId<QgsProperty>() )
1002 {
1003 QgsProperty p = var.value< QgsProperty >();
1005 {
1006 var = p.staticValue();
1007 }
1008 }
1009 if ( !var.toString().isEmpty() )
1010 return QObject::tr( "Could not create destination layer for %1: %2" ).arg( name, var.toString() );
1011 else
1012 return QObject::tr( "Could not create destination layer for %1: invalid value" ).arg( name );
1013 }
1014}
1015
1016QString QgsProcessingAlgorithm::invalidPointCloudError( const QVariantMap &parameters, const QString &name )
1017{
1018 if ( !parameters.contains( name ) )
1019 return QObject::tr( "Could not load source layer for %1: no value specified for parameter" ).arg( name );
1020 else
1021 {
1022 QVariant var = parameters.value( name );
1023 if ( var.userType() == qMetaTypeId<QgsProperty>() )
1024 {
1025 QgsProperty p = var.value< QgsProperty >();
1027 {
1028 var = p.staticValue();
1029 }
1030 }
1031 if ( !var.toString().isEmpty() )
1032 return QObject::tr( "Could not load source layer for %1: %2 not found" ).arg( name, var.toString() );
1033 else
1034 return QObject::tr( "Could not load source layer for %1: invalid value" ).arg( name );
1035 }
1036}
1037
1038QString QgsProcessingAlgorithm::writeFeatureError( QgsFeatureSink *sink, const QVariantMap &parameters, const QString &name )
1039{
1040 Q_UNUSED( sink );
1041 Q_UNUSED( parameters );
1042 if ( !name.isEmpty() )
1043 return QObject::tr( "Could not write feature into %1" ).arg( name );
1044 else
1045 return QObject::tr( "Could not write feature" );
1046}
1047
1049{
1050 Q_UNUSED( layer )
1051 return false;
1052}
1053
1054
1055bool QgsProcessingAlgorithm::createAutoOutputForParameter( const QgsProcessingParameterDefinition *parameter )
1056{
1057 if ( !parameter->isDestination() )
1058 return true; // nothing created, but nothing went wrong - so return true
1059
1060 const QgsProcessingDestinationParameter *dest = static_cast< const QgsProcessingDestinationParameter * >( parameter );
1062 if ( !output )
1063 return true; // nothing created - but nothing went wrong - so return true
1064 output->setAutoCreated( true );
1065
1066 if ( !addOutput( output ) )
1067 {
1068 // couldn't add output - probably a duplicate name
1069 return false;
1070 }
1071 else
1072 {
1073 return true;
1074 }
1075}
1076
1077
1078//
1079// QgsProcessingFeatureBasedAlgorithm
1080//
1081
1088
1090{
1092 initParameters( config );
1093 addParameter( new QgsProcessingParameterFeatureSink( QStringLiteral( "OUTPUT" ), outputName(), outputLayerType(), QVariant(), false, true, true ) );
1094}
1095
1097{
1098 return QStringLiteral( "INPUT" );
1099}
1100
1102{
1103 return QObject::tr( "Input layer" );
1104}
1105
1107{
1108 return QList<int>();
1109}
1110
1115
1120
1125
1127{
1128 return inputWkbType;
1129}
1130
1132{
1133 return inputFields;
1134}
1135
1140
1142{
1143}
1144
1146{
1147 if ( mSource )
1148 return mSource->sourceCrs();
1149 else
1151}
1152
1153QVariantMap QgsProcessingFeatureBasedAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
1154{
1155 prepareSource( parameters, context );
1156 QString dest;
1157 std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest,
1158 outputFields( mSource->fields() ),
1159 outputWkbType( mSource->wkbType() ),
1160 outputCrs( mSource->sourceCrs() ),
1161 sinkFlags() ) );
1162 if ( !sink )
1163 throw QgsProcessingException( invalidSinkError( parameters, QStringLiteral( "OUTPUT" ) ) );
1164
1165 // prepare expression context for feature iteration
1166 QgsExpressionContext prevContext = context.expressionContext();
1167 QgsExpressionContext algContext = prevContext;
1168
1169 algContext.appendScopes( createExpressionContext( parameters, context, mSource.get() ).takeScopes() );
1170 context.setExpressionContext( algContext );
1171
1172 long count = mSource->featureCount();
1173
1174 QgsFeature f;
1175 QgsFeatureIterator it = mSource->getFeatures( request(), sourceFlags() );
1176
1177 double step = count > 0 ? 100.0 / count : 1;
1178 int current = 0;
1179 while ( it.nextFeature( f ) )
1180 {
1181 if ( feedback->isCanceled() )
1182 {
1183 break;
1184 }
1185
1186 context.expressionContext().setFeature( f );
1187 const QgsFeatureList transformed = processFeature( f, context, feedback );
1188 for ( QgsFeature transformedFeature : transformed )
1189 sink->addFeature( transformedFeature, QgsFeatureSink::FastInsert );
1190
1191 feedback->setProgress( current * step );
1192 current++;
1193 }
1194
1195 sink->finalize();
1196
1197 mSource.reset();
1198
1199 // probably not necessary - context's aren't usually recycled, but can't hurt
1200 context.setExpressionContext( prevContext );
1201
1202 QVariantMap outputs;
1203 outputs.insert( QStringLiteral( "OUTPUT" ), dest );
1204 return outputs;
1205}
1206
1211
1213{
1214 const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l );
1215 if ( !layer )
1216 return false;
1217
1218 Qgis::GeometryType inPlaceGeometryType = layer->geometryType();
1219 if ( !inputLayerTypes().empty() &&
1220 !inputLayerTypes().contains( static_cast< int >( Qgis::ProcessingSourceType::Vector ) ) &&
1221 !inputLayerTypes().contains( static_cast< int >( Qgis::ProcessingSourceType::VectorAnyGeometry ) ) &&
1222 ( ( inPlaceGeometryType == Qgis::GeometryType::Polygon && !inputLayerTypes().contains( static_cast< int >( Qgis::ProcessingSourceType::VectorPolygon ) ) ) ||
1223 ( inPlaceGeometryType == Qgis::GeometryType::Line && !inputLayerTypes().contains( static_cast< int >( Qgis::ProcessingSourceType::VectorLine ) ) ) ||
1224 ( inPlaceGeometryType == Qgis::GeometryType::Point && !inputLayerTypes().contains( static_cast< int >( Qgis::ProcessingSourceType::VectorPoint ) ) ) ) )
1225 return false;
1226
1228 if ( inPlaceGeometryType == Qgis::GeometryType::Point )
1229 type = Qgis::WkbType::Point;
1230 else if ( inPlaceGeometryType == Qgis::GeometryType::Line )
1232 else if ( inPlaceGeometryType == Qgis::GeometryType::Polygon )
1234
1235 if ( QgsWkbTypes::geometryType( outputWkbType( type ) ) != inPlaceGeometryType )
1236 return false;
1237
1238 return true;
1239}
1240
1242{
1243 if ( ! mSource )
1244 {
1245 mSource.reset( parameterAsSource( parameters, inputParameterName(), context ) );
1246 if ( !mSource )
1248 }
1249}
1250
1251
1252QgsProcessingAlgorithm::VectorProperties QgsProcessingFeatureBasedAlgorithm::sinkProperties( const QString &sink, const QVariantMap &parameters, QgsProcessingContext &context, const QMap<QString, QgsProcessingAlgorithm::VectorProperties> &sourceProperties ) const
1253{
1255 if ( sink == QLatin1String( "OUTPUT" ) )
1256 {
1257 if ( sourceProperties.value( QStringLiteral( "INPUT" ) ).availability == Qgis::ProcessingPropertyAvailability::Available )
1258 {
1259 const VectorProperties inputProps = sourceProperties.value( QStringLiteral( "INPUT" ) );
1260 result.fields = outputFields( inputProps.fields );
1261 result.crs = outputCrs( inputProps.crs );
1262 result.wkbType = outputWkbType( inputProps.wkbType );
1264 return result;
1265 }
1266 else
1267 {
1268 std::unique_ptr< QgsProcessingFeatureSource > source( parameterAsSource( parameters, QStringLiteral( "INPUT" ), context ) );
1269 if ( source )
1270 {
1271 result.fields = outputFields( source->fields() );
1272 result.crs = outputCrs( source->sourceCrs() );
1273 result.wkbType = outputWkbType( source->wkbType() );
1275 return result;
1276 }
1277 }
1278 }
1279 return result;
1280}
1281
ProcessingSourceType
Processing data source types.
Definition qgis.h:3333
@ 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.
@ 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:3410
QFlags< ProcessingAlgorithmDocumentationFlag > ProcessingAlgorithmDocumentationFlags
Flags describing algorithm behavior for documentation purposes.
Definition qgis.h:3430
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:3507
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.
This class 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.
This class wraps a request for features to a vector layer (or directly its vector data provider).
An interface for objects which accept features via addFeature(s) methods.
QFlags< SinkFlag > SinkFlags
@ 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:76
QgsCoordinateReferenceSystem crs
Definition qgsmaplayer.h:83
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)
Adds a message to the log instance (and creates it if necessary).
Represents a map layer supporting display of point clouds.
A class to represent 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.
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 data sets.
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.