Feld berechnen - Beispiele
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 selektierte 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 können entweder mit Python oder mit VBScript durchgeführt werden.
Python ist die empfohlene Skriptsprache für ArcGIS. Verwenden Sie Python, wenn Sie auf die Geoverarbeitungsfunktionen einschließlich Feature-Geometrie zugreifen möchten. Die Verwendung von Python als Skriptsprache für ArcGIS 10.0 bietet zahlreiche Möglichkeiten zum Durchführen von Berechnungen.
Verwenden Sie VBScript, wenn Sie VBA- oder VBScript-Erfahrung haben und mit der Skriptsyntax vertraut sind. Gespeicherte CAL-Dateien aus früheren Versionen von ArcGIS können möglicherweise verwendet werden oder erfordern minimale Änderungen. Wenn Sie über VBA-Code aus früheren Versionen verfügen, worin ArcObjects verwendet werden, müssen Sie die Berechnungen ändern, damit sie in 10.0 verwendet werden können.
- 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, und 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. yield ist daher nicht identisch mit Yield.
- Sie können in VBScript keine Datentypen deklarieren; alle Variablen sind implizit Variant. Anweisungen wie Dim x as String sollten entfernt oder zu Dim x vereinfacht werden.
- Nachdem Sie Anweisungen eingegeben haben, klicken Sie auf Speichern, um diese in eine Datei zu schreiben. Mit der Schaltfläche Laden 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.
Beispiel |
Erläuterung |
Ergebnis |
---|---|---|
!fieldname![0] |
Das erste Zeichen. |
"a" |
!fieldname![-2] |
Das vorletzte Zeichen. |
"e" |
!fieldname![1:4] |
Das zweite, dritte, vierte und fünfte Zeichen. |
"bcd" |
Python unterstützt auch die Formatierung von Zeichenfolgen mit dem Operator "%".
Kombiniert "FieldA" und "FieldB" mit Doppelpunkt getrennt.
"%s:%s" % (!FieldA!, !FieldB!)
VBScript-Zeichenfolgefunktionen
Zeichenfolgen werden von einer Reihe von VBScript-Zeichenfolgefunktionen unterstützt, einschließlich Left, InStr und Chrt. Nachfolgend werden VBScript-Codebeispiele für häufig in der Feldberechnung verwendete Zeichenfolgefunktionen aufgelistet.
Funktion "Left": Gibt einen Wert vom Typ "Variant (String)" zurück, der eine bestimmte Anzahl von Zeichen ausgehend von der linken Seite der Zeichenfolge enthält.
MyStr = Left([MyField], 1)
Funktion "Right": Gibt einen Wert vom Typ "Variant (String)" zurück, der eine bestimmte Anzahl von Zeichen ausgehend von der rechten Seite der Zeichenfolge enthält.
MyStr = Right([MyField], 1)
Funktion "Mid": Gibt einen Wert vom Typ "Variant (String)" zurück, der eine bestimmte Anzahl von Zeichen aus einer Zeichenfolge enthält.
MyString = "Mid Function Demo" 'Create text string FirstWord = Mid(MyString, 1, 3) ' Returns "Mid" LastWord = Mid(MyString, 14, 4) 'Returns "Demo" MidWords = Mid(MyString, 5) 'Returns "Function Demo"
Funktion "InStr": Gibt einen Wert vom Typ "Variant (Long)" zurück, der die Position des ersten Auftretens einer Zeichenfolge innerhalb einer anderen Zeichenfolge angibt.
MyPosition = InStr([address], " ")
Funktion "Replace": Gibt eine Zeichenfolge zurück, in der eine angegebene Teilzeichenfolge entsprechend einer vorgegebenen Anzahl durch eine andere Teilzeichenfolge ersetzt wurde.
NewString = Replace([comments], "#", "!")
Funktion "Chr": Gibt eine Zeichenfolge zurück, die das Zeichen enthält, das mit dem angegebenen Zeichencode verknüpft ist.
' Replace a carriage return character with an exclamation NewString = Replace([comments], chr(13), "!")
Operator "&": Wird verwendet, um zwei Ausdrücke zu einer Zeichenfolge zusammenzufassen.
MyStr = [MyField1] & " " & [MyField2]
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 |
Erläuterung |
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 multipliziert mit 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 |
Multiplikation
!Rank! * 2
Berechnet das Volumen einer Kugel mit einem Radiusfeld.
4 / 3 * math.pi * !Radius! ** 3
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
- Verwenden weiterer Geoverarbeitungswerkzeuge
Wie der Codeblock verwendet wird, wird vom verwendeten Parser bestimmt. Die Feldberechnung unterstützt die Python- und VB Script-Parser.
Parser |
Codeblock |
---|---|
Python |
Unterstützt die Python-Funktionalität. Der Codeblock wird mit Python-Funktionen (def) ausgedrückt. Geometrieeigenschaften werden ggf. mit Geoverarbeitungsobjekten wie Punktobjekten ausgedrückt. |
VB Script |
Berechnungen werden mit VBScript durchgeführt. |
Python-Funktionen werden mit dem Schlüsselwort def definiert, auf das der Name der Funktion und die Eingabeparameter der Funktion folgen. Werte werden von der Funktion mit einer return-Anweisung zurückgegeben. Der Funktionsname bleibt Ihnen überlassen (darf jedoch keine Leerzeichen oder führende Zahlen enthalten).
Denken Sie daran, dass Python eine Einrückung als Teil der Syntax erfordert. Verwenden Sie zwei oder vier Leerzeichen zur Definition jeder strukturellen Ebene. Richten Sie den Anfang und das Ende von Anweisungsblöcken aneinander aus, und gehen Sie einheitlich vor.
Codebeispiele – "math"
Rundet den Wert eines Feldes auf zwei Dezimalstellen.
Expression: round(!area!,2) Parser: Python
Verwendet das Modul "math" zum Konvertieren von Meter in Fuß. Die Konvertierung wird mit 2 potenziert und mit der Fläche multipliziert.
Parser: Python Expression: MetersToFeet((float!shape.area)) Code Block: 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.
Parser: Python Expression: Reclass(!WELL_YIELD!) Code Block: 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
Berechnen von Feldern mithilfe von Logik mit VBScript
Führt abhängig vom Wert eines Ausdrucks eine Gruppe von Anweisungen bedingt aus.
Parser: VB Script Expression: PopulationDensity = density Code Block: Dim density If [POP90_SQMI] < 100 Then density = "low" elseif [POP90_SQMI] < 300 Then density = "medium" else density = "high" end if
Codebeispiele – Geometrie
Weitere Informationen zum Konvertieren von Geometrieeinheiten finden Sie unten im Abschnitt "Konvertierung von Geometrieeinheiten".
Berechnet die Fläche eines Features.
Parser: Python Expression: !shape.area!
Berechnet die maximale X-Koordinate eines Features.
Parser: Python Expression: !shape.extent.XMax!
Berechnet die Stützpunktanzahl eines Features.
Parser: Python Expression: 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.
Parser: Python Expression: shiftXCoordinate(!SHAPE!) Code Block: def shiftXCoordinate(shape): shiftValue = 100 point = shape.getPart(0) point.X += shiftValue return point
Konvertierung von Geometrieeinheiten
Shape- 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
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.
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.
Parser: Python Expression: !shape.length@yards!
Berechnet die Fläche eines Features in Acres.
Parser: Python Expression: !shape.area@acres!
Codebeispiele – Datumsangaben
Berechnet das aktuelle Datum.
Parser: Python Expression: time.strftime("%d/%m/%Y")
Berechnet das aktuelle Datum und die aktuelle Zeit.
Parser: Python Expression: time.strftime("%d/%m/%Y %H:%M")
Codebeispiele – Zeichenfolgen
Gibt die drei am weitesten rechts stehenden Zeichen zurück.
Parser: Python Expression: !SUB_REGION![-3:]
Ersetzt beliebige Vorkommen eines großgeschriebenen "P" durch ein kleingeschriebenes "p".
Parser: Python Expression: !STATE_NAME!.replace("P","p")
Verbindet zwei Felder mit einem Leerzeichen als Trennzeichen.
Parser: Python Expression: !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.
Parser: Python Expression: ' '.join([i.capitalize() for i in !STATE_NAME!.split(' ')])
Parser: Python Expression: string.capwords(!STATE_NAME!, ' ') Expression Type: import string
Parser: Python Expression: MySub(!STATE_NAME!) Code Block: def MySub(myfieldname): import string return string.capwords(myfieldname, ' ')
Kumulative und sequenzielle Berechnungen
Berechnet eine sequenzielle ID oder Zahl auf der Grundlage eines Intervalls.
Parser: Python Expression: autoIncrement() Code Block: 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.
Parser: Python Expression: accumulate(!FieldA!) Code Block: total = 0 def accumulate(increment): global total if total: total += increment else: total = increment return total
Berechnet die prozentuale Steigerung eines Zahlenfeldes.
Parser: Python Expression: percentIncrease(float(!FieldA!)) Code Block: 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 Zufalls-Gleitkommawerten 0,0 und 1,0.
Parser: Python Expression: getRandomValue() Code Block: import numpy.random as R def getRandomValue(): return R.random()