Этот тип операции почти всегда включает в себя написание предложения WHERE, так что я думаю, что нужно использовать хотя бы немного Python.
Кроме того, хотя это возможно сделать с ModelBuilder, IMO, создание инструмента сценариев Python с настраиваемой проверкой и большим контролем над настройками параметров может обеспечить лучший пользовательский опыт - например, с помощью раскрывающихся меню параметров Field и MultiValue *, которые Вы можете выбрать значения вместо того, чтобы вводить их.
* возможно, на самом деле не уверен насчет параметров MultiValue
Однако, поскольку это более сложное упражнение для другой темы, я буду придерживаться подхода ModelBuilder, использующего только Python для создания предложения WHERE:
- Создать новую модель
- Создайте переменные (щелкните правой кнопкой мыши пустой холст и выберите « Добавить переменную» ) для входных параметров « Слой объектов» , « Поле» и « Многозначное значение» .
- Щелкните правой кнопкой мыши по каждому из них и выберите параметр модели.
- Добавьте инструмент « Расчет стоимости» («Управление данными») на холст. Подключите к нему 3 переменные в качестве предварительных условий (только для показа в этом случае, но это может иметь значение в порядке выполнения в других ситуациях).
Дважды щелкните инструмент Calculate Value, чтобы настроить его:
5а. Скопируйте / вставьте следующее в поле « Выражение» (настройте в соответствии с именами переменных):
buildWhereClauseMultiValue(r"%Feature Layer%","%Field%","%Values%")
5б. Скопируйте / вставьте следующее в поле « Блок кода» :
import arcpy
def buildWhereClauseMultiValue(table, field, values):
"""Takes a semicolon-delimited list of values and constructs a SQL WHERE
clause to select those values within a given field and table."""
# Add DBMS-specific field delimiters
fieldDelimited = arcpy.AddFieldDelimiters(arcpy.Describe(table).path, field)
# Split multivalue at semicolons and strip quotes
valueList = [value[1:-1] if (value.startswith("'") and value.endswith("'")) else value for value in values.split(';')]
# Determine field type
fieldType = arcpy.ListFields(table, field)[0].type
# Add single-quotes for string field values
if str(fieldType) == 'String':
valueList = ["'%s'" % value for value in valueList]
# Format WHERE clause in the form of an IN statement
whereClause = "%s IN(%s)" % (fieldDelimited, ', '.join(valueList))
return whereClause
5с. Установите выходной тип данных как выражение SQL .
5d. Нажмите кнопку «ОК» и щелкните правой кнопкой мыши выходную переменную из инструмента «Вычислить значение» и переименуйте ее в нечто более описательное, например «WHERE Clause».
- Добавьте инструмент Выбрать слой по атрибуту (Управление данными) на холст. Подключите переменные Feature Layer и WHERE Clause к инструменту Select Layer By Attribute.
Добавьте инструмент Копировать объекты (Управление данными) на холст. Соедините выходные данные инструмента Выбрать слой по атрибуту с инструментом Копировать объекты. Щелкните правой кнопкой мыши переменную Output Feature Class и проверьте параметр модели и (опционально) параметры Add to Display .
На данный момент это должно выглядеть примерно так:
В меню « Модель -> Свойства модели» дайте ему хорошее имя и метку, а затем сохраните и закройте его.
Дважды щелкните модель в ArcToolbox, чтобы открыть диалоговое окно модели. Введите ваши параметры и нажмите ОК. Он должен экспортировать выбранные объекты в новый класс объектов и добавить его на карту (если вы отметили «Добавить к отображению» в выходном классе объектов).
ЗАМЕТКИ:
Вы всегда можете жестко задавать значения, а не «параметризировать» переменные, которые вы не хотите, чтобы пользователь изменял, например, векторный слой или параметры поля. Мне просто нравится иметь инструменты, которые являются общими / многоразовыми, поэтому я сделал эти параметры модели. Фактически, я бы просто перетащил универсальную модель в новую модель, а затем установил свои предопределенные параметры - таким образом, вы можете создать несколько разных предопределенных моделей «обертки», но только одна базовая модель будет работать, поэтому если вам нужно изменить его функциональность, вам нужно изменить его только в одном месте.
Если вам повезло, как и мне, вам не нужно будет проверять модель и предоставлять некоторые фиктивные данные только для того, чтобы удалить ее после проверки (обратите внимание, что все элементы модели пустые / белые, то есть они не «готовы к запуску») - но я смог запустить его после заполнения параметров в диалоговом окне модели).