Wert berechnen ist ein vielseitiges ModelBuilder-Werkzeug, das einen Wert von einem Python-Ausdruck zurückgibt. Das Werkzeug unterstützt einfache Berechnungen, integrierte Python-Funktionen und -Module, Geoverarbeitungsfunktionen und -objekte sowie Ihren eigenen Python-Code.
Ausdruck
Mit dem Parameter Ausdruck können Sie eine Vielzahl von Berechnungen durchführen.
Mathematische Berechnungen
Mit dem Werkzeug Wert berechnen können einfache mathematische Ausdrücke in Python ausgewertet werden. Betrachten Sie beispielsweise die folgenden Ausdrücke:
Operator | Erläuterung | Beispiel | Ergebnis |
---|---|---|---|
x + y | x plus y | 3 + 5 | 8 |
x - y | x minus y | 4,3 - 2,1 | 2,2 |
x * y | x mal y | 8 * 9 | 72 |
x / y | X dividiert durch Y | 4 / 1,25 | 3,2 |
x // y | X dividiert durch Y (Division ohne Rest) | 4 // 1,25 | 3 |
x % y | Rest der Division von X durch Y | 4 % 1,25 | 0,25 |
x**y | x potenziert mit y | 2 ** 3 | 8 |
x < y | wenn x kleiner als y ist | 2 < 3 | 1 |
x <= y | wenn x kleiner als oder gleich y ist | 2 <=3 | 1 |
x > y | wenn x größer als y ist | 2 > 3 | 0 |
x >= y | wenn x größer als oder gleich y ist | 2 >= 3 | 0 |
x == y | wenn x gleich y ist | 2 == 3 | 0 |
x != y | wenn x ungleich y ist | 2 != 3 | 1 |
Mit dem Werkzeug Wert berechnen kann das math-Modul von Python zur Durchführung komplexer mathematischer Operationen eingesetzt werden.
Gibt die Quadratwurzel eines Wertes zurück.
Expression:
math.sqrt(25)
Gibt den Kosinus eines Wertes in Radiant zurück.
Expression:
math.cos(0.5)
Das math-Modul unterstützt außerdem Konstanten.
Gibt den konstanten Wert π zurück.
Expression:
math.pi
Mit dem Werkzeug Wert berechnen kann das random-Modul zum Generieren von Zufallszahlen verwendet werden. Es folgen einige Beispiele für die Verwendung des Moduls random:
Gibt eine zufällige ganze Zahl zwischen 0 und 10 zurück.
Expression:
random.randint(0, 10)
Gibt einen aus einer Normalverteilung mit dem Mittelwert 10 und der Standardabweichung 3 abgeleiteten Zufallswert zurück.
Expression:
random.normalvariate(10, 3)
Beispiele mit Zeichenfolgen
Python-Operatoren und ein Index können für Zeichenfolgenwerte verwendet werden.
Beispiel | Erläuterung | Ergebnis |
---|---|---|
"Input" + " " + "Name" | Zeichenfolgenverkettung | Eingabename |
"Input_Name"[6:] | Vom siebten Zeichen bis zum letzten Zeichen. | Name |
"STREET".lower() | Konvertiert einen Zeichenfolgenwert in Kleinbuchstaben. | Straße |
"Street Name".split()[1] | Teilt eine Zeichenfolge durch Leerzeichen in mehrere Zeichenfolgen auf. Die zweite zurückgegebene Zeichenfolge wird abgerufen. | Name |
Mit dem Werkzeug Wert berechnen können Zeichen ersetzt oder aus einer Zeichenfolge entfernt werden. Wenn beispielsweise ein Eingabewert mit Dezimalstellen (in diesem Fall der Feldwert der Eingabetabelle) vorliegt und Sie den Wert über die direkte Variablenersetzung in dem von einem anderen Werkzeug ausgegebenen Namen verwenden möchten, können Sie mit der Methode replace den Dezimalwert ersetzen.
Expression:
"%Value%".replace(".", "")
In Python werden umgekehrte Schrägstriche (\) als Escape-Zeichen behandelt. Beispiel: In der Zeichenfolge "C:\temp\newProjectFolder" steht \n für einen Zeilenumbruch und \t für einen Tabulator. Verwenden Sie eines der folgenden Verfahren, um sicherzustellen, dass die Zeichenfolge wie erwartet ausgewertet wird:
- Verwenden Sie statt eines umgekehrten Schrägstrichs einen Schrägstrich (/).
- Verwenden Sie statt eines umgekehrten Schrägstrichs zwei umgekehrte Schrägstriche.
- Konvertieren Sie die Zeichenfolge in ein Zeichenfolgenliteral, indem Sie der Zeichenfolge den Buchstaben r voranstellen.
Datentyp
Der Parameter Datentyp bestimmt den Datentyp der Ausgabe des Werkzeugs Wert berechnen. Es muss unbedingt sichergestellt werden, dass der Ausgabedatentyp des Werkzeugs Wert berechnen mit dem erforderlichen Eingabedatentyp des anschließend verwendeten Werkzeugs übereinstimmt.
Sie können die Ausgabe des Werkzeugs Wert berechnen in jedem Werkzeug von Spatial Analyst verwenden, das ein Raster oder einen konstanten Wert akzeptiert, z. B. Plus, Greater Than und Less Than. Um die Ausgabe von Wert berechnen zu verwenden, ändern Sie den Wert von Datentyp in Formuliertes Raster. Dieser Datentyp ist eine Raster-Oberfläche, deren Zellenwerte durch eine Formel oder eine Konstante angegeben werden.
Der berechnete Wert vom Datentyp Formuliertes Raster wird als Eingabe für das Werkzeug Greater Than verwendet.
Expression:
%A% + 120
Für den Wert des Parameters Ausdruck wird direkte Variablenersetzung verwendet. Beim Ausführen des Werkzeugs wird "%A%" durch den Wert der Variablen A ersetzt. Der Wert der Variablen A plus 120 wird im Werkzeug Greater Than als Eingabe-Raster oder konstanter Wert 1 verwendet.
Code-Block
Für einfache Berechnungen müssen Sie häufig den Parameter Ausdruck verwenden. Für kompliziertere Ausdrücke, zum Beispiel mehrzeilige Berechnungen oder logische Operationen ("if-else"), müssen Sie den Parameter Code-Block verwenden. Der Parameter Code-Block muss zusammen mit dem Parameter Ausdruck verwendet werden.
Im Parameter Code-Block definierte Variablen können über den Parameter Ausdruck referenziert werden.
Beispielsweise ist im Code-Block size definiert, um die Anzahl der Dateien im Ordnerpfad zu zählen. Während der Ausführung wird die Variable vom Parameter Ausdruck referenziert. Der Ausgabewert des Werkzeugs Wert berechnen ist die tatsächliche Anzahl der Dateien plus fünf.
Expression:
5 + size
Code Block:
import os
size = 0
folderpath = r"C:\temp\csvFiles"
for ele in os.scandir(folderpath):
size += 1
Mit dem Parameter Code-Block können Sie eine Funktion definieren und diese über den Parameter Ausdruck aufrufen. In Python werden Funktionen mit der def-Anweisung, gefolgt vom Namen der Funktion, definiert. Eine Funktion kann erforderliche und optionale Argumente oder auch keine Argumente enthalten. Verwenden Sie zum Zurückgeben der Ausgabe einer Funktion die return-Anweisung.
Zeit
Sie können mit dem Parameter Code-Block Python-Module und -Methoden aufrufen. Im folgenden Beispiel wird die Methode ctime des time-Moduls aufgerufen.
Wenn Sie Daten regelmäßig sichern müssen, lassen sich die Daten leichter unterscheiden, indem dem Ordnernamen eine Zeitangabe hinzugefügt wird. Im folgenden Beispiel wird gezeigt, wie einem Ordnernamen ein Zeitstempel hinzugefügt wird. Die Funktion time.ctime gibt das aktuelle Datum und die aktuelle Uhrzeit z. B. im Format Tue Jun 22 16:24:08 2021 zurück. Dieser Rückgabewert kann im Werkzeug Ordner erstellen nicht direkt als Ordnername verwendet werden, da Leerzeichen und Interpunktionszeichen nicht zulässig sind. Um sie zu entfernen, wird die Python-Methode replace für jedes zu ersetzende Element gestapelt. Der Name des Ordners in diesem Beispiel lautet daher TueJun221622522021.
Expression:
gettime()
Code Block:
import time
def gettime():
# First replace removes punctuation marks. Second replace removes spaces.
return time.ctime().replace(":", "").replace(" ", "")
"if-then-else" und direkte Ersetzung
Der Parameter Code-Block akzeptiert auch Werte über Eingabeparameter von Funktionen. Die Anzahl der Parameter im Code-Block muss mit der Anzahl der Parameter im Parameter Ausdruck übereinstimmen. Beim Ausführen des Werkzeugs wird der Parameterwert vom Ausdruck an den Code-Block übergeben. Sie können einen Modellvariablenwert übergeben, indem Sie eine direkte Variable als Ausdruck verwenden, wie unten gezeigt.
Im folgenden Beispiel verfügt die Funktion getAspectDir über den Parameter inValue. Der Parameter Ausdruck übergibt den Wert der Variablen Input Degree an den Code-Block.
Im folgenden Beispiel wird die Neigungsrichtung anhand des Wertes von Input Degree berechnet. Wenn der Wert der Variablen Input Degree 223 beträgt, wird als Neigungsrichtung South zurückgegeben.
Expression:
getAspectDir("%Input Degree%")
Code Block:
def getAspectDir(inValue):
inValue = int(inValue)
if inValue >= 45 and inValue < 135:
return "East"
elif inValue >= 135 and inValue < 225:
return "South"
elif inValue >= 225 and inValue < 315:
return "West"
else:
return "North"
Mehrere direkte Ersetzungen
Der Parameter Code-Block akzeptiert auch mehrere Werte direkter Variablen.
Der Code-Block überprüft, ob der Wert der Variablen Benutzereingabewert größer als der Wert von Standardwert ist. Wenn dies zutrifft, ist der Ausgabewert des Werkzeugs Wert berechnen der Benutzereingabewert. Andernfalls ist der Ausgabewert der Standardwert. In diesem Fall lautet der Ausgabewert 10.
Expression:
fn("%User Input Value%","%Default Value%")
Code Block:
def fn(userInputValue, defaultValue):
if float(userInputValue) > float(defaultValue):
return float(userInputValue)
else:
return float(defaultValue)
Vorsicht:
Schließen Sie direkte Variablen vom Typ "String" in einem Ausdruck in Anführungszeichen ein ("%string variable%"). Für direkte Variablen mit numerischen Typen ("Double", "Long") sind keine Anführungszeichen erforderlich (%Double%).
Datenpfadverbindung
Im folgenden Beispiel wird das Kopieren von Features in einen angegebenen Ordnerpad und -namen veranschaulicht. Der Parameter Code-Block akzeptiert zwei Werte: Ordnerpfad und Ordnername. Der Code überprüft, ob die Kombination von Ordnerpfad und -name vorhanden ist. Wenn der kombinierte Pfad nicht vorhanden ist, fügt die Funktion makedirs fehlende Ordner hinzu. Der Buchstabe r vor dem Ordnerpfad im Parameter Ausdruck ist erforderlich, um sicherzustellen, dass der Pfad ordnungsgemäß ausgewertet wird.
Expression:
getPath(r"%Folder Path%", "%Folder Name%")
Code Block:
import os
def getPath(folderPath, folderName):
outPath = os.path.join(folderPath, folderName)
if not os.path.exists(outPath):
os.makedirs(outPath)
return outPath
Verbindung von Pufferabstandswert und -einheit
Gehen Sie folgendermaßen vor, um das Werkzeug Wert berechnen mit einem Werkzeug zu verwenden, das eine lineare Entfernung akzeptiert, z. B. das Werkzeug Puffer:
- Geben Sie im Parameter Code-Block einen Entfernungswert und eine lineare Einheit zurück.
- Legen Sie den Parameter Datentyp auf Lineare Einheit fest.
In diesem Beispiel gibt das Werkzeug Wert berechnen den Wert 12 Kilometers für die Verwendung im Werkzeug Puffer zurück.
Expression:
fn("%A%", "%B%")
Code Block:
def fn(a, b):
distance = int(a) * int(b)
return f"{distance} Kilometers"
ArcPy
ArcPy ist ein Python-Site-Paket von Esri, das eine nützliche und produktive Durchführung von geographischen Datenanalysen, Datenkonvertierung, Datenmanagement und Kartenautomatisierung mit Python ermöglicht. ArcPy bietet Zugriff auf Geoverarbeitungswerkzeuge sowie zusätzliche Funktionen, Klassen und Module, mit denen Sie einfache und komplexe Workflows schnell erstellen können.
Cursor
Sie können für das Arbeiten mit Daten einen Cursor verwenden. Ein Cursor ist ein Datenzugriffsobjekt, mit dem entweder die Zeilen in einer Tabelle durchlaufen oder neue Zeilen in eine Tabelle eingefügt werden können. Cursor können in drei Formen auftreten: als Such-, Einfüge- oder Aktualisierungs-Cursor. Diese werden in der Regel zum Lesen und Schreiben von Daten verwendet.
Um Baumartencode in den entsprechenden allgemeinen Namen zu konvertieren, können Sie mit dem UpdateCursor jeden Baum in der Tabelle durchlaufen. Weisen Sie anhand des Baumcodewertes dem Baumartencode den allgemeinen Namen zu. Wenn z. B. der Code des Baumes PIPO lautet, weisen Sie dem Feld CommonName den allgemeinen Namen Gelbkiefer zu.
Expression:
fn("%trees%")
Code Block:
def fn(trees):
with arcpy.da.UpdateCursor(trees, ["Code", "CommonName"]) as cursor:
for row in cursor:
if row[0] == "PIPO":
row[1] = "ponderosa pine"
elif row[0] == "BEPA":
row[1] = "paper birch"
elif row[0] == "FAGR":
row[1] = "American beech"
cursor.updateRow(row)
Geoverarbeitungswerkzeuge
ArcPy bietet auch Zugriff auf Geoverarbeitungswerkzeuge. Sie können Geoverarbeitungswerkzeuge im Parameter Code-Block aufrufen.
Im folgenden Beispiel verwendet das Werkzeug Wert berechnen die Werkzeuge Layer nach Attributen auswählen, Features kopieren und Puffer. Die Werkzeuge wählen alle Straßen im Feld LABEL aus, die das Wort HIGHWAY, enthalten, kopieren sie und puffern dann die Straßen.
Expression:
fn("%Input Feature Class%")
Code Block:
def fn(InputFC):
# To allow overwriting outputs change overwriteOutput option to True.
arcpy.env.overwriteOutput = True
# Process: Select Layer By Attribute (Select Layer By Attribute) (management)
InputFC_Layer, Count = arcpy.management.SelectLayerByAttribute(InputFC, "NEW_SELECTION", "LABEL LIKE '%HIGHWAY%'")
# Process: Copy Features (Copy Features) (management)
copyFeaturesOutput = "C:\\temp\\Output.gdb\\copyFeaturesOutput"
arcpy.management.CopyFeatures(InputFC_Layer, copyFeaturesOutput)
# Process: Buffer (Buffer) (analysis)
bufferOutput = "C:\\temp\\Output.gdb\\bufferOutput"
arcpy.analysis.Buffer(copyFeaturesOutput, bufferOutput, "1500 Feet")
return bufferOutput