Processingové nástroje QGIS Python API

Programování v GIS 4

Jan Caha

2024-11-03

Processingové nástroje

  • objekty odvozené od třídy QgsProcessingAlgorithm či QgsProcessingFeatureBasedAlgorithm
  • vytváření vlastních nástrojů
  • rozšíření třídy o několik metod
  • přímo v QGIS nachystaná šablona nástroje
  • stačí je nakopírovat do složky a jsou automaticky dostupné v QGIS

QgsProcessingAlgorithm

  • metody name(), displayName(), group(), groupId(), shortHelpString(), icon()
  • metoda initAlgorithm() kde pomocí funkce self.addParameter() přidáváme jednotlivé parametry (třídy odvozené od QgsProcessingParameterDefinition)
  • metoda processAlgorithm() kde dojde k samotnému zpracování dat

QgsProcessingParameterDefinition a odvozené třídy

  • velká řada tříd pro různé typy parametrů
  • umožňují nastavení daného parametru a tvorbu jeho GUI v dialogu
  • lze je pak snadno načíst a zpracovat pomocí funkcí self.parameterAs...() v QgsProcessingAlgorithm objektu

Dvě podstatné třídy QgsProcessingContext a QgsProcessingFeedback

  • obě figurují ve funkci processAlgorithm()
  • QgsProcessingFeedback slouží ke komunikaci s uživatele
  • QgsProcessingContext obsahuje informace o prostředí, ve kterém se algoritmus provádí (často není třeba, ale může se hodit)

Funkce pro kontrolu vstupních dat

  • checkParameterValues(self, parameters, context) -> Tuple[bool, str]
  • kontrola vstupních dat, zda splňují požadavky, ještě před spuštěním nástroje
  • vrací True pokud je vše v pořádku, jinak False a chybovou hlášku
  • funkce není povinná, existují vychozé implementace v třídě QgsProcessingAlgorithm, která vždy vrací (True, "")

Prezentace výsledku algoritmu

  • buď necháme na výchozím QGIS kódu (to je to, co už jsme viděli)
  • nebo vytvoříme funkci postProcessAlgorithm(self, context: QgsProcessingContext, feedback: QgsProcessingFeedback), kde můžeme výsledek algoritmu ještě dále zpracovat
  • např. nastavit styl vrstvy atd.
  • tato funkce je volána po skončení processAlgorithm() a měla by vrace stejný Python objekt, který byl vrácen v processAlgorithm()
  • aby byl zajištěň přenos dat mezi processAlgorithm() a postProcessAlgorithm(), je třeba vytvořit proměnnou třídy, která bude uchovávat výsledek (tzn. self.result = ...)

QgsProcessingFeatureBasedAlgorithm

  • verze QgsProcessingAlgorithm určená pro modifikaci vektorových dat
  • hlavní funkce processFeature() pro zpracování jednotlivých prvků
  • využivá se měně často než QgsProcessingAlgorithm, alespoň v pluginech

Spouštění nástrojů z kódu

from qgis import processing

result = processing.run('nazev:algoritmu',{'parametry': 'hodnoty'})
  • tento kód lze získat z dialogu nástroje v QGIS (kopírovat jako Python skript, ale existuje i JSON varianta)
  • takto lze řetězit několik nástrojů za sebou (pokud použijeme, pak je vhodné využít QgsProcessingMultiStepFeedback pro zobrazení průběhu)

Zdroje

Dotazy?