Есть ли способ рассчитать отсортированное поле с последовательными числами? Я видел класс объектов Сортировка для вычисления последовательного идентификатора поля с помощью ArcGIS Field Calculator? в нем описано, как рассчитывать последовательные числа, но это всегда рассчитывается по порядку FID, а не по порядку сортировки.
#Pre-logic Script Code:
rec=0
def autoIncrement():
global rec
pStart = 1
pInterval = 1
if (rec == 0):
rec = pStart
else:
rec += pInterval
return rec
#Expression:
autoIncrement()
Пример того , что я пытаюсь сделать. Я использовал расширенную сортировку для сортировки по году, месяцу, дню и теперь хочу иметь в Seq
поле последовательные числа . Вы увидите, что мое OBJECTID
поле не в порядке, поэтому приведенный выше код не будет работать.
Можно ли это сделать либо в Калькуляторе поля, либо с помощью курсора обновления в arcpy?
Ответы:
«Решение» с 2 отсортированными полями (по возрастанию):
--------------------------------------
ОБНОВЛЕННАЯ ВЕРСИЯ:
-----------------------
Требуется 1,5 секунды, чтобы завершить задачу на 10000 записей. Оригинал занимает чуть больше 2 минут
источник
Это двухэтапный процесс, и, как следствие, Калькулятор поля не очень подходит для него. Лучше запустить это в автономном скрипте. Однако это можно сделать в полевом калькуляторе, если вы используете хитрость. Вам нужно использовать курсор для загрузки всех значений в глобальный словарь из отсортированного списка, но только во время вычисления первой записи. Для всех остальных записей вы должны пропустить создание словаря, чтобы избежать постоянного перечитывания всей таблицы для каждой строки.
Три значения поля должны быть помещены в кортеж, чтобы они действовали как ключ, который будет правильно сортироваться. Я предполагаю, что все значения комбинации из 3 полей уникальны в таблице SamplePoint, но я добавил ObjectID, чтобы убедиться, что он уникален. Вы должны указать путь и имя шейп-файла в строке 8 (или я мог бы использовать технику, которую использует FelixIP, когда используется первый слой на текущей карте). Если вы хотите использовать разные поля для ключа, вы должны изменить список полей в строке 10 и сопоставить их с полями ввода в строке 3 и строке 15.
Я также не рекомендовал бы использовать имена полей Год, Месяц и День, поскольку они работают только в шейп-файлах и не допускаются в базах геоданных. База геоданных изменит имена на Year_1, Month_1, Day_1, если вы попытаетесь добавить их в список полей в свойствах таблицы.
Если цель этой таблицы состоит в том, чтобы связать ее с другим классом таблиц / пространственных объектов по многопольному ключу, рассмотрите возможность использования инструмента, созданного в моем блоге, под названием « Ключ от нескольких полей к ключу одного поля» - связать два слоя на основе более чем одного поле
источник
У меня был тот же вопрос, но для более простой задачи, основанной на сортировке только одного поля. Я был успешным с помощью следующего сценария:
источник