Champ d'incrémentation automatique dans la classe d'entités à l'aide d'ArcGIS Desktop?

8

Je suis donc relativement nouveau sur ArcGIS et ArcCatalog. J'ai créé un nom de champ PROJECTID dans une classe d'entités dans une géodatabase personnelle. Le type de données est TEXT. Ce sera un identifiant à dix chiffres. Les cinq premiers caractères seront un acronyme. Le sixième caractère sera un chiffre qui représente le type d'entité. Ce sera un nombre. Les quatre derniers caractères seront des nombres qui doivent être incrémentés à partir de 0001.

Exemple: WATER-1-0001

Capture d'écran du champ: entrez la description de l'image ici

Ma question est donc de savoir comment procéder dans ArcCatalog. J'ai vu du code Python qui s'auto-incrémentera comme suit:

rec=[OBJECTID]
def autoIncrement(a): 
 global rec 
 return "water" + str(a) + "-" +  format(rec, '04d')

Encore une fois, je suis un débutant en ce qui concerne ArcGIS. Maintenant, j'obtiens une erreur Le nom NameError 'OBJECTID' n'est pas défini.

ignames
la source

Réponses:

12

vous devez utiliser ce code dans ArcMap et la calculatrice de champ. Ajoutez votre classe d'entités dans la table des matières, faites un clic droit dessus pour ouvrir la table, faites un clic droit sur le nom du champ et lancez la calculatrice de champ.

Ensuite, vous vérifiez le codeblock et copiez le code que vous avez mentionné.

entrez la description de l'image ici

maintenant pour vos extraits de code, voici ce que je ferais

rec=0 
def autoIncrement(a): 
 global rec 
 pStart = 1  
 pInterval = 1 
 if (rec == 0):  
  rec = pStart  
 else:  
  rec += pInterval  
 return "water" + str(a) + "-" +  format(rec, '04d')

vous appelez ce code en utilisant

autoIncrement (! name_of_field!)

où name_of_field contient le type d'entité

EDIT: Si vous souhaitez utiliser directement le champ OBJECTID, une simple concaténation suffit

"WATER-" + str(!typrfield!) + "-" +  format(!OBJECTID!, '04d')

si votre numéro doit dépendre du type, il est alors logique d'utiliser le bloc de code Python

rec1=0 
rec2=0
def autoIncrement(a): 
 global rec1
 global rec2 
 pStart = 1  
 pInterval = 1 
 if (a == 1):
  if (rec1 == 0):  
   rec1 = pStart  
  else:  
   rec1 += pInterval
  out = "water-1-" +  format(rec1, '04d')  
 else:
  if (rec2 == 0):  
   rec2 = pStart  
  else:  
   rec1 += pInterval
  out = "water-2-" +  format(rec2, '04d')  
 return out
radouxju
la source
Ah d'accord. Je pourrais probablement utiliser l'OBJECTID qui est déjà sur la table. Merci, je vais essayer ceci et poster toutes les questions que j'ai. J'apprécie vraiment cela.
ignames
Au lieu d'utiliser pStart pour rec, comment puis-je attribuer l'un des champs de la table d'attributs pour rec?
ignames
J'obtiens une erreur OBJECTID n'est pas définie. Mon code python est illustré ci-dessus.
ignames
vous ne pouvez pas initialiser rec basé sur "objectid" comme vous le mentionnez dans votre message, car "objectid" est un champ et non une valeur unique. Ce que vous pourriez faire est une simple conncaténation (qui n'a pas besoin d'un bloc de code)
radouxju
Hé, question rapide, comment pourrais-je vérifier les entrées nulles dans le champ FacilityID?
ignames
2

Je pense que cela est plus facile avec updateCursor:

import arcpy

# Create update cursor for feature class 
fc = r'D:\temp\tempFGDB.gdb\point'
fields = "Munic; Point; UniqueID"
sort_fields="Munic A; Point A"

rows = arcpy.UpdateCursor(fc, fields=fields, sort_fields=sort_fields)
previousPoint = None
i = 0
for row in rows:
    munic = row.getValue('Munic')
    point = row.getValue('Point')
    if not previousPoint:
        i += 1
    elif previousPoint <> point:
        i = 1
    else:
        i += 1

    row.setValue('UniqueID', '-'.join([str(munic),str(point),str(i)]))
    previousPoint = point
    rows.updateRow(row)
Matej
la source
1

Tout d'abord, je créerais un champ supplémentaire pour les numéros séquentiels (PROJECT_ID). Téléchargez cette boîte à outils http://www.arcgis.com/home/item.html?id=242e0e5c8273404085b174f66db97ecf

Dans le champ de votre identifiant de projet, cliquez avec le bouton droit sur> Calculatrice de champ et entrez:

"WATER" + [PROJECT_ID]

Cela va concaténer tout texte que vous entrez avec le numéro d'identification du projet correspondant. Si vous avez déjà des champs séparés pour l'acronyme et le type de projet, vous pouvez faire quelque chose de similaire:

[ACRONYM] + [TYPE] + [PROJECT_ID]
GISKid
la source