¿Campo de incremento automático en la clase de entidad usando ArcGIS Desktop?

8

Así que soy relativamente nuevo en ArcGIS y ArcCatalog. He creado un nombre de campo de PROJECTID en una clase de entidad en una Geodatabase personal. El tipo de datos es TEXTO. Esta será una identificación de diez dígitos. Los primeros cinco caracteres serán un acrónimo. El sexto carácter será un dígito que representa el tipo de característica. Será un número Los últimos cuatro caracteres serán números que deberían incrementarse a partir de 0001.

Ejemplo: AGUA-1-0001

Captura de pantalla del campo: ingrese la descripción de la imagen aquí

Entonces mi pregunta es cómo puedo hacer esto en ArcCatalog. He visto un código de Python que aumentará automáticamente como el siguiente:

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

De nuevo, soy un novato cuando se trata de ArcGIS. Ahora recibo un error. El nombre NameError 'OBJECTID' no está definido.

batatas
fuente

Respuestas:

12

necesita usar este código dentro de ArcMap y la calculadora de campo. Agregue su clase de entidad en la tabla de contenido, haga clic derecho sobre ella para abrir la tabla, haga clic derecho sobre el nombre del campo y ejecute la calculadora de campo.

Luego verifica el bloque de código y copia el código que mencionó.

ingrese la descripción de la imagen aquí

ahora para sus fragmentos de código, esto es lo que haría

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')

llamas a este código usando

autoIncrement (! name_of_field!)

donde name_of_field contiene el tipo de característica

EDITAR: si desea utilizar el campo OBJECTID directamente, entonces una simple concatenación es suficiente

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

si su número tiene que depender del tipo, entonces tiene sentido usar el bloque de código 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
fuente
Oh ok Probablemente podría usar el OBJECTID que ya está sobre la mesa. Gracias, intentaré esto y publicaré cualquier pregunta que tenga. Realmente lo aprecio.
ñames
En lugar de usar pStart para rec, ¿cómo puedo asignar uno de los campos de la tabla de atributos para rec?
ñames
Estoy obteniendo un OBJECTID no es un error definido. Mi código de Python se muestra arriba.
ñames
no puede inicializar rec en función de "objectid" como menciona en su publicación, porque "objectid" es un campo y no un solo valor. Lo que podría hacer es una concatenación simple (que no necesita un bloque de código)
radouxju
Hola pregunta rápida, ¿cómo comprobaría si hay entradas nulas en el campo FacilityID?
ñames
2

Creo que esto se logra más fácilmente con 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
fuente
1

Primero, crearía un campo adicional para los números secuenciales (PROJECT_ID). Descargue esta caja de herramientas http://www.arcgis.com/home/item.html?id=242e0e5c8273404085b174f66db97ecf

En el campo de identificación del proyecto, haga clic con el botón derecho> Calculadora de campo e ingrese:

"WATER" + [PROJECT_ID]

Esto concatenará cualquier texto que ingrese con el número de identificación del proyecto correspondiente. Si ya tiene campos separados para el acrónimo y el tipo de proyecto, podría hacer algo similar:

[ACRONYM] + [TYPE] + [PROJECT_ID]
GISKid
fuente