Suite

Utiliser arcpy.SetParameter() avec l'outil de script Python publié en tant que service de géotraitement ?


J'ai un script qui doit être publié sur ArcGIS Server en tant que service de géotraitement. Ce script calcule un ensemble d'enregistrements sous forme de table. J'ai besoin de définir un paramètre de sortie pour qu'il renvoie la table (jeu d'enregistrements).

Ainsi, pour m'assurer que j'ai une table (pas une classe d'entités), j'utilise arcpy.TableToTable_conversion(), en affichant la table dans l'espace de travail in_memory. Donc, je sais que j'ai une table. Je sais qu'il a des enregistrements, car je peux effectuer un arcpy.GetCount et obtenir le nombre d'enregistrements.

J'ai défini le paramètre de sortie. Voici à quoi cela ressemble :

arcpy.SetParameter(2, theTable)

Peu importe ce que j'essaie, cela ne fonctionne pas. Dans ma boîte à outils, le paramètre de sortie est défini en tant que RecordSet. J'ai essayé de fournir un objet Recordset, le chemin d'accès à la classe d'entités en mémoire et de nombreuses autres idées.

Comment gérez-vous correctement la sortie d'une table vers une sortie de jeu d'enregistrements à l'aide de SetParameter for ArcGIS Server ?


D'après mon expérience (et je suis plus qu'heureux d'être corrigé à ce sujet) lorsque vous créez un service de géotraitement, l'argument que vous donnez pour la sortie n'est pas l'objet lui-même, mais une référence à l'objet (le chemin du fichier).

Le type de données indique simplement au serveur comment interpréter les données en fonction de la façon dont vous exécutez l'outil (dans une application, il peut afficher automatiquement le jeu d'enregistrements, à partir de SOAP, vous pouvez obtenir le jeu d'enregistrements sous forme de flux de données (bien que je ne sois pas sûr ) et via REST, vous obtiendrez juste un lien).

Fondamentalement, vous devez écrire votre table dans ce fichier - ArcGIS Server ajoutera automatiquement un chemin de dossier/jobid au début en fonction de votre dossier de sortie à partir duquel vous avez ajouté le modèle au serveur. par exemple.

  1. Votre dossier de sortie sur le serveur peut êtreC:/arcgisserver/arcgisoutput
  2. Donc sur le serveur ce dossier devient/arcgisoutput
  3. Ensuite, votre sortie pour votre boîte à outils pourrait être/arcgisoutput/tabletoolbox
  4. Votre valeur pour la sortie peut être%scratchworkspace%/nomtable.csv

Noter la%scratchworkspace%permet au serveur ArcGIS de se soustraire aux répertoires de sortie. Voir Concepts clés des services de géotraitement dans l'aide d'ESRI.

Ainsi, le serveur crée automatiquement un identifiant de travail (UUID), crée un dossier pour vous dans la sortie et ajoute ce dernier à votre argument de sortie. Écrivez vos données là-bas et lorsque vous les récupérez du serveur arcgis, vous obtiendrez un lien href comme :http://server_name/arcgisoutput/tabletoolbox/job_id/tablename.csv

Vous devriez maintenant pouvoir accéder au fichier comme bon vous semble (utilisezurllib2.urlopen(chemin).read()en Python comme raccourci rapide).

J'espère que tout est clair ! -H


Je suppose que le paramètre de jeu d'enregistrements a été défini sur dérivé dans le script de paramètre.

Je suppose également que vous pouvez publier l'outil directement avec une boîte à outils ou via un projet mxd. D'après mon expérience, j'ai eu plus de succès avec les outils publiés dans les projets mxd.

Parfois, j'ai résolu des problèmes de services de géotraitement en publiant un modèle ModelBuilder qui n'était qu'un wrapper autour du script python, c'est-à-dire qu'à l'intérieur du modèle, je n'avais que le script et j'ai exposé les paramètres de script à l'extérieur du modèle.


Voir la vidéo: What is ArcPy (Octobre 2021).