Campo con incremento automatico basato su gruppi all'interno della classe caratteristica?


10

Ho bisogno di incrementare automaticamente un campo in base ai gruppi all'interno di una classe di caratteristiche. Ho 8 grafici all'interno di un determinato poligono e devo assegnare loro un ID compreso tra 1 e 8 per ogni set di grafici all'interno di ciascun poligono. Il poligono avrebbe un proprio numero ID univoco da utilizzare per raggruppare i grafici.

Presumo che sarebbe un'alterazione di questo:

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

1
Probabilmente vorresti approfondire l'uso dell'operatore del modulo di Python ( %)
Vince il

Risposte:


12

Calcolatore di campo per Python

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

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

GroupOrder( !locality! )

Cambia! Località! al campo pertinente.

AGGIORNAMENTO: questa variazione di espressione:

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

Dovrebbe funzionare molto più velocemente su set di dati di grandi dimensioni.


Se la funzione GroupOrder fosse utilizzata in uno script Python autonomo, la GroupOrderfunzione sarebbe l' code blockargomento e l'argomento GroupOrder( !locality! )'espressione'.
user3467260

Nello script è: a) crea dizionario b) aggiorna il cursore su un gruppo di 2 campi e uno da popolare. 3-5 righe di codice.
FelixIP

1
Ho trascurato di menzionare nel mio commento che quegli argomenti sarebbero stati inclusi nello strumento arcpy per il calcolo del campo: arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", codeblock)se usato in uno script autonomo. Grazie per aver descritto i passaggi di un diverso approccio all'utilizzo del codice in uno script autonomo.
user3467260

Tutto bene. Comunque ho l'impressione che il cursore sia molto più veloce del calcolatore di campo.
FelixIP
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.