Автоматическое увеличение поля на основе групп в классе объектов?

10

Мне нужно для автоматического увеличения поля на основе групп в классе объектов. У меня есть 8 графиков в данном полигоне, и мне нужно назначить им ID от 1 до 8 для каждого набора графиков в каждом полигоне. Многоугольник будет иметь свой собственный уникальный идентификационный номер, который будет использоваться для группировки графиков.

Я предполагаю, что это будет изменением этого:

rec=0
def autoIncrement():
 global rec
 pStart = 1 
 pInterval = 1 
 if (rec == 0): 
  rec = pStart 
 else: 
  rec = rec + pInterval 
 return rec
Бекс
источник
1
Вы, вероятно, хотите прочитать об использовании оператора модуля Python ( %)
Винс

Ответы:

12

Полевой калькулятор для Python

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

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

GroupOrder( !locality! )

Поменяй местность! в соответствующее поле.

ОБНОВЛЕНИЕ: Это изменение выражения:

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

Должно работать намного быстрее на больших наборах данных.

FelixIP
источник
Если бы функция GroupOrder использовалась в автономном скрипте Python, GroupOrderфункция была бы code blockаргументом, а аргументом GroupOrder( !locality! )- выражением.
user3467260
В скрипте это: а) создать словарь б) обновить курсор на группу из 2 полей и одно для заполнения. 3-5 строк кода.
FelixIP
1
Я не упомянул в своем комментарии, что эти аргументы будут включены в инструмент вычисления поля arcpy: arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", codeblock)если он используется в автономном скрипте. Спасибо за описание шагов другого подхода к использованию вашего кода в автономном скрипте.
user3467260
Все хорошо. В любом случае у меня сложилось впечатление, что курсор намного быстрее, чем полевой калькулятор.
FelixIP