Campo de incremento automático na classe de recurso usando o ArcGIS Desktop?

8

Então, eu sou relativamente novo no ArcGIS e ArcCatalog. Eu criei um nome de campo PROJECTID em uma classe de recurso em um banco de dados geográfico pessoal. O tipo de dados é TEXT. Este será um ID de dez dígitos. Os cinco primeiros caracteres serão um acrônimo. O sexto caractere será um dígito que representa o tipo de recurso. Será um número. Os últimos quatro caracteres serão números que devem ser incrementados a partir de 0001.

Exemplo: WATER-1-0001

Captura de tela do campo: insira a descrição da imagem aqui

Então, minha pergunta é como posso fazer isso no ArcCatalog. Eu já vi algum código Python que aumentará automaticamente, como o seguinte:

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

Mais uma vez, sou novato no que diz respeito ao ArcGIS. Agora estou recebendo um erro O nome NameError 'OBJECTID' não está definido.

inhame
fonte

Respostas:

12

você precisa usar esse código no ArcMap e na calculadora de campo. Inclua sua classe de recurso na tabela de conteúdo, clique com o botão direito do mouse nela para abrir a tabela, clique com o botão direito do mouse no nome do campo e inicie a calculadora de campo.

Então você verifica o código de bloqueio e copia o código que você mencionou.

insira a descrição da imagem aqui

agora para os trechos de código, aqui está o que eu faria

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

você chama esse código usando

autoIncrement (! name_of_field!)

onde name_of_field contém o tipo de recurso

EDIT: Se você deseja usar o campo OBJECTID diretamente, basta uma concatenação simples

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

se seu número precisar depender do tipo, faz sentido usar o bloco 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
fonte
Ah ok. Provavelmente eu poderia usar o OBJECTID que já está sobre a mesa. Obrigado, vou tentar isso e postar todas as perguntas que tenho. Eu realmente gostei disso.
yams
Em vez de usar o pStart para rec, como posso atribuir um dos campos da tabela Atributo para rec?
inhame
Estou recebendo um erro OBJECTID não está definido. Meu código python é mostrado acima.
inhame
você não pode inicializar rec com base em "objectid", como mencionou em sua postagem, porque "objectid" é um campo e não um valor único. O que você poderia fazer é um conncatenation simples (que não precisa de um bloco de código)
radouxju
Olá, pergunta rápida, como eu verificaria entradas nulas no campo FacilityID?
inhame
2

Penso que isto é conseguido mais facilmente com o 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
fonte
1

Primeiro, eu criaria um campo adicional para os números sequenciais (PROJECT_ID). Faça o download desta caixa de ferramentas http://www.arcgis.com/home/item.html?id=242e0e5c8273404085b174f66db97ecf

No campo de identificação do projeto, clique com o botão direito do mouse> Calculadora de Campo e digite:

"WATER" + [PROJECT_ID]

Isso concatenará qualquer texto digitado com o número de identificação do projeto correspondente. Se você já possui campos separados para o acrônimo e o tipo de projeto, pode fazer algo semelhante:

[ACRONYM] + [TYPE] + [PROJECT_ID]
GISKid
fonte