Adicionando código arbitrário ao ArcGIS ModelBuilder?

11

Existe alguma maneira de adicionar trechos de código arbitrários a um modelo do ArcGIS?

Eu imagino algo semelhante ao "show code block", o construtor de expressões na etiquetagem avançada ou na calculadora de campo .

Por exemplo, meu projeto do momento pode se beneficiar muito ao buscar o nome de usuário da pessoa que está executando a ferramenta. Eu sei que em python isso é simples import os; os.environ.get('USERNAME'). Acho que eu poderia escrever esse trecho get_username.py, adicioná-lo a uma caixa de ferramentas no Arccatalog, depois adicionar essa ferramenta ao modelo e usá-lo como parâmetro de modelo por requisito para a minha ferramenta atual. Isso dá muito trabalho para uma coisa tão pequena, e da próxima vez eu poderia querer outra coisa, como substituição de variável embutida ou uma variável composta .

Eu acho que uma ferramenta de trecho de código ou similar pode atender a todas essas necessidades de uma maneira genérica e amplamente útil.

Matt Wilson
fonte
pensamento louco: em vez do construtor de expressões, que tal uma janela de linha de comando python que salva o histórico para a reutilização do modelo?
23412 Mattel
2
na verdade, o que realmente busco é que toda a biblioteca Python seja exposta ao construtor de modelos da mesma forma que as ferramentas do arcgis. mas isso é apenas conversa louca (certo?)
Matt Wilkie
Boa ideia! Você deseja gravar trechos de código rapidamente em uma "ferramenta" que processará o trecho e retornará os resultados, certo? Portanto, no seu exemplo, a "ferramenta" retornaria <nome de usuário atual>, que poderia ser aplicado a outras ferramentas a jusante.
RyanKDalton 16/05
@RyanDalton, sim, isso é exatamente correto.
Matt Wilkie

Respostas:

3

Nova resposta para um post antigo, apenas para esclarecer como criar um modelo reutilizável para fazer isso.

Abra o modelo, Inserir-> Ferramentas Somente Modelo-> Calcular Valor.

Na expressão, digite: getuser()

No bloco de código, digite:

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

(Consulte " Obtendo o nome do usuário em formato específico " para obter a fonte do snippet de código do nome de usuário em @ChadCooper)

Para Tipo de dados, escolha String.

insira a descrição da imagem aqui

Renomeie o círculo de saída para username. O modelo de resultado final será semelhante a: Usando a ferramenta Calcular Valor

E você pode simplesmente arrastar esse modelo para qualquer modelo futuro e referenciar a variável chamada% username% em quaisquer modelos ou scripts futuros. Apenas certifique-se de que este modelo seja executado antes de tentar acessar a variável% username%. Você pode fazer isso usando uma pré - condição .

RyanKDalton
fonte
Ryan, talvez você possa expandir por que a saída é um arâmetro [P] e mostrar um exemplo do módulo sendo incluído em outro módulo. Inicialmente, fiquei muito confuso por que P para uma saída, pois os parâmetros geralmente são todos sobre entradas.
Matt Wilkie
@mattwilkie, você não precisa de nenhum parâmetro de entrada porque o script python "lê" as entradas do seu sistema. No entanto, você precisa tornar a saída (o nome de usuário) um parâmetro para poder consumir os resultados em outro modelo ou script python. A próxima etapa seria passar o parâmetro username para algo como um "script de email" que usaria automaticamente o parâmetro de saída uesrname como entrada para o endereço de email "To".
precisa saber é o seguinte
10

Na verdade, você pode fazer isso com a ferramenta Calcular valor (gerenciamento de dados) .

Não é particularmente elegante (todo o código-fonte da ferramenta é impresso no log toda vez que é executado), e o editor (na verdade, apenas uma caixa de texto) é péssimo.

Eu sugiro escrever módulos dos quais você pode importar e chamar funções e, em seguida, você só precisará escrever trechos muito curtos na caixa de diálogo. Caso contrário, não é apenas muito limpo.

Calcular valor está disponível em todos os níveis de licença do Arcgis v10. Com a v9.x, ele está disponível para o Arcview apenas se as extensões do Spatial ou 3D Analyst estiverem instaladas ( ref ).

blah238
fonte
obrigado! Isso funcionou muito bem para o que eu precisava hoje (insira %USERNAME%em uma conexão de banco de dados .sde). Concordou que o editor não é digno desse nome, funciona bem como um destino de colagem.
214126
1
re: 9.x, o texto da página de ajuda do CV indica que a ferramenta pode estar disponível se as extensões SA / 3D forem apenas instaladas . Pode ser possível usá-lo sem a extensão ser licenciada ou ativada.
214126 #: 187126/10/2018
"Sugiro escrever módulos que você possa importar" - é uma ótima idéia!
Curtis Preço
2

Talvez eu esteja entendendo mal a pergunta, mas parece que a funcionalidade da ferramenta de script python, no ArcToolBox, é o que você está procurando:

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

De fato, você também pode usar / combinar várias outras linguagens de script (R neste exemplo):

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

Brent Edwards
fonte
3
Isso funciona (e é assim que eu iria fazê-lo), mas Matt especificamente chamado este método "um monte de trabalho para uma coisa tão pequena" na sua pergunta :)
nmpeterson