Feld zum automatischen Inkrementieren basierend auf Gruppen innerhalb der Feature-Class?


10

Ich muss ein Feld basierend auf Gruppen innerhalb einer Feature-Class automatisch inkrementieren. Ich habe 8 Diagramme innerhalb eines bestimmten Polygons und muss ihnen für jeden Satz von Diagrammen in jedem Polygon eine ID von 1 bis 8 zuweisen. Das Polygon hätte eine eigene eindeutige ID-Nummer, die zum Gruppieren der Diagramme verwendet werden könnte.

Ich gehe davon aus, dass dies eine Änderung wäre:

rec=0
def autoIncrement():
 global rec
 pStart = 1 
 pInterval = 1 
 if (rec == 0): 
  rec = pStart 
 else: 
  rec = rec + pInterval 
 return rec

1
Sie möchten wahrscheinlich über die Verwendung des Modul-Operators von Python ( %)
— Vince

Antworten:


12

Feldrechner für Python

d={}
def GroupOrder(groupID):
  if groupID in d: d[groupID]+=1
  else: d[groupID]=1
  return d[groupID]

---------------------------

GroupOrder( !locality! )

Ändern Sie! Ort! zu relevantem Feld.

UPDATE: Diese Variation des Ausdrucks:

d={}
def GroupOrder(groupID):
  N=d.get(groupID,0);N+=1
  d[groupID]=N
  return N

Sollte bei großen Datenmengen viel schneller funktionieren.


Wenn die GroupOrder-Funktion in einem eigenständigen Python-Skript GroupOrderverwendet würde, wäre die Funktion das code blockArgument und das Argument GroupOrder( !locality! )'expression'.
— user3467260

Im Skript ist es: a) Wörterbuch erstellen b) Cursor auf 2 Feldgruppen aktualisieren und eines ausfüllen. 3-5 Codezeilen.
— FelixIP

1
Ich habe es versäumt, in meinem Kommentar zu erwähnen, dass diese Argumente im arcpy-Berechnungsfeld-Tool enthalten arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", codeblock)wären : wenn sie in einem eigenständigen Skript verwendet würden. Vielen Dank, dass Sie die Schritte eines anderen Ansatzes zur Verwendung Ihres Codes in einem eigenständigen Skript beschrieben haben.
— user3467260

Alles gut. Jedenfalls habe ich den Eindruck, dass der Cursor viel schneller ist als der Feldrechner.
— FelixIP
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.