ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Hilfe
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Die Mapping-Plattform für Ihre Organisation

ArcGIS Desktop

Ein vollständiges professionelles GIS

ArcGIS Enterprise

GIS in Ihrem Unternehmen

ArcGIS for Developers

Werkzeuge zum Erstellen standortbezogener Apps

ArcGIS Solutions

Kostenlose Karten- und App-Vorlagen für Ihre Branche

ArcGIS Marketplace

Rufen Sie Apps und Daten für Ihre Organisation ab.

  • Dokumentation
  • Support
Esri
  • Anmelden
user
  • Eigenes Profil
  • Abmelden

ArcMap

  • Startseite
  • Erste Schritte
  • Karte
  • Analysieren
  • Verwalten von Daten
  • Werkzeuge
  • Erweiterungen

Feld berechnen – Beispiele

  • Einfache Berechnungen
  • Integrierte Python-Funktionen
  • Verwenden von Codeblöcken
  • Codebeispiele – "math"
  • Berechnen von Feldern mithilfe von Logik mit Python
  • Berechnen von Feldern mithilfe von Logik mit VBScript
  • Codebeispiele – Geometrie
  • Konvertierung von Geometrieeinheiten
  • Codebeispiele – Datumsangaben
  • Codebeispiele – Zeichenfolgen
  • Kumulative und sequenzielle Berechnungen
  • Zufallswerte
  • Berechnen von NULL-Werten

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 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 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.

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.
  • 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. In der folgenden Tabelle wird angenommen, dass !fieldname! ein Zeichenfolgenfeld mit dem Wert "abcde" ist.

BeispielErläuterungErgebnis

!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 str.format().

Kombiniert "FieldA" und "FieldB" mit Doppelpunkt getrennt.

"{}:{}".format(!FieldA!, !FieldB!)

VBScript-Zeichenfolgefunktionen

Zeichenfolgen werden von einer Reihe von VBScript-Zeichenfolgefunktionen unterstützt, einschließlich Left, InStr und Chr. 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.

OperatorErläuterungBeispielErgebnis

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

Multiplikation

!Rank! * 2

Berechnet das Volumen einer Kugel mit einem Radiusfeld.

4 / 3 * math.pi * !Radius! ** 3

Beim Durchführen von Feldberechnungen mit einem Python-Ausdruck sind die Python-Mathematikregeln gültig. Zum Beispiel erzeugt das Teilen zweier Ganzzahlwerte immer eine ganzzahlige Ausgabe (3 / 2 = 1). Erstellen Sie eine Dezimalausgabe auf folgende Arten:

  • Eine der Zahlen im Vorgang muss ein Dezimalwert sein: 3.0 / 2 = 1.5.
  • Verwenden Sie die Funktion float, um den Wert explizit in eine Gleitkommazahl zu konvertieren:
    float(3)/2 = 1.5
    

    float(!Population!) / !Area!
    

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

Wie der Codeblock verwendet wird, wird vom verwendeten Parser bestimmt. Die Feldberechnung unterstützt die Python- und VB Script-Parser.

ParserCode-Block

Python

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.

VBScript

Berechnungen werden mit VBScript durchgeführt.

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). Werte werden von der Funktion mit einer return-Anweisung zurückgegeben. Der Funktionsname bleibt Ihnen überlassen (darf jedoch keine Leerzeichen oder führenden Zahlen enthalten).

Verwenden der Feldberechnung
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 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.

Codebeispiele – "math"

Rundet den Wert eines Feldes auf zwei Dezimalstellen.

Ausdruck:
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
Ausdruck:
MetersToFeet((float(!shape.area!)))
Codeblock:
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
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

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
Ausdruck:
density
Codeblock:
Dim density
If [POP90_SQMI] < 100 Then
density = "low"
elseif [POP90_SQMI] < 300 Then
density = "medium"
else
density = "high"
end if

Codebeispiele – Geometrie

Hinweis:

Weitere Informationen zum Konvertieren von Geometrieeinheiten finden Sie unten im Abschnitt "Konvertierung von Geometrieeinheiten".

Berechnet die Fläche eines Features.

Parser:
Python
Ausdruck:
!shape.area!

Berechnet die maximale X-Koordinate eines Features.

Parser:
Python
Ausdruck:
!shape.extent.XMax!

Berechnet die Stützpunktanzahl eines Features.

Parser:
Python
Ausdruck:
MySub(!shape!)
Codeblock:
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
Ausdruck:
shiftXCoordinate(!SHAPE!)
Codeblock:
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.

Parser:
Python
Ausdruck:
!shape.length@yards!

Berechnet die Fläche eines Features in Acres.

Parser:
Python
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.

Parser:
Python
Ausdruck:
!shape.geodesicLength@yards!

Berechnet die geodätische Fläche eines Features in Acres.

Parser:
Python
Ausdruck:
!shape.geodesicArea@acres!

Codebeispiele – Datumsangaben

Berechnet das aktuelle Datum.

Parser:
Python
Ausdruck:
time.strftime("%d/%m/%Y")

Berechnet das aktuelle Datum und die aktuelle Zeit.

Parser:
Python
Ausdruck:
datetime.datetime.now()

Verwendet das Datum "31. Dezember 2000" für die Berechnung.

Parser:
Python
Ausdruck:
datetime.datetime(2000, 12, 31)

Berechnet die Anzahl der Tage zwischen dem aktuellen Datum und dem Wert in einem Feld.

Parser:
Python
Ausdruck:
(datetime.datetime.now() - arcpy.time.ParseDateTimeString(!field1!)).days

Berechnet ein Datum durch Hinzufügen von 100 Tagen zu dem Datumswert in einem Feld.

Parser:
Python
Ausdruck:
arcpy.time.ParseDateTimeString(!field1!) + datetime.timedelta(days=100)

Berechnet den Wochentag (z. B. Sonntag) für einen Datumswert in einem Feld.

Parser:
Python
Ausdruck:
arcpy.time.ParseDateTimeString(!field1!).strftime('%A')

Codebeispiele – Zeichenfolgen

Gibt die drei am weitesten rechts stehenden Zeichen zurück.

Parser:
Python
Ausdruck:
!SUB_REGION![-3:]

Ersetzt beliebige Vorkommen eines großgeschriebenen "P" durch ein kleingeschriebenes "p".

Parser:
Python
Ausdruck:
!STATE_NAME!.replace("P","p")

Verbindet zwei Felder mit einem Leerzeichen als Trennzeichen.

Parser:
Python
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.

Parser:
Python
Ausdruck:
' '.join([i.capitalize() for i in !STATE_NAME!.split(' ')])

Parser:
Python
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 neue Wörter am Ende der Zeichenfolge mit dem Wort 'Street' beginnen.

Parser:
Python
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.

Parser:
Python
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.

Parser:
Python
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.

Parser:
Python
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.

Parser:
Python
Ausdruck:
getRandomValue()
Codeblock:
import numpy
def getRandomValue():
    return numpy.random.random()

Berechnen von NULL-Werten

Mithilfe eines Python-Ausdrucks können NULL-Werte mit einem 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.

Parser:
Python
Ausdruck:
None

Verwandte Themen

  • Grundlagen zu Feldberechnungen
  • Durchführen von Feldberechnungen
  • Berechnen von Fläche, Länge und anderen geometrischen Eigenschaften
  • Ändern der Groß- und Kleinschreibung von Textfeldwerten

ArcGIS Desktop

  • Startseite
  • Dokumentation
  • Support

ArcGIS Plattform

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Über Esri

  • Über uns
  • Karriere
  • Esri Blog
  • User Conference
  • Developer Summit
Esri
Wir sind an Ihrer Meinung interessiert.
Copyright © 2019 Esri. | Datenschutz | Rechtliches