Python Toolbox ArcPy

Programování v GIS 3

Jan Caha

2025-11-11

Python Toolbox

Třída toolbox

  • hlavní třída s nastavením toolboxu a výpisem nástrojů

Pozor

V seznamu nástrojů se uvádí název třídy, nikoliv instance nástroje - tzn. Tool nikoliv Tool().

class Toolbox:
    def __init__(self):
        self.label = "Toolbox"
        self.alias = "toolbox"

        self.tools = [Tool]

Třída nástroje

  • python třída, která musí obsahovat následující metody - __init__(), getParameterInfo(), isLicensed(), updateParameters(), updateMessages(), execute(), postExecute(), s příslušnou signaturou
  • všechny metody jsou volány automaticky v rámci dílčích kroků použití nástroje

Příklad třídy nástroje dle dokumentace

class Tool:
    def __init__(self):
        """Define the tool (tool name is the name of the class)."""
        self.label = "Tool"
        self.description = ""

    def getParameterInfo(self):
        """Define the tool parameters."""
        params = None
        return params

    def isLicensed(self):
        """Set whether the tool is licensed to execute."""
        return True

    def updateParameters(self, parameters):
        """Modify the values and properties of parameters before internal
        validation is performed.  This method is called whenever a parameter
        has been changed."""
        return

    def updateMessages(self, parameters):
        """Modify the messages created by internal validation for each tool
        parameter. This method is called after internal validation."""
        return

    def execute(self, parameters, messages):
        """The source code of the tool."""
        return

    def postExecute(self, parameters):
        """This method takes place after outputs are processed and
        added to the display."""
        return

Parametry nástroje

  • dokumentace
  • třída arcpy.Parameter s různými typy parametrů, které vytvoří příslušný objekt
  • param0 = arcpy.Parameter(displayName, name, datatype, parameterType, direction), detaily nutné vyčíst v dokumentaci
  • parametry se následně shrnou do seznamu a ten je výsledným výstupem metody getParameterInfo - return [param0, param1, ...]

Závislosti parametrů

  • některé typy parametrů přirozeně vyvolávají vzájemné závislosti
  • např. máme param0, který je typu GPFeatureLayer a param1, který je typu GPValueTable
  • pak lze nastavit doplňkové vlastnosti parametru param1, které závisí na hodnotě parametru param0
param1.parameterDependencies = [param0.name]
param1.columns = [["Field", "Field"], ["GPString", "Statistic Type"]]
param1.filters[1].type = "ValueList"
param1.values = [["NAME", "SUM"]]
param1.filters[1].list = ["SUM", "MIN", "MAX", "STDEV", "MEAN"]

Výchozí hodnota parametru

  • lze nastavit jako param0.defaultEnvironmentName = "workspace"
  • či např. jako param0.value = os.path.join(os.path.dirname(__file__), 'Fire_Station.lyrx')

Filtry

  • samostatná kapitola, umožňuje pro parametry omezovat vstupní hodnoty
  • liší se dle typu vstupního parametru
  • podle dokumentace

Výstupní hodnoty

  • lze např. automaticky stylovat výstupní vrstvu pomocí připraveného souboru s nastavením - param1.symbology = os.path.join(os.path.dirname(__file__), 'raster_symbology.lyrx')

Použití vstupních parametrů

  • v metodě execute()
  • získávají se z proměnné parameters, obvykle jako test - param0 = parameters[0].valueAsText

Komunikace s uživatelem

  • v metodě execute() lze využít proměnnou messages pro výpis chyb a informací
  • messages.addMessage("Message"), messages.addWarning("Warning"), messages.addError("Error")
  • messages.addGPMessages() - přidá všechny zprávy z posledního spuštěného nástroje - užitečné tam, kde v rámci nástroje spouštíme dílčí nástroje

Toolbox

  • výsledný toolbox lze šifrovat heslem
  • bez hesla nelze toolbox otevřít a zobrazit jeho obsah
  • heslo se zadává při otevření toolboxu v ArcGIS Pro

Pozor

Heslo nelze obnovit, pokud se zapomene, je toolbox ztracen.

Dotazy?