Automatisch inkrementierendes Feld in der Feature-Class mit ArcGIS Desktop?

8

Daher bin ich relativ neu in ArcGIS und ArcCatalog. Ich habe den Feldnamen PROJECTID in einer Feature-Class in einer Personal Geodatabase erstellt. Der Datentyp ist TEXT. Dies ist eine zehnstellige ID. Die ersten fünf Zeichen sind ein Akronym. Das sechste Zeichen ist eine Ziffer, die den Typ des Features darstellt. Es wird eine Nummer sein. Die letzten vier Zeichen sind Zahlen, die ab 0001 erhöht werden sollten.

Beispiel: WATER-1-0001

Screenshot des Feldes: Geben Sie hier die Bildbeschreibung ein

Meine Frage ist also, wie ich das in ArcCatalog machen kann. Ich habe Python-Code gesehen, der wie folgt automatisch inkrementiert wird:

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

Ich bin wieder ein Neuling, wenn es um ArcGIS geht. Jetzt erhalte ich einen Fehler NameError Name 'OBJECTID' ist nicht definiert.

Yamswurzeln
quelle

Antworten:

12

Sie müssen diesen Code in ArcMap und im Feldrechner verwenden. Fügen Sie Ihre Feature-Class zum Inhaltsverzeichnis hinzu, klicken Sie mit der rechten Maustaste darauf, um die Tabelle zu öffnen, klicken Sie mit der rechten Maustaste auf den Namen des Felds und starten Sie den Feldrechner.

Dann suchen Sie nach Codeblock und kopieren den von Ihnen erwähnten Code.

Geben Sie hier die Bildbeschreibung ein

Nun zu Ihren Code-Schnipsel, hier ist, was ich tun würde

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

Sie rufen diesen Code mit auf

autoIncrement (! name_of_field!)

Dabei enthält name_of_field den Feature-Typ

BEARBEITEN: Wenn Sie das Feld OBJECTID direkt verwenden möchten, reicht eine einfache Verkettung aus

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

Wenn Ihre Nummer vom Typ abhängen muss, ist es sinnvoll, den Python-Codeblock zu verwenden

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
quelle
Oh ok. Ich könnte wahrscheinlich die OBJECTID verwenden, die bereits auf dem Tisch liegt. Danke, ich werde es versuchen und alle Fragen posten, die ich habe. Ich weiß das wirklich zu schätzen.
Yamswurzeln
Wie kann ich anstelle von pStart für rec eines der Felder aus der Attributtabelle für rec zuweisen?
Yamswurzeln
Ich erhalte eine OBJECTID ist kein Fehler definiert. Mein Python-Code wird oben angezeigt.
Yamswurzeln
Sie können rec nicht basierend auf "objectid" initialisieren, wie Sie in Ihrem Beitrag erwähnt haben, da "objectid" ein Feld und kein einzelner Wert ist. Was Sie tun könnten, ist eine einfache Verbindung (die keinen Codeblock benötigt)
radouxju
Hey, kurze Frage, wie würde ich im Feld FacilityID nach Null-Einträgen suchen?
Yamswurzeln
2

Ich denke, dass dies mit updateCursor einfacher erreicht wird:

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
quelle
1

Zuerst würde ich ein zusätzliches Feld für die fortlaufenden Nummern (PROJECT_ID) erstellen. Laden Sie diese Toolbox herunter http://www.arcgis.com/home/item.html?id=242e0e5c8273404085b174f66db97ecf

Klicken Sie in Ihrem Projekt-ID-Feld mit der rechten Maustaste auf> Feldrechner und geben Sie Folgendes ein:

"WATER" + [PROJECT_ID]

Dadurch wird der eingegebene Text mit der entsprechenden Projekt-ID verknüpft. Wenn Sie bereits separate Felder für das Akronym und den Projekttyp haben, können Sie etwas Ähnliches tun:

[ACRONYM] + [TYPE] + [PROJECT_ID]
GISKid
quelle