Campo de incremento automático com base em grupos na classe de recurso?

10

Estou precisando incrementar automaticamente um campo com base em grupos dentro de uma classe de recurso. Eu tenho 8 gráficos dentro de um determinado polígono e preciso atribuir um ID de 1 a 8 para cada conjunto de gráficos dentro de cada polígono. O polígono teria seu próprio número de ID exclusivo para ser usado para agrupar os gráficos.

Eu suponho que seria uma alteração disso:

rec=0
def autoIncrement():
 global rec
 pStart = 1 
 pInterval = 1 
 if (rec == 0): 
  rec = pStart 
 else: 
  rec = rec + pInterval 
 return rec
Becks
fonte
1
Você provavelmente deseja ler sobre o uso do operador de módulo do Python ( %)
Vince

Respostas:

12

Calculadora de campo para Python

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

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

GroupOrder( !locality! )

Mudança! Localidade! ao campo relevante.

UPDATE: Essa variação de expressão:

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

Deve funcionar muito mais rápido em grandes conjuntos de dados.

FelixIP
fonte
Se a função GroupOrder fosse usada em um script python independente, a GroupOrderfunção seria o code blockargumento e o argumento GroupOrder( !locality! )'expression'.
user3467260 11/03
No script, é: a) criar dicionário b) atualizar o cursor no grupo de 2 campos e um a ser preenchido. 3-5 linhas de código.
FelixIP 11/03
1
Esqueci de mencionar no meu comentário que esses argumentos seriam incluídos na ferramenta de campo de cálculo arcpy: arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", codeblock)se usados ​​em um script independente. Obrigado por descrever as etapas de uma abordagem diferente para usar seu código em um script independente.
user3467260 11/03
Tudo bom. De qualquer forma, tenho a impressão de que o cursor é muito mais rápido que a calculadora de campo.
FelixIP