Özellik sınıfı içindeki gruplara göre otomatik artan alan?


10

Bir özellik sınıfı içindeki gruplara dayalı bir alanı otomatik olarak artırmaya ihtiyacım var. Belirli bir çokgen içinde 8 parselim var ve her poligon içindeki her parsel kümesi için onlara 1-8 arasında bir kimlik atamam gerekiyor. Çokgenin, çizimleri gruplandırmak için kullanılacak benzersiz bir kimlik numarası olacaktır.

Bunun bir değişiklik olacağını varsayıyorum:

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

1
Muhtemelen Python ( %) modül operatörünün kullanımını okumak istersiniz
Vince

Yanıtlar:


12

Python için alan hesaplayıcı

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

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

GroupOrder( !locality! )

Yer değiştir! ilgili alana.

GÜNCELLEME: Bu ifade varyasyonu:

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

Büyük veri kümelerinde çok daha hızlı çalışmalıdır.


GroupOrder işlevi bağımsız bir python komut dosyasında kullanılacaksa, GroupOrderişlev code blockbağımsız değişken ve GroupOrder( !locality! )'ifade' bağımsız değişkeni olur.
user3467260

Komut dosyasında: a) sözlük oluştur b) imleci 2 alan grubunda, diğeri doldurulurken güncelleyin. 3-5 satırlık kod.
FelixIP

1
Yorumumda bu argümanların arcpy hesapla alan aracına dahil edileceğini belirtmeyi ihmal ettim: arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", codeblock)tek başına bir komut dosyasında kullanılırsa. Kodunuzu tek başına bir komut dosyasında kullanmak için farklı bir yaklaşımın adımlarını açıkladığınız için teşekkür ederiz.
user3467260

Hepsi iyi. Her neyse, da imlecin alan hesaplayıcısından çok daha hızlı olduğu izlenimindeyim.
FelixIP
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.