Bidang penambahan otomatis di kelas fitur menggunakan ArcGIS Desktop?

8

Jadi saya relatif baru di ArcGIS dan ArcCatalog. Saya telah membuat nama bidang PROJECTID di kelas fitur di Personal Geodatabase. Tipe data adalah TEKS. Ini akan menjadi ID sepuluh digit. Lima karakter pertama akan menjadi akronim. Karakter keenam akan menjadi digit yang mewakili jenis fitur. Itu akan menjadi angka. Empat karakter terakhir akan menjadi angka yang harus ditambahkan mulai dari 0001.

Contoh: WATER-1-0001

Tangkapan layar bidang ini: masukkan deskripsi gambar di sini

Jadi pertanyaan saya adalah bagaimana saya bisa melakukan ini di ArcCatalog. Saya telah melihat beberapa kode Python yang akan otomatis bertambah seperti berikut:

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

Sekali lagi saya seorang pemula ketika datang ke ArcGIS. Sekarang saya mendapatkan kesalahan NameError name 'OBJECTID' tidak didefinisikan.

ubi jalar
sumber

Jawaban:

12

Anda perlu menggunakan kode ini dalam ArcMap dan kalkulator bidang. Tambahkan kelas fitur Anda di daftar konten, klik kanan untuk membuka tabel, klik kanan pada nama bidang dan luncurkan kalkulator bidang.

Kemudian Anda memeriksa kode kunci dan menyalin kode yang Anda sebutkan.

masukkan deskripsi gambar di sini

sekarang untuk cuplikan kode Anda, inilah yang akan saya lakukan

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

Anda memanggil kode ini menggunakan

autoIncrement (! name_of_field!)

di mana name_of_field berisi jenis fitur

EDIT: Jika Anda ingin menggunakan bidang OBJECTID secara langsung, maka gabungan sederhana sudah cukup

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

jika nomor Anda harus bergantung pada jenisnya, maka masuk akal untuk menggunakan blok kode 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
sumber
Oh oke. Saya mungkin bisa menggunakan OBJECTID yang sudah ada di atas meja. Terima kasih, saya akan mencoba ini dan memposting pertanyaan yang saya punya. Saya sangat menghargai itu.
ubi
Alih-alih menggunakan pStart untuk rec, bagaimana saya bisa menetapkan salah satu bidang dari tabel Attribute untuk rec?
ubi
Saya mendapatkan OBJECTID bukan kesalahan yang didefinisikan. Kode python saya ditampilkan di atas.
ubi
Anda tidak dapat menginisialisasi ulang berdasarkan "objectid" seperti yang Anda sebutkan di posting Anda, karena "objectid" adalah bidang dan bukan nilai tunggal. Apa yang dapat Anda lakukan adalah koncatenasi sederhana (yang tidak memerlukan blok kode)
radouxju
Hai pertanyaan singkat, bagaimana cara saya memeriksa Entri Null di bidang FacilityID?
ubi
2

Saya pikir ini lebih mudah dicapai dengan 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
sumber
1

Pertama, saya akan membuat bidang tambahan untuk nomor urut (PROJECT_ID). Unduh kotak alat ini http://www.arcgis.com/home/item.html?id=242e0e5c8273404085b174f66db97ecf

Di bidang id proyek Anda, klik kanan> Kalkulator Bidang dan masukkan:

"WATER" + [PROJECT_ID]

Ini akan menggabungkan teks apa pun yang Anda masukkan dengan nomor id proyek yang sesuai. Jika Anda sudah memiliki bidang yang terpisah untuk akronim dan jenis proyek, Anda dapat melakukan sesuatu yang serupa:

[ACRONYM] + [TYPE] + [PROJECT_ID]
GISKid
sumber