Ö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.