Витяг за атрибутами за допомогою ModelBuilder з введенням користувача?


11

Використовуючи ModelBuilder, я хочу створити інструмент, який дозволить користувачеві вибирати значення або значення, які будуть використовуватися для вилучення файлу форми.

У мене шар посилки з полем "Parcel_Type". Я хочу, щоб користувач міг вибрати тип посилки для вилучення. Отже, якщо користувач хоче вилучити посилки типу "EL", тоді він повинен буде лише ввести "EL" як змінну. Якщо він хоче ввести "EL" та "CDD", йому потрібно ввести їх у вигляді багато змінних. Це була б єдина взаємодія людини з моделлю.

Тож як я можу використовувати ці змінні у своїй моделі?

Відповіді:


14

Цей тип операцій майже завжди включає написання пункту WHERE, тому я думаю, що принаймні трохи Python використовується в порядку.

Крім того, в той час як це можливо зробити з ModelBuilder, ІМО, створюючи Python інструмент скрипт з користувальницької перевірки і більшого контролю над настройками параметрів може забезпечити кращий користувальницький досвід - наприклад, шляхом внесення полів і MultiValue * параметри в спадному меню, ви можете вибирати значення замість того, щоб вводити їх.

* можливо, насправді не впевнений у параметрах MultiValue

Однак, оскільки це більш досконала вправа для іншої теми, я буду дотримуватися підходу ModelBuilder, використовуючи Python лише для створення пункту WHERE:

  1. Створіть нову модель
  2. Створення змінних (клацніть правою кнопкою миші на порожній полотно і натисніть кнопку Add Variable ) для введення додаткових компонентів шару , поле і MultiValue параметрів.
  3. Клацніть правою кнопкою миші кожне з них і виберіть Параметр моделі
  4. Додайте на полотно інструмент « Обчислити значення» («Управління даними») . Підключіть до нього 3 змінних як передумови (лише для показу в цьому випадку, але це може змінити порядок виконання в інших ситуаціях).
  5. Двічі клацніть інструмент «Розрахувати вартість», щоб налаштувати його:

    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. Клацніть Гаразд та клацніть правою кнопкою миші вихідну змінну в інструменті «Обчислити значення» та перейменуйте її на щось більш описове, як-от «ДІЙСЬКИЙ пункт».

  6. Додайте до полотна інструмент Select Layer By Attribute (Управління даними) . Підключіть змінні класу "Характеристики" та "СТОРОГО", де змінено пункт "Інструмент" Вибір рівня за ознаками.
  7. Додайте до полотна інструмент " Функції копіювання (управління даними) ". Підключіть вихід інструменту Select Layer By Attribute до інструменту Copy Features. Клацніть правою кнопкою миші змінну класу Вихідна характеристика та перевірте Параметр моделі та (необов'язково) параметри Додати до відображення .

    У цей момент це має виглядати приблизно так: Модельне полотно

  8. У меню Модель -> Властивості моделі дайте ім'я та етикетку та збережіть та закрийте.

  9. Двічі клацніть на моделі в ArcToolbox, щоб відкрити діалогове вікно моделі. Введіть свої параметри та натисніть кнопку ОК. Він повинен експортувати вибрані функції до нового класу функцій та додати їх до карти (якщо у вихідному класі функцій встановлено прапорець "Додати до відображення").

    Діалог моделі

ПРИМІТКИ:

  • Ви завжди можете встановити значення жорсткого коду, а не "параметризувати" змінні, які не хочете, щоб користувач мінявся, як параметр рівня функції чи поля. Мені просто подобається мати загальні / багаторазові інструменти, тому я створив ці параметри моделі. Насправді я б просто перетягнути загальну модель у нову модель, а потім встановити свої заздалегідь задані параметри - таким чином ви зможете зробити декілька різних заздалегідь заданих моделей «обгортки», але лише одна одна основна модель виконує цю роботу, так якщо вам потрібно змінити його функціональність, вам доведеться змінити його лише в одному місці.

  • Якщо вам пощастило, як я, вам не доведеться перевіряти модель та надавати деякі фіктивні дані лише для того, щоб видалити їх після перевірки (зверніть увагу на те, як усі елементи моделі порожні / білі, тобто вони не "готові до запуску" - але мені вдалося запустити його будь-коли після заповнення параметрів у діалоговому вікні моделі).


3

Ви також можете скористатися одним простим інструментом для геообробки під назвою Select, щоб досягти цього робочого процесу, якщо ваші вимоги GUI не відповідають точному діалогу, проілюстрованому @ blah238.

Скористайтеся вікном пошуку, щоб знайти його або перейдіть до ArcToolbox> Інструменти аналізу> Витяг> Вибрати.

Інструмент Вибір (Аналіз) дозволяє витягувати функції, використовуючи будь-яке поле (атрибут) з класу функцій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.