Додавання довільного коду до ArcGIS ModelBuilder?


11

Чи є спосіб додати довільні фрагменти коду до моделі ArcGIS?

Я маю на увазі щось подібне до "показати код блоку" конструктора виразів в розширеному маркуванні або калькуляторі поля .

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

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


божевільна думка: замість конструктора виразів, що робити з вікном командного рядка python, який зберігає історію для повторного використання моделі?
matt wilkie

2
насправді те, про що я дійсно хочу, - це вся бібліотека Python, яка піддається розробці моделей так само, як і інструменти аркгізу. але це просто божевільна розмова (правда?)
matt wilkie

Чудова ідея! Ви хочете записати фрагменти коду на льоту в "інструмент", який обробить фрагмент і поверне результати, правда? Отже, у вашому прикладі "інструмент" повертає <поточне ім'я користувача>, яке потім може бути застосовано до інших інструментів нижче за течією.
RyanKDalton

@RyanDalton, так, саме так.
matt wilkie

Відповіді:


3

Нова відповідь на стару публікацію, просто для того, щоб уточнити, як створити повторно використану модель для цього.

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

У поле Вираз введіть: getuser()

У кодовому блоці введіть:

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

(Див. " Отримання імені користувача у визначеному форматі " для джерела фрагмента коду імені користувача від @ChadCooper)

Для типу даних виберіть String.

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

Перейменуйте вихідний круг на username. Модель кінцевого результату виглядатиме так: Використовуючи інструмент Обчислити значення

Потім ви можете просто перетягнути цю модель у будь-які майбутні моделі та посилатись на змінну під назвою% username% у будь-яких майбутніх моделях чи сценаріях. Просто переконайтеся, що ця модель працює, перш ніж спробувати отримати доступ до змінної% username%. Це можна зробити, використовуючи попередню умову .


Раян, можливо, ви могли б розширити, чому вихід є [P] араметром, і показати приклад того, що модуль включений в інший модуль. Я спочатку дуже заплутався, чому P для виводу, оскільки параметри, як правило, стосуються входів.
matt wilkie

@mattwilkie, вам не потрібні вхідні параметри, оскільки сценарій python "прочитає" вхідні дані з вашої системи. Однак вам потрібно зробити вихід (ім'я користувача) параметром, щоб ви могли споживати результати в іншій моделі або сценарії python. Наступним кроком буде перенесення параметра імені користувача у щось на зразок "скрипта електронної пошти", який автоматично використовує вихідний параметр uesrname як вхід до електронної адреси "До".
RyanKDalton

10

Насправді це можна зробити за допомогою інструменту « Обчислити вартість (управління даними) ».

Це не особливо елегантно (весь вихідний код цього інструменту друкується в журналі кожного разу, коли він працює), а редактор (насправді лише текстове поле) є ненормальним.

Я б запропонував написати модулі, з яких потім можна імпортувати та викликати функції, і тоді вам потрібно буде написати лише короткі фрагменти у діалоговому вікні. Інакше це просто не дуже чисто.

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


Дякую! Це працювало досить добре для того, що мені було потрібно сьогодні (вставити %USERNAME%у підключення до бази даних .sde). Погоджений редактор не гідний цього імені, він прекрасно працює як місце призначення.
matt wilkie

1
re: 9.x, редакція сторінки довідки CV вказує, що інструмент може бути доступний, якщо розширення SA / 3D просто встановлені . Можна використовувати його без ліцензії або активації розширення.
matt wilkie

"Я б запропонував написати модулі, які потім можна імпортувати" - це справді чудова ідея!
Кертіс Ціна

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
Це працює (і як я це зробив би), але Метт спеціально назвав у своєму питанні цей метод "багато роботи для такої дрібної речі" :)
nmpeterson
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.