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.