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.