Erstellen komplexer Anweisungen

Mit der Spatial Analyst-Lizenz verfügbar.

Mit der Image Analyst-Lizenz verfügbar.

Einer der Hauptaspekte von "Map Algebra" liegt in der Fähigkeit, eine aus mehreren Operatoren und Werkzeugen bestehende Anweisung zu einer Anweisung zusammenzusetzen. Die Möglichkeit der Eingabe mehrerer Operatoren und Werkzeuge in einer einzelnen Anweisung erleichtert die Modellierung komplexer Interaktionen, wodurch die Gesamtverarbeitungszeit verkürzt wird. Komplexe Ausdrücke sind nicht auf die Funktionen der Werkzeuge der Erweiterung ArcGIS Spatial Analyst beschränkt, sie können Werkzeuge aus beliebigen anderen Toolboxes umfassen. Beim Erstellen komplexer Anweisungen gibt es bestimmte Interaktionsregeln, die zur ordnungsgemäßen Ausführung erforderlich sein können.

Komplexe Anweisungsregeln

  • Bei komplexen Anweisungen wird lediglich die Ausgabe links vom Gleichheitszeichen zu einem Rasterobjekt.
  • Die Reihenfolge der Ausführung eines Ausdrucks wird durch Klammern und die Vorrangsstufe der verwendeten Operatoren bestimmt. Weitere Informationen zur Operatorrangfolge finden Sie in der Operatorrangfolgentabelle.
    outRaster = Raster("inras1") + Raster("inras2") / Raster("inras3")
  • In der Anweisung oben wird inras2 durch inras3 dividiert, und das Ergebnis wird zu inras1 addiert.

    Hinweis:

    Die Vorrangsstufe der Operatoren muss bekannt sein. Boolesche Operatoren (~, &, ^, |) haben eine höhere Vorrangstufe als relationale Operatoren (<, <=, >, >=, ==, !=), die Auswirkungen auf die Erstellung Ihrer Ausdrücke haben. Weitere Informationen zur Operatorrangfolge finden Sie in der Operatorrangfolgentabelle.

  • Sie können die Reihenfolge der Ausführung jedoch mithilfe von Klammern steuern. Klammern können geschachtelt werden, wobei der Ausdruck in der innersten Klammer, ungeachtet des Vorrangswertes des Operators, zuerst verarbeitet wird.
    outRas = Raster("inras1") / (Raster("inras2") + Raster("inras3"))

    In der Anweisung oben wird inras1 durch die Summe von inras2 und inras3 dividiert.

  • Wenn mehrere boolesche (~, &, ^, |) bzw. relationale (<, <=, >, >=, ==, !=) Operatoren nacheinander in einem einzigen Ausdruck verwendet werden, müssen Sie Klammern verwenden. Klammern sind z. B. in folgendem Ausdruck erforderlich: (a>2) & (a<5).
    outRas = (Raster("a") > 2 ) & ( Raster("a") < 5)
    Detailinformationen:

    Für manche Ausdrücke sind vielleicht keine Klammern erforderlich, sondern sie müssen möglicherweise umgeschrieben werden. Ein Ausdruck in der Form von a < b < c wird z. B. nicht ausgeführt, und durch Hinzufügen von Klammern wird die Bedeutung des Ausdrucks verändert. Um diesen Ausdruck erfolgreich auszuführen, muss er daher in der Form von (a < b) & (b < c) umgeschrieben werden.

  • Operatoren, Variablen, Nummern und Werkzeuge können alle in komplexen Anweisungen verwendet werden.
    outRas = Sin("inras1") + Raster("inras2") + 8
    const = 10
    outRas = Raster("inras1") + 2 * const
  • Alle Regeln, die auf Klammern für Anweisungen anzuwenden sind, die mit Operatoren erstellt wurden, gelten auch für solche Anweisungen, die mit Werkzeugen und Operatoren erstellt wurden. Das Werkzeug oder der Operator, das/der sich in den innersten Klammern befindet, wird zuerst verarbeitet.
    num = 10
    outRas = (ZonalStatistics((Raster("inras2") + Raster("inras3")),
                             "Value", "valueras", "MAXIMUM") - num ) / 8

    In der Anweisung oben wird die Summe von inras2 und inras3 als Eingabe für das Werkzeug Zonale Statistiken verwendet. Der Wert von num wird dann subtrahiert, bevor er dividiert wird.

  • In einer Reihe von Anweisungen kann die Ausgabe einer vorhergehenden Anweisung als Eingabe in eine nachfolgende Anweisung verwendet werden.
    outAdd = Raster("inras1") + Raster("inras2")
    outRas = FocalStatistics(outAdd, NbrCircle(5, "Map"), "MEAN")

    Im Beispiel oben ist outAdd ein Raster-Objekt, das aus der Addition von inras1 und inras2 erstellt wurde. Da outAdd eine Variable ist, sind keine Anführungszeichen erforderlich, wenn sie als Eingabe für das nachfolgende Werkzeug Focal Statistics verwendet wird.

  • Jedes Werkzeug kann in ein anderes Werkzeug eingebettet werden, und zwar unabhängig davon, ob das Ergebnis ein Raster oder eine Feature-Class ist. Die erforderliche Ausgabe des eingebetteten Werkzeugs wird als Eingabe für das äußere Werkzeug verwendet.
    outdistance = EucDistance(ContourList("elevation", "#", [1500]))
    In diesem Beispiel wird die Ausgabe der Konturlinienliste als Eingabe für das Werkzeug Euklidische Entfernung verwendet.
    dist = EucDistance(arcpy.Select_analysis("schools", "#", "Pop>2000"))
    Im Beispiel oben wird die Ausgabe des Werkzeugs Selektieren der Toolbox "Analysis" als Eingabe für das Werkzeug Euklidische Entfernung verwendet.
    Hinweis:

    Da das eingebettete Werkzeug eine Ausgabe erstellt, die lediglich einen Zwischenschritt eines größeren Workflows darstellt, kann das Ausgabeargument durch das Hash-Symbol "#" ersetzt werden, damit das Werkzeug einen eindeutigen Pfad und Namen für diese temporäre Ausgabe erstellen kann. Die Verwendung des Hash-Symbols wird ausführlich im Abschnitt Werkzeugausgabe im Hilfethema "Verwenden von Werkzeugen in Python" erläutert.

  • Um eine optionale Ausgabe eines Werkzeugs in einem Ausdruck zu verwenden, muss der Name oder die Variable des Datasets verwendet werden, die das Dataset repräsentiert.
    costDist = CostDistance("source", "in_cost", 15000, "out_bklink") 
    costOut = CostPath("dest", costDist, "out_bklink")
    Im Beispiel oben wird das optionale Ausgabe-Rückverknüpfungs-Raster im Workspace mit dem Namen "out_bklink" ausgegeben.
    bklink = "C:/results/out_bklink"
    costDist = CostDistance("source", "in_cost", 15000, bklink) 
    costOut = CostPath("dest", costDist, bklink)
    Im Beispiel oben wird das Rückverknüpfungs-Raster vor der Ausführung des Werkzeugs durch eine Variable definiert. Die Variable verweist auf den Speicherort und den Namen des Ausgabe-Rückverknüpfungs-Rasters.

Verwandte Themen