Добавление произвольного кода в 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%. Вы можете сделать это, используя предварительное условие .


Райан, возможно, вы могли бы объяснить, почему выходной сигнал является [P] араметром, и показать пример модуля, включенного в другой модуль. Сначала я был очень смущен, почему P для вывода, так как параметры обычно все о входах.
— Мэтт Уилки

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

10

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

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

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

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


Спасибо! Это работало довольно хорошо для того, что мне было нужно сегодня (вставка %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
Это работает (и как я бы это сделал), но Мэтт специально назвал этот метод «много работы для такой
— мелочи
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.