Dodajesz dowolny kod do ArcGIS ModelBuilder?

11

Czy jest jakiś sposób na dodanie dowolnych fragmentów kodu do modelu ArcGIS?

Wyobrażam sobie coś podobnego do „pokaż blok kodu” konstruktora wyrażeń w zaawansowanym etykietowaniu lub kalkulatorze pola .

Na przykład mój projekt w tej chwili może znacznie zyskać na pobraniu nazwy użytkownika osoby uruchamiającej narzędzie. Wiem, że w pythonie jest to proste import os; os.environ.get('USERNAME'). Myślę, że mógłbym napisać ten fragment get_username.pykodu, dodać go do przybornika w Arccatalog, a następnie dodać to narzędzie do modelu i użyć go jako wymaganego parametru modelu dla mojego bieżącego narzędzia. To bardzo dużo pracy dla tak małej rzeczy i następnym razem może będę chciał czegoś innego, takiego jak podstawienie zmiennej wbudowanej lub zmienna złożona .

Myślę, że narzędzie do wycinania kodu lub podobne narzędzie może zaspokoić wszystkie te potrzeby w ogólny, ogólnie pomocny sposób.

matowe wilkie
źródło
szalona myśl: zamiast konstruktora wyrażeń, co z oknem wiersza poleceń Pythona, które zapisuje historię do ponownego użycia przez model?
matt wilkie
2
tak naprawdę to, czego naprawdę chcę, to udostępnienie całej biblioteki Pythona konstruktorowi modeli w taki sam sposób, jak narzędzia arcgis. ale to tylko szalona rozmowa (prawda?)
Matt Wilkie
Świetny pomysł! Chcesz pisać fragmenty kodu „w locie” w „narzędziu”, które przetworzy fragment i zwróci wyniki, prawda? Tak więc w twoim przykładzie „narzędzie” zwróci <bieżąca nazwa użytkownika>, które może być następnie zastosowane do innych narzędzi poniżej.
RyanKDalton
@RyanDalton, tak, dokładnie tak jest.
matt wilkie

Odpowiedzi:

3

Nowa odpowiedź na stary post, aby wyjaśnić, jak stworzyć model wielokrotnego użytku, aby to zrobić.

Otwórz model, Wstaw-> Narzędzia tylko do modelu-> Oblicz wartość.

W wyrażeniu wpisz: getuser()

W bloku kodu wpisz:

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

(Zobacz „ Pobieranie nazwy użytkownika w określonym formacie ”, aby zapoznać się ze źródłem fragmentu kodu nazwy użytkownika z @ChadCooper)

W polu Typ danych wybierz String.

wprowadź opis zdjęcia tutaj

Zmień nazwę koła wyjściowego na username. Model końcowy będzie wyglądał następująco: Za pomocą narzędzia Oblicz wartość

Następnie możesz po prostu przeciągnąć ten model do dowolnych przyszłych modeli i odwołać się do zmiennej o nazwie% username% we wszystkich przyszłych modelach lub skryptach. Upewnij się tylko, że ten model działa, zanim spróbujesz uzyskać dostęp do zmiennej% username%. Możesz to zrobić przy użyciu warunku wstępnego .

RyanKDalton
źródło
Ryan, być może mógłbyś rozwinąć wyjaśnienie, dlaczego wyjście jest parametrem [P], i pokazać przykład modułu zawartego w innym module. Początkowo byłem bardzo zdezorientowany, dlaczego P dla wyjścia, ponieważ parametry zwykle dotyczą wyłącznie danych wejściowych.
matt wilkie
@mattwilkie, nie potrzebujesz żadnych parametrów wejściowych, ponieważ skrypt pythonowy „odczyta” dane wejściowe z twojego systemu. Musisz jednak ustawić dane wyjściowe (nazwę użytkownika) jako parametr, aby można było wykorzystać wyniki w innym modelu lub skrypcie python. Następnym krokiem byłoby przekazanie parametru nazwy użytkownika do czegoś w rodzaju „skryptu e-mail”, który automatycznie użyłby parametru wyjściowego uesrname jako danych wejściowych na adres e-mail „Do”.
RyanKDalton,
10

W rzeczywistości można to zrobić za pomocą narzędzia Obliczanie wartości (zarządzanie danymi) .

Nie jest to szczególnie eleganckie (cały kod źródłowy narzędzia jest drukowany w dzienniku przy każdym uruchomieniu), a edytor (tak naprawdę tylko pole tekstowe) jest fatalny.

Sugerowałbym pisanie modułów, z których można następnie importować i wywoływać funkcje, a wtedy wystarczyłoby napisać bardzo krótkie fragmenty w oknie dialogowym. W przeciwnym razie to po prostu niezbyt czyste.

Obliczanie wartości jest dostępne na wszystkich poziomach licencji dla Arcgis v10. W wersji 9.x jest on dostępny dla Arcview tylko wtedy, gdy zainstalowane są rozszerzenia Spatial lub 3D Analyst ( ref ).

blah238
źródło
Dziękuję Ci! %USERNAME%Działa to całkiem dobrze dla tego, czego potrzebowałem dzisiaj (wstaw do połączenia z bazą danych .sde). Zgadzam się, że redaktor nie jest godny tej nazwy, działa dobrze jako miejsce docelowe wklejania.
matt wilkie
1
do: 9.x, treść strony pomocy CV wskazuje, że narzędzie może być dostępne, jeśli rozszerzenia SA / 3D są jedynie zainstalowane . Można go używać bez licencjonowania lub aktywacji rozszerzenia.
matt wilkie
„Sugeruję pisanie modułów, które można następnie zaimportować” - to naprawdę świetny pomysł!
Curtis Price
2

Być może nie rozumiem pytania, ale wydaje się, że funkcjonalność narzędzia skryptowego Python w ArcToolBox jest tym, czego szukasz:

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

Możesz także użyć / połączyć kilka innych języków skryptowych (R w tym przykładzie):

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

Brent Edwards
źródło
Zobacz także Integrowanie skryptów w modelu
Chad Cooper
3
To działa (i tak bym to zrobił), ale Matt specjalnie nazwał tę metodę „dużo pracy dla tak małej rzeczy” w swoim pytaniu :)
nmpeterson