Eu tenho um script que precisa ser publicado no ArcGIS Server como um serviço de geoprocessamento. Este script calcula um conjunto de registros em forma de tabela. Eu preciso definir um parâmetro de saída para que ele retorne a tabela (conjunto de registros).
Portanto, para garantir que eu tenha uma tabela (não uma classe de recurso), estou usando arcpy.TableToTable_conversion (), exibindo a tabela no espaço de trabalho in_memory. Então, eu sei que tenho uma mesa. Eu sei que ele tem registros, pois eu posso executar um arcpy.GetCount e obter o número de registros.
Eu tenho o parâmetro de saída definido. Aqui está o que parece:
arcpy.SetParameter(2, theTable)
Não importa o que eu tente, isso não funciona. Na minha caixa de ferramentas, o parâmetro de saída é definido como um RecordSet. Tentei fornecer um objeto de conjunto de registros, o caminho para a classe de recurso na memória e muitas outras idéias.
Como você lida corretamente com a saída de uma tabela para uma saída do conjunto de registros usando o SetParameter for ArcGIS server?
Respostas:
Na minha experiência (e estou mais do que feliz em ser corrigido nisso), quando você cria um serviço de geoprocessamento, o argumento que você fornece para a saída não é o objeto em si, mas uma referência ao objeto (o caminho do arquivo).
O tipo de dados apenas informa ao servidor como interpretar os dados, dependendo de como você executa a ferramenta (em um aplicativo, ele pode exibir automaticamente o conjunto de registros, no SOAP, você pode obter o conjunto de registros como um fluxo de dados (embora eu não tenha certeza ) e através do REST, você obterá um link).
Basicamente, você precisa escrever sua tabela neste arquivo - o servidor ArcGIS anexará automaticamente um caminho de pasta / jobid para a frente, com base na sua pasta de saída, a partir de quando você adicionou o modelo ao servidor. por exemplo
C:/arcgisserver/arcgisoutput
/arcgisoutput
/arcgisoutput/tabletoolbox
%scratchworkspace%/tablename.csv
Observe que o
%scratchworkspace%
servidor ArcGIS permite submarinar nos diretórios de saída. Consulte Conceitos-chave para serviços de geoprocessamento na ajuda da ESRI.Portanto, o servidor cria automaticamente um ID de trabalho (UUID), cria uma pasta para você na saída e o anexa ao argumento de saída. Escreva seus dados lá e, quando recuperá-los do servidor arcgis, você obterá um link href como:
http://server_name/arcgisoutput/tabletoolbox/job_id/tablename.csv
Agora você deve conseguir acessar o arquivo da maneira que desejar (use
urllib2.urlopen(path).read()
no Python como um atalho rápido).Espero que tudo isso esteja claro! -H
fonte
Estou assumindo que o parâmetro do conjunto de registros foi definido como derivado no script de parâmetro.
Também estou assumindo que você pode publicar a ferramenta diretamente com uma caixa de ferramentas ou através de um projeto mxd. Na minha experiência, tive mais sucesso com ferramentas publicadas em projetos mxd.
Às vezes, resolvi problemas de serviços de geoprocessamento publicando um modelo ModelBuilder que era apenas um wrapper em torno do script python, ou seja, dentro do modelo, eu tinha apenas o script e expus os parâmetros de script fora do modelo.
fonte