Die Eingabe von Werten über die Tastatur ist nicht die einzige Möglichkeit zum Bearbeiten von Werten in einer Tabelle. In einigen Fällen möchten Sie möglicherweise eine mathematische Berechnung durchführen, um einen Feldwert für einen einzelnen oder alle Datensätze zu definieren. Sie können einfache und erweiterte Berechnungen für alle oder ausgewählte Datensätze durchführen. Darüber hinaus können Sie Fläche, Länge, Umfang und andere geometrische Eigenschaften von Feldern in Attributtabellen bearbeiten. Die Abschnitte unten enthalten Beispiele für die Verwendung der Feldberechnung. Berechnungen werden mit Python, SQL und Arcade durchgeführt.
Dieses Thema konzentriert sich auf Python-basierte Beispiele für Feld berechnen. Weitere Informationen über Arcade-Ausdrücke finden Sie im ArcGIS Arcade-Handbuch. Weitere Informationen über SQL-Ausdrücke finden Sie unter Berechnen eines Feldes.
Hinweis:
- Python erfordert eine Einrückung als Teil der Syntax. Verwenden Sie zwei oder vier Leerzeichen zur Definition jeder strukturellen Ebene. Richten Sie den Anfang und das Ende von Anweisungsblöcken aneinander aus, gehen Sie einheitlich vor.
- Python-Berechnungsausdrucksfelder werden in Ausrufezeichen (!!) eingeschlossen.
- Beachten Sie beim Benennen von Variablen, dass in Python die Groß- und Kleinschreibung relevant ist. value ist daher nicht identisch mit Value.
- Nachdem Sie Anweisungen eingegeben haben, klicken Sie auf die Schaltfläche Exportieren, um diese in eine Datei zu schreiben. Mit der Schaltfläche Importieren kann eine vorhandene Berechnungsdatei gefunden und ausgewählt werden.
Einfache Berechnungen
Einfache Zeichenfolgenbeispiele
Zeichenfolgen werden von einer Reihe von Python-Zeichenfolgefunktionen unterstützt, einschließlich capitalize, rstrip und replace.
Schreibt das erste Zeichen der Zeichenfolge im Feld CITY_NAME groß.
!CITY_NAME!.capitalize()
Entfernt alle Leerstellen am Ende der Zeichenfolge im Feld CITY_NAME.
!CITY_NAME!.rstrip()
Ersetzt alle Vorkommen von "california", die im Feld STATE_NAME gefunden werden, durch "California".
!STATE_NAME!.replace("california", "California")
Sie können in Python durch Indizieren und Aufteilen auf Zeichen in einem Zeichenfolgenfeld zugreifen. Bei der Indizierung werden Zeichen an einer Indexposition abgerufen; beim Aufteilen wird eine Gruppe von Zeichen abgerufen. Nehmen Sie in der folgenden Tabelle an, dass !fieldname! ein Zeichenfolgenfeld mit dem Wert "abcde" ist.
Beispiel | Erklärung | Ergebnis |
---|---|---|
!fieldname![0] | Das erste Zeichen. | "a" |
!fieldname![-2] | Das vorletzte Zeichen. | "d" |
!fieldname![1:4] | Das zweite, dritte und vierte Zeichen. | "bcd" |
Python unterstützt auch die Formatierung von Zeichenfolgen mit der Methode format().
Kombiniert "FieldA" und "FieldB" mit Doppelpunkt getrennt.
"{}:{}".format(!FieldA!, !FieldB!)
Einfache mathematische Beispiele
Python stellt Werkzeuge zum Verarbeiten von Zahlen bereit. Python unterstützt außerdem eine Reihe von numerischen und mathematischen Funktionen einschließlich math, cmath, decimal, random, itertools, functools und operator.
Operator | Erklärung | Beispiel | Ergebnis |
---|---|---|---|
x + y | x plus y | 1,5 + 2,5 | 4,0 |
x - y | x minus y | 3,3 - 2,2 | 1,1 |
x * y | x mal y | 2,0 * 2,2 | 4,4 |
x / y | X dividiert durch Y | 4,0 / 1,25 | 3,2 |
x // y | X dividiert durch Y (restlose Division) | 4,0 // 1,25 | 3,0 |
x % y | x modulo y | 8 % 3 | 2 |
-x | negativer Ausdruck für x | x = 5 -x | -5 |
+x | x ist unverändert | x = 5 +x | 5 |
x ** y | x potenziert mit y | 2 ** 3 | 8 |
Multiplizieren
!Rank! * 2
Berechnet das Volumen einer Kugel mit einem Radiusfeld.
4.0 / 3.0 * math.pi * !Radius! ** 3
Ältere Versionen:
In ArcGIS Pro wird Python 3 und in ArcGIS Desktop wird Python 2 verwendet. Python 2 verwendet Ganzzahl-Mathematik, was bedeutet, dass die Division von zwei ganzzahligen Werten immer einen ganzzahligen Wert ergibt (3 / 2 = 1). In Python 3 ergibt die Division zweier ganzzahliger Werte einen Gleitkommawert (3 / 2 = 1.5).
Integrierte Python-Funktionen
Eine Reihe von integrierten Python-Funktionen steht zur Verwendung bereit, einschließlich max, min, round und sum.
Berechnet den Maximalwert für jeden Datensatz aus einer Liste mit Feldern.
max([!field1!, !field2!, !field3!])
Berechnet die Summe für jeden Datensatz aus einer Liste mit Feldern.
sum([!field1!, !field2!, !field3!])
Verwenden von Codeblöcken
Mit Python-Ausdrücken und dem Parameter Codeblock haben Sie folgende Möglichkeiten:
- Verwenden aller Python-Funktionen im Ausdruck
- Zugreifen auf Geoverarbeitungsfunktionen und -objekte
- Zugreifen auf Eigenschaften der Feature-Geometrie
- Zugreifen auf den neuen Zufallswertoperator
- Reklassifizieren von Werten mit If-Then-Else-Logik
Ausdruckstyp | Code-Block |
---|---|
Python 3 | Unterstützt die Python-Funktionalität. Der Codeblock wird mit Python-Funktionen (def) ausgedrückt. Geometrieeigenschaften werden ggf. mit Geoverarbeitungsobjekten, wie z. B. Punktobjekten, ausgedrückt. |
Arcade | Unterstützt Arcade-Funktionen. |
SQL | Unterstützt SQL-Ausdrücke. SQL-Ausdrücke wurden implementiert, um Berechnungen für Features-Services und Enterprise-Geodatabases insbesondere im Hinblick auf die Performance zu unterstützen. Statt Features oder Zeilen einzeln nacheinander zu berechnen, wird eine einzelne Anforderung an den Feature-Service oder die Datenbank gesendet. |
Ältere Versionen:
In ArcGIS Desktop unterstützt das Werkzeug Feld berechnen VB, PYTHON und PYTHON_9.3 als Ausdruckstypen. Der VB-Ausdruckstyp, der in einigen Produkten unterstützt wird, wird in 64-Bit-Produkten nicht unterstützt, einschließlich ArcGIS Pro.
Die Schlüsselwörter PYTHON und PYTHON_9.3 werden in ArcGIS Pro aus Gründen der Abwärtskompatibilität noch unterstützt, werden aber nicht mehr als Auswahlmöglichkeiten aufgeführt. Python-Skripte, in denen diese Schlüsselwörter verwendet werden, funktionieren auch weiterhin.
Der einzige Unterschied zwischen Python 3 und dem veralteten PYTHON_9.3-Schlüsselwort besteht darin, dass Python 3 die Werte in Datumsfeldern als datetime-Objekte von Python verwendet.
Hinweis:
Der Ausdruckstyp Python 3 bezieht sich nicht auf die mit ArcGIS Pro installierte Python-Version. Er ist lediglich das frühere dritte Python-bezogene Schlüsselwort (nach PYTHON und PYTHON_9.3).
Python-Funktionen werden mit dem Schlüsselwort def definiert, auf das der Name der Funktion und die Eingabeargumente der Funktion folgen. Eine Python-Funktion kann geschrieben werden, um eine beliebige Anzahl von Eingabeargumenten anzunehmen (einschließlich überhaupt keine Argumente). Ein Wert wird von der Funktion mit einer return-Anweisung zurückgegeben. Der Funktionsname bleibt Ihnen überlassen (darf jedoch keine Leerzeichen oder führenden Zahlen enthalten).
Hinweis:
Wird ein Wert nicht explizit von einer Funktion mit einer return-Anweisung zurückgegeben, gibt die Funktion den Wert None zurück.
Hinweis:
Denken Sie daran, dass Python eine Einrückung als Teil der Syntax erfordert. Verwenden Sie vier Leerzeichen zur Definition jeder strukturellen Ebene. Richten Sie den Anfang und das Ende von Anweisungsblöcken aneinander aus, gehen Sie einheitlich vor.
Codebeispiele – "math"
Hinweis:
Bei allen unten aufgeführten Beispielen wird der Ausdruckstyp Python 3 vorausgesetzt.
Rundet den Wert eines Feldes auf zwei Dezimalstellen.
Ausdruck:
round(!area!, 2)
Verwendet das Modul "math" zum Konvertieren von Meter in Fuß. Die Konvertierung wird mit 2 potenziert und mit der Fläche multipliziert.
Ausdruck:
MetersToFeet((float(!shape.area!)))
Codeblock:
import math
def MetersToFeet(area):
return math.pow(3.2808, 2) * area
Berechnen von Feldern mithilfe von Logik mit Python
Es wird auf Grundlage von Feldwerten klassifiziert.
Ausdruck:
Reclass(!WELL_YIELD!)
Codeblock:
def Reclass(WellYield):
if (WellYield >= 0 and WellYield <= 10):
return 1
elif (WellYield > 10 and WellYield <= 20):
return 2
elif (WellYield > 20 and WellYield <= 30):
return 3
elif (WellYield > 30):
return 4
Codebeispiele – Geometrie
Hinweis:
Weitere Informationen zum Konvertieren von Geometrieeinheiten finden Sie unten im Abschnitt "Konvertierung von Geometrieeinheiten".
Berechnet die Fläche eines Features.
Ausdruck:
!shape.area!
Berechnet die maximale X-Koordinate eines Features.
Ausdruck:
!shape.extent.XMax!
Berechnet die Stützpunktanzahl eines Features.
Ausdruck:
MySub(!shape!)
Code Block:
def MySub(feat):
partnum = 0
# Count the number of points in the current multipart feature
partcount = feat.partCount
pntcount = 0
# Enter while loop for each part in the feature (if a singlepart
# feature this will occur only once)
#
while partnum < partcount:
part = feat.getPart(partnum)
pnt = part.next()
# Enter while loop for each vertex
#
while pnt:
pntcount += 1
pnt = part.next()
# If pnt is null, either the part is finished or there
# is an interior ring
#
if not pnt:
pnt = part.next()
partnum += 1
return pntcount
Versetzt für eine Point-Feature-Class die X-Koordinate jedes Punktes um 100.
Ausdruck:
shiftXCoordinate(!SHAPE!)
Code Block:
def shiftXCoordinate(shape):
shiftValue = 100
point = shape.getPart(0)
point.X += shiftValue
return point
Konvertierung von Geometrieeinheiten
Flächen- und Längeneigenschaften des Geometriefeldes können mit Einheitentypen geändert werden, die mit einem @-Zeichen ausgedrückt werden.
- Schlüsselwörter für Flächenmaßeinheiten:
- ACRES | ARES | HECTARES | SQUARECENTIMETERS | SQUAREDECIMETERS | SQUAREINCHES | SQUAREFEET | SQUAREKILOMETERS | SQUAREMETERS | SQUAREMILES | SQUAREMILLIMETERS | SQUAREYARDS | SQUAREMAPUNITS | UNKNOWN
- Schlüsselwörter für lineare Maßeinheiten:
- CENTIMETERS | DECIMALDEGREES | DECIMETERS | FEET | INCHES | KILOMETERS | METERS | MILES | MILLIMETERS | NAUTICALMILES | POINTS | UNKNOWN | YARDS
Hinweis:
Wenn die Daten in einem geographischen Koordinatensystem gespeichert sind und eine lineare Einheit wie Meter oder Zoll angegeben wird, wird die Berechnung anhand eines geodätischen Algorithmus konvertiert.
Vorsicht:
Die Konvertierung von Flächeneinheiten für Daten in einem geographischen Koordinatensystem führt zu fraglichen Ergebnissen, da die Dezimalgrade nicht rund um den Globus konsistent sind.
Berechnet die Länge eines Features in Yard.
Ausdruck:
!shape.length@yards!
Berechnet die Fläche eines Features in Acres.
Ausdruck:
!shape.area@acres!
Die geodätische Fläche und Länge kann anhand der Eigenschaften geodesicArea und geodesicLength mit @ gefolgt von einem Schlüsselwort für Maßeinheiten berechnet werden.
Berechnet die geodätische Länge eines Features in Yard.
Ausdruck:
!shape.geodesicLength@yards!
Berechnet die geodätische Fläche eines Features in Acres.
Ausdruck:
!shape.geodesicArea@acres!
Codebeispiele – Datumsangaben
Berechnet das aktuelle Datum.
Ausdruck:
time.strftime("%d/%m/%Y")
Berechnet das aktuelle Datum und die aktuelle Zeit.
Ausdruck:
datetime.datetime.now()
Verwendet das Datum "31. Dezember 2000" für die Berechnung.
Ausdruck:
datetime.datetime(2000, 12, 31)
Berechnet die Anzahl der Tage zwischen dem aktuellen Datum und dem Wert in einem Feld.
Ausdruck:
(datetime.datetime.now() - !field1!).days
Berechnet ein Datum durch Hinzufügen von 100 Tagen zu dem Datumswert in einem Feld.
Ausdruck:
!field1! + datetime.timedelta(days=100)
Berechnet den Wochentag (z. B. Sonntag) für einen Datumswert in einem Feld.
Ausdruck:
!field1!.strftime('%A')
Codebeispiele – Zeichenfolgen
Gibt die drei am weitesten rechts stehenden Zeichen zurück.
Ausdruck:
!SUB_REGION![-3:]
Ersetzt beliebige Vorkommen eines großgeschriebenen "P" durch ein kleingeschriebenes "p".
Ausdruck:
!STATE_NAME!.replace("P","p")
Verbindet zwei Felder mit einem Leerzeichen als Trennzeichen.
Ausdruck:
!SUB_REGION! + " " + !STATE_ABBR!
Konvertieren in Groß- bzw. Kleinschreibung
In den folgenden Beispielen werden verschiedene Möglichkeiten zum Konvertieren von Wörtern veranschaulicht, um das erste Zeichen jedes Wortes in Großbuchstaben und die übrigen Zeichen in Kleinbuchstaben zu schreiben.
Ausdruck:
' '.join([i.capitalize() for i in !STATE_NAME!.split(' ')])
Ausdruck:
!STATE_NAME!.title()
Reguläre Ausdrücke
Das re-Modul von Python stellt Abgleichvorgänge für reguläre Ausdrücke bereit, die zum Ausführen komplexer Musterabgleichs- und Ersetzungsregeln für Zeichenfolgen verwendet werden.
Ersetzen Sie 'St' oder 'St.', indem Sie ein neues Wort am Ende der Zeichenfolge mit dem Wort 'Street' beginnen.
Ausdruck:
update_street(!ADDRESS!)
Codeblock:
import re
def update_street(street_name):
return re.sub(r"""\b(St|St.)\Z""",
'Street',
street_name)
Kumulative und sequenzielle Berechnungen
Berechnet eine sequenzielle ID oder Zahl auf der Grundlage eines Intervalls.
Ausdruck:
autoIncrement()
Codeblock:
rec=0
def autoIncrement():
global rec
pStart = 1 #adjust start value, if req'd
pInterval = 1 #adjust interval value, if req'd
if (rec == 0):
rec = pStart
else:
rec = rec + pInterval
return rec
Berechnet den kumulativen Wert eines Zahlenfeldes.
Ausdruck:
accumulate(!FieldA!)
Codeblock:
total = 0
def accumulate(increment):
global total
if total:
total += increment
else:
total = increment
return total
Berechnet die prozentuale Steigerung eines Zahlenfeldes.
Ausdruck:
percentIncrease(float(!FieldA!))
Codeblock:
lastValue = 0
def percentIncrease(newValue):
global lastValue
if lastValue:
percentage = ((newValue - lastValue) / lastValue) * 100
else:
percentage = 0
lastValue = newValue
return percentage
Zufallswerte
Verwendet das numpy-Site-Paket zum Berechnen von zufälligen Gleitkommawerten zwischen 0,0 und 1,0.
Ausdruck:
getRandomValue()
Codeblock:
import numpy
def getRandomValue():
return numpy.random.random()
Verwendet das Modul "random", um zufällige ganzzahlige Werte zwischen 0 und 10 zu berechnen.
Ausdruck:
random.randint(0, 10)
Codeblock:
import random
Berechnen von NULL-Werten
In einem Python-Ausdruck können NULL-Werte mit Python-None berechnet werden.
Hinweis:
Die folgende Berechnung funktioniert nur, wenn NULL-Werte für das Feld zulässig sind.
Verwenden Sie Python-None, um NULL-Werte zu berechnen.
Ausdruck:
None