Aggiunta di codice arbitrario ad ArcGIS ModelBuilder?


11

Esiste un modo per aggiungere frammenti di codice arbitrari a un modello ArcGIS?

Immagino qualcosa di simile al "show code block" il generatore di espressioni in etichettatura avanzata o calcolatrice sul campo .

Ad esempio, il mio progetto del momento potrebbe trarre grandi vantaggi dal recupero del nome utente della persona che esegue lo strumento. So che in Python è semplice import os; os.environ.get('USERNAME'). Penso di poter scrivere quello snippet get_username.py, aggiungerlo a una casella degli strumenti in Arccatalog, quindi aggiungere quello strumento al modello e usarlo come parametro del modello richiesto per il mio strumento corrente. C'è molto lavoro per una cosa così piccola, e la prossima volta potrei volere qualcos'altro, come la sostituzione di variabili in linea o una variabile composta .

Penso che uno strumento di snippet di codice o simile possa rispondere a tutte queste esigenze in modo generico e ampiamente utile.


pensiero pazzo: invece del generatore di espressioni, che dire di una finestra della riga di comando di Python che salva la cronologia per il riutilizzo del modello?
matt wilkie,

2
in realtà quello che sto veramente cercando è che l'intera libreria Python sia esposta al modellista allo stesso modo degli strumenti arcgis. ma questo è solo un discorso folle (giusto?)
Matt Wilson

Grande idea! Vuoi scrivere snippet di codice al volo in uno "strumento" che elaborerà lo snippet e restituirà i risultati, giusto? Quindi, nel tuo esempio, lo "strumento" restituire <nome utente corrente> che potrebbe quindi essere applicato ad altri strumenti a valle.
RyanKDalton,

@RyanDalton, sì, è esatto.
matt wilkie,

Risposte:


3

Nuova risposta a un vecchio post, solo per chiarire come creare un modello riutilizzabile per farlo.

Apri il modello, Inserisci-> Strumenti solo modello-> Calcola valore.

Nell'espressione, digitare: getuser()

Nel blocco di codice, digitare:

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

(Vedi " Ottenere il nome utente nel formato specifico " per l'origine dello snippet di codice nome utente da @ChadCooper)

Per Tipo di dati, selezionare String.

inserisci qui la descrizione dell'immagine

Rinomina il cerchio di output in username. Il modello del risultato finale sarà simile a: Utilizzando lo strumento Calcola valore

E puoi quindi trascinare questo modello in qualsiasi modello futuro e fare riferimento alla variabile chiamata% username% in qualsiasi modello o script futuro. Assicurati solo che questo modello venga eseguito prima di provare ad accedere alla variabile% username%. Puoi farlo usando una precondizione .


Ryan forse potresti ampliare il motivo per cui l'output è un arametro [P] e mostrare un esempio del modulo incluso in un altro modulo. Inizialmente ero molto confuso sul perché P per un output, dato che i parametri riguardano generalmente tutti gli input.
matt wilkie,

@mattwilkie, non hai bisogno di alcun parametro di input perché lo script python "leggerà" gli input dal tuo sistema. Tuttavia, è necessario rendere l'output (nome utente) un parametro in modo da poter utilizzare i risultati in un altro modello o script Python. Il prossimo passo sarebbe passare il parametro username in qualcosa come uno "script di posta elettronica" che userebbe automaticamente il parametro di output uesrname come input per l'indirizzo di posta elettronica "A".
RyanKDalton,

10

In realtà puoi farlo con lo strumento Calcola valore (Gestione dati) .

Non è particolarmente elegante (l'intero codice sorgente dello strumento viene stampato nel registro ogni volta che viene eseguito) e l'editor (in realtà solo una casella di testo) è spaventoso.

Vorrei suggerire di scrivere moduli da cui è possibile importare e richiamare funzioni e quindi sarà sufficiente scrivere frammenti molto brevi nella finestra di dialogo. Altrimenti non è solo molto pulito.

Calcola valore è disponibile a tutti i livelli di licenza per Arcgis v10. Con v9.x è disponibile per Arcview solo se sono installate le estensioni Spatial o 3D Analyst ( rif ).


grazie! Questo ha funzionato abbastanza bene per quello che mi serviva oggi (inserire %USERNAME%in una connessione al database .sde). D'accordo, l'editore non è degno di questo nome, funziona bene come destinazione incolla.
matt wilkie,

1
in riferimento a: 9.x, il testo della pagina di aiuto del CV indica che lo strumento potrebbe essere disponibile se le estensioni SA / 3D sono semplicemente installate . Potrebbe essere possibile utilizzarlo senza l'estensione o la licenza dell'estensione.
matt wilkie,

"Suggerirei di scrivere moduli che è possibile importare": è davvero una grande idea!
Curtis Price,

2

Forse sto fraintendendo la domanda, ma sembra che la funzionalità dello strumento di script python, all'interno di ArcToolBox, sia ciò che stai cercando:

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

Puoi infatti utilizzare / combinare anche molti altri linguaggi di scripting (R in questo esempio):

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



3
Funziona (ed è così che lo farei), ma Matt ha specificamente definito questo metodo "molto lavoro per una cosa così piccola" nella sua domanda :)
nmpeterson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.