Добавление произвольного кода в ArcGIS ModelBuilder?

11

Есть ли способ добавить произвольные фрагменты кода в модель ArcGIS?

Я представляю что-то похожее на «show code block» в построителе выражений в расширенной маркировке или калькуляторе полей .

Например, мой проект на данный момент может извлечь большую выгоду из получения имени пользователя, запустившего инструмент. Я знаю, в Python это просто import os; os.environ.get('USERNAME'). Я думаю, что я мог бы написать этот фрагмент get_username.py, добавить его в набор инструментов в Arccatalog, затем добавить этот инструмент в модель и использовать его в качестве параметра модели для моего текущего инструмента. Это большая работа для такой маленькой вещи, и в следующий раз я могу захотеть что-то еще, например, подстановку встроенных переменных или составных переменных .

Я думаю, что инструмент фрагмента кода или аналогичный может удовлетворить все эти потребности в общем и целом полезной манере.

Мэтт Уилки
источник
сумасшедшая мысль: вместо конструктора выражений, как насчет окна командной строки python, которое сохраняет историю для повторного использования модели?
Мэтт Вилки
2
на самом деле то, что я действительно ищу, это то, что вся библиотека Python будет доступна для создателя модели точно так же, как инструменты arcgis. но это просто сумасшедший разговор (верно?)
Мэтт Вилки
Отличная идея! Вы хотите писать фрагменты кода на лету в «инструмент», который будет обрабатывать фрагмент и возвращать результаты, верно? Таким образом, в вашем примере «инструмент» вернет <текущее имя пользователя>, которое затем может быть применено к другим инструментам ниже по течению.
RyanKDalton
@RyanDalton, да, это точно.
Мэтт Вилки

Ответы:

3

Новый ответ на старый пост, просто чтобы уточнить, как создать модель многократного использования для этого.

Откройте модель, выберите Вставка-> Инструменты только для моделей-> Вычислить значение.

В выражении введите: getuser()

В блоке кода введите:

def getuser():
    import getpass
    return getpass.getuser()

(См. « Получение имени пользователя в определенном формате » для получения фрагмента кода имени пользователя из @ChadCooper)

Для Типа данных выберите String.

введите описание изображения здесь

Переименуйте выходной круг в username. Модель конечного результата будет выглядеть так: Использование инструмента «Рассчитать стоимость»

И затем вы можете просто перетащить эту модель в любые будущие модели и ссылаться на переменную с именем% username% в любых будущих моделях или сценариях. Просто убедитесь, что эта модель работает, прежде чем пытаться получить доступ к переменной% username%. Вы можете сделать это, используя предварительное условие .

RyanKDalton
источник
Райан, возможно, вы могли бы объяснить, почему выходной сигнал является [P] араметром, и показать пример модуля, включенного в другой модуль. Сначала я был очень смущен, почему P для вывода, так как параметры обычно все о входах.
Мэтт Уилки
@mattwilkie, вам не нужны никакие входные параметры, потому что скрипт Python будет «читать» входные данные из вашей системы. Однако вам нужно сделать вывод (имя пользователя) параметром, чтобы вы могли использовать результаты в другой модели или скрипте Python. Следующим шагом будет передача параметра имени пользователя во что-то вроде «сценария электронной почты», который будет автоматически использовать выходной параметр uesrname в качестве ввода адреса электронной почты «Кому».
RyanKDalton
10

На самом деле вы можете сделать это с помощью инструмента Рассчитать стоимость (Управление данными) .

Это не особенно элегантно (весь исходный код инструмента печатается в журнале при каждом запуске), а редактор (на самом деле просто текстовое поле) ужасен.

Я бы предложил написать модули, из которых вы можете затем импортировать и вызывать функции, и тогда вам нужно будет только написать очень короткие фрагменты в диалоге. В противном случае это просто не очень чисто.

Рассчитать стоимость доступно на всех уровнях лицензии для Arcgis v10. С v9.x он доступен для Arcview, только если установлены расширения Spatial или 3D Analyst ( ссылка ).

blah238
источник
Спасибо! Это работало довольно хорошо для того, что мне было нужно сегодня (вставка %USERNAME%в соединение с базой данных .sde). Согласился, редактор не достоин этого имени, отлично работает как место для вставки.
Мэтт Уилки
1
в отношении 9.x, формулировка страницы справки CV указывает, что инструмент может быть доступен, если расширения SA / 3D просто установлены . Можно использовать его без лицензии или активации расширения.
Мэтт Уилки
«Я бы предложил написать модули, которые затем можно импортировать» - это действительно отличная идея!
Кертис Прайс
2

Возможно, я неправильно понимаю вопрос, но кажется, что функциональность инструмента-скрипта Python в ArcToolBox - это то, что вы ищете:

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Integrating_scripts_within_a_model/002w0000006n000000/

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//001500000006000000.htm

Фактически вы также можете использовать / комбинировать несколько других языков сценариев (в данном примере R):

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002w0000007w000000

Брент Эдвардс
источник
Также см. Интеграция скриптов в модель
Чед Купер
3
Это работает (и как я бы это сделал), но Мэтт специально назвал этот метод «много работы для такой
мелочи