Я использую ArcGIS 10.2 для рабочего стола, и я просматривал этот сайт, и пока не могу найти свой ответ. Очень плохо знаком с VBA и Python, но много лет с ArcGIS. Я знаю, что могу сделать это медленно с помощью Select By Attributes, но это отнимает много времени.
Я пытаюсь выполнить пространственное соединение между случаями заболевания (слой точек) и переписными участками США (слой многоугольников). Это требует подсчета данных. Для каждой точки / случая у меня есть поле под названием ГОД с диапазонами дат от 2001 до 2012 в зависимости от того, в каком году произошел случай. Мне нужен столбец подсчета для каждого года. Например, первый, который я называю COUNT01. Если в случае ГОД в 2001 году, то в COUNT01 будет указан 1. Если это какой-либо другой год (2002-2012), тогда должно быть 0. У меня будут столбцы COUNT02, COUNT03 ... COUNT12. Не может иметь значение "Null".
Вот что я пробовал до сих пор
А вот как выглядят данные в Arc.
vba
иvbscript
тег сpython
тегом. Хотя это еще не сделано, VBScript находится в процессе устаревания . Я ожидаю, что это будет легко сделать с анализатором Python, как только вы предоставите более подробное описание, которое включает в себя рисунок / таблицу с некоторыми примерами строк, показывающими фактический ввод и ожидаемый вывод. Является ли YEAR полем даты или целочисленным полем, содержащим значения, соответствующие годам?Ответы:
Я думаю, что это то, что вы хотите .... с помощью Python вы можете сделать следующее (предполагается, что поля YEAR и COUNT0X являются целыми числами)
Обратите внимание, что Python использует отступ для анализа кода, поэтому убедитесь, что интервал правильный.
источник
if (int(year) == yearVal):
, или другие (см .: informit.com/articles/article.aspx?p=459269&seqNum=7 ).Этот ответ, по сути, такой же, как перечисленный выше, однако это способ не использовать блок кода ... для поля Count01 вы должны установить синтаксический анализатор на Python, а затем установить свой расчет на
Это выглядит так: Установите поле в 1, если поле YEAR 2001, если не 2001, то установите в 0 ...
Если у вас есть несколько условий if, вы можете вкладывать 2-е (и последующие) условия if в оператор else, например this ...
Это читается следующим образом: установите поле в 1, если поле YEAR 2001, если не 2001, то установите в 2, если 2002, если нет, то установите в 0 ...
источник
1 if !YEAR! == 2001 else (2 if !YEAR! == 2002 else (3 if !YEAR! == 2003 else 0))
Если вы собираетесь использовать VBScript, тогда ваше поле вычислено неправильно. Во-первых, я бы не использовал переменную, которая является именем поля, это сбивает с толку, используйте другое имя, чтобы его было кристально ясно, что вы устанавливали. Ваш «endif» был неправильным, это должно быть «end if» и ваш код должен был находиться в разделе пред-логического скрипта. Правильный способ настройки показан ниже. Но, как говорили другие, старайтесь не использовать VBScript, поскольку ESRI одержим желанием избавиться от него в пользу Python.
источник