Bidang penambahan otomatis berdasarkan grup dalam kelas fitur?


10

Saya perlu menambahkan bidang secara otomatis berdasarkan grup dalam kelas fitur. Saya memiliki 8 plot dalam poligon yang diberikan dan saya harus memberi mereka ID dari 1-8 untuk setiap set plot dalam setiap poligon. Poligon akan memiliki nomor ID uniknya sendiri untuk digunakan untuk mengelompokkan plot.

Saya menganggap itu akan menjadi perubahan ini:

rec=0
def autoIncrement():
 global rec
 pStart = 1 
 pInterval = 1 
 if (rec == 0): 
  rec = pStart 
 else: 
  rec = rec + pInterval 
 return rec

1
Anda mungkin ingin membaca tentang penggunaan operator modulus Python ( %)
Vince

Jawaban:


12

Kalkulator bidang untuk Python

d={}
def GroupOrder(groupID):
  if groupID in d: d[groupID]+=1
  else: d[groupID]=1
  return d[groupID]

---------------------------

GroupOrder( !locality! )

Ubah! Lokalitas! ke bidang yang relevan.

UPDATE: Variasi ekspresi ini:

d={}
def GroupOrder(groupID):
  N=d.get(groupID,0);N+=1
  d[groupID]=N
  return N

Seharusnya bekerja lebih cepat pada dataset besar.


Jika fungsi GroupOrder akan digunakan dalam skrip python yang berdiri sendiri, GroupOrderfungsi akan menjadi code blockargumen dan GroupOrder( !locality! )akan menjadi argumen 'ekspresi'.
user3467260

Dalam skrip adalah: a) membuat kamus b) memperbarui kursor pada 2 bidang grup dan satu untuk diisi. 3-5 baris kode.
FelixIP

1
Saya lalai menyebutkan dalam komentar saya bahwa argumen itu akan dimasukkan dalam alat bidang penghitungan busur: arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", codeblock)jika digunakan dalam skrip yang berdiri sendiri. Terima kasih telah menjelaskan langkah-langkah pendekatan yang berbeda untuk menggunakan kode Anda dalam skrip yang berdiri sendiri.
user3467260

Semuanya bagus. Lagi pula saya mendapat kesan bahwa da cursor jauh lebih cepat daripada kalkulator lapangan.
FelixIP
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.