Types de données en entrée et en sortie
Comme indiqué dans Concepts clés des services de géotraitement, seuls certains types de données peuvent être utilisés en tant que paramètres en entrée et en sortie pour les services de géotraitement.
Comme les processus qui se trouvent dans votre modèle ou votre script publié s'exécutent sur le serveur sur lequel tous les types de données sont disponibles, vous pouvez utiliser tout type de données pour les processus de modèle ou de script. Seuls les types de données de paramètre en entrée et en sortie sont limités.
Il existe quatre niveaux de prise en charge des types de données :
- Prise en charge complète à travers tous les clients.
- Pris en charge pour les clients ArcGIS Desktop uniquement.
- Non autorisés sur tous les clients. Certains types de données, tels que les TIN, ne sont pas autorisés comme paramètres. Le modèle ne publiera donc pas. Vous recevrez une erreur lors de la publication, comme illustré ci-dessous.
- Le type de données est transformé en type de données de chaîne. Par exemple, un type de données d'unité surfacique deviendra un type de données de chaîne dans la tâche publiée.
Vous pouvez être amené à apporter des modifications aux modèles et aux scripts exécutés sur ArcGIS Desktop avant de pouvoir les publier sur ArcGIS Server, en faisant en sorte de n'utiliser que les types de données en entrée et en sortie pris en charge.
Types de données en entrée
Le tableau suivant récapitule les principaux types de données de paramètre en entrée pour les trois clients.
Type de données de paramètre en entrée |
Pris en charge sur les clients ArcGIS Desktop ? |
Pris en charge sur le client ArcGIS Explorer ? |
Pris en charge sur les clients d'application Web ? |
---|---|---|---|
Jeu d'entités |
Oui |
Oui |
Oui |
Jeu d'enregistrements |
Oui |
Oui |
Oui |
Classe d'entités |
Non (mais l'entrée Classe d'entités est indirectement prise en charge avec le type de données Jeu d'entités) |
Non |
Non |
Table |
Non (mais l'entrée Table est indirectement prise en charge avec le type de données Jeu d'enregistrements) |
Non |
Non |
Raster |
Oui |
Non |
Non |
Types Standard (tel que Long, Double, Booléen, Date, Chaîne) et Unité Linéaire (par exemple, "1000 mètres") |
Oui |
Oui |
Oui |
Fichier (.zip ou .xml, par exemple) |
Oui |
Oui |
Oui |
Couche (tout type de couche ; par exemple, Couche d'entités, Couche Raster, Couche Network Analyst) |
Seulement les couches disponibles dans le service de carte obtenu ou la carte source |
Seulement les couches disponibles dans le service de carte obtenu ou la carte source |
Seulement les couches disponibles dans le service de carte obtenu ou la carte source |
Pour tout type de données en entrée ne figurant pas dans la liste ci-dessus, l'un des deux cas de figure suivants se produit lors de la publication de votre modèle ou script :
- L'outil est publié, mais le type de données est converti en type de données de chaîne contenant la représentation sous forme de chaîne des données.
- L'outil n'est pas publié et une erreur est générée. Les types de données qui provoquent des erreurs lors de publication sont les suivants :
- Tout jeu de données géographiques (classe d'entités, par exemple) ou table, à l'exception des rasters
- Elément de données
- Table de valeurs/Valeurs multiples
- Variables de modèle sous forme de listes
Classes d'entités et tables
Les types de données Classe d'entités et Table ne sont pas pris en charge en tant que paramètres en entrée, car ils reposent sur des bibliothèques logicielles volumineuses non installables sur des clients légers (comme ArcGIS Explorer et les applications Web). Le géotraitement contient de ce fait deux types de données légers (Jeu d'entités et Jeu d'enregistrements) que vous pouvez substituer aux types de données Classe d'entités et Table.
Les jeux d'entité permettent à tous les clients Web de numériser de manière interactive des entités sur une carte. Dans ArcGIS Desktop, le type de données jeux d'entités vous permet en outre d'entrer une classe d'entités existante, comme illustré ci-dessous. Les classes d'entités sont autorisées dans ArcGIS Desktop, car les bibliothèques logicielles nécessaires sont disponibles. De la même façon, les jeux d'enregistrements permettent à tous les clients de créer des enregistrements de table de manière interactive et, dans ArcGIS Desktop, de spécifier également une table existante.
Jeux de données raster
Les services de géotraitement qui ont jeu de données Raster en entrée fonctionnent uniquement sur des clients ArcGIS Desktop. Sur un client ArcGIS Explorer, le service ne peut pas être ajouté en tant que tâche. Dans les applications Web, le service renverra une erreur.
Types de données en sortie
Le tableau suivant récapitule les principaux types de données de paramètre en sortie pour les trois clients. Cette table est accompagnée de remarques sur chaque type de données.
Type de données de paramètre en sortie |
Pris en charge sur les clients ArcGIS Desktop ? |
Pris en charge sur le client ArcGIS Explorer ? |
Pris en charge sur les clients d'application Web ? |
---|---|---|---|
Classe d'entités |
Oui |
Oui |
Oui |
Couche d'entités |
Oui |
Oui |
Oui |
Raster |
Oui |
Non. Peut uniquement être affiché à l'aide d'un service de carte obtenu. |
Non. Peut uniquement être affiché à l'aide d'un service de carte obtenu. |
Couche raster |
Oui |
Non |
Non |
Jeu de données géographiques (autre que classe d'entités ou raster) |
Non. Peut uniquement être affiché à l'aide d'un service de carte obtenu. |
Non. Peut uniquement être affiché à l'aide d'un service de carte obtenu. |
Non. Peut uniquement être affiché à l'aide d'un service de carte obtenu. |
Table |
Oui |
Non (les services qui possèdent un type de données de table en tant que paramètre en sortie ne sont pas affichés dans la liste des tâches disponibles) |
Oui |
Types Standard (tel que Long, Double, Booléen, Date, Chaîne) et Unité Linéaire (par exemple, "1000 mètres") |
Oui (affiché dans le résultat des services dans la fenêtre Résultats) |
Oui (affiché dans la fenêtre Résultat des tâches) |
Oui |
Fichier |
Oui |
Oui |
Oui |
Pour tout type de données en sortie ne figurant pas dans la liste ci-dessus, l'un des deux cas de figure suivants se produit lors de la publication de votre modèle ou script :
- L'outil est publié, mais le type de données est converti en type de données de chaîne contenant la représentation sous forme de chaîne des données.
- L'outil n'est pas publié et une erreur est générée.
Si vous utilisez un service de carte obtenu pour dessiner vos données en sortie, votre tâche peut générer tout jeu de données géographiques en sortie, car le service de carte obtenu dessinera le jeu de données géographiques et renverra une carte au client (plutôt que le jeu de données lui-même).
Classe d'entités
Le type de données Classe d'entités est pris en charge comme type de données en sortie. Lorsque vous publiez un modèle ou un script, votre outil est analysé. S'il possède une classe d'entités en sortie, cette dernière est convertie en jeu d'entités en sortie, laquelle est renvoyée au client. Cette transformation se produit automatiquement ; votre modèle ou votre script n'est pas modifié. Cela se produit seulement avec les classes d'entités en sortie, car la transformation se produit sur le serveur, qui dispose de toutes les bibliothèques logicielles nécessaires pour effectuer la transformation. Ainsi, techniquement parlant, les classes d'entités ne sont pas prises en charge pour la sortie. Elles sont autorisées, car ArcGIS Server a la possibilité de les transformer en type de données Jeu d'enregistrements, lequel est pris en charge.
Couches d'entités
Une couche d'entités référence une classe d'entités sur le disque et prend en charge un jeu d'entités sélectionnées qui résultent d'une requête attributaire ou spatiale. Vous pouvez créer des couches d'entités à l'aide de l'outil Générer une couche et lancer des requêtes à l'aide des outils Sélectionner une couche par attribut et Sélectionner une couche par emplacement. Il n'est pas rare pour les tâches de géotraitement de générer des couches d'entités contenant des sélections.
Lorsqu'ArcGIS Server rencontre une couche d'entités en sortie, les entités sélectionnées sont converties en classe d'entités et seules les entités sélectionnées sont renvoyées au client.
Les couches d'entité en sortie ne fonctionnent pas dans les services de carte obtenus.
Lorsque vous utilisez des services de carte obtenus, vous devez tenir compte du fait qu'il existe deux services : le service de géotraitement et le service de carte obtenu. Ces deux services s'exécutent indépendamment l'un de l'autre. À l'exécution de la tâche, ArcGIS Server exécute d'abord la tâche de géotraitement, puis le service de carte obtenu pour dessiner la sortie du service de géotraitement. Les couches d'entités sont des objets transitoires qui sont conservés en mémoire pendant la durée d'exécution d'une tâche. Une fois la tâche exécutée, ces couches d'entités en mémoire sont effacées. Si le service de carte obtenu référence la même classe d'entités contenue dans la couche, toutes les informations sur les entités sélectionnées (autrement dit, le résultat de votre tâche) disparaîtront lorsque le service de carte est dessiné et que le service de carte obtenu dessine toutes les entités. Si vous avez besoin d'un service de carte pour dessiner des entités sélectionnées dans une couche, vous devez d'abord enregistrer ces entités sélectionnées dans une classe d'entités à l'aide de l'outil Copier des entités en indiquant votre couche d'entités en entrée. Copier des entités copie seulement les entités sélectionnées dans la couche. Vous pouvez ensuite prélever les entités copiées avec un service de carte obtenu.
Jeux de données raster
Les jeux de données raster sont pris en charge comme sortie uniquement sur les clients ArcGIS Desktop.
Couches raster
Comme pour les couches d'entités, vous pouvez générer une couche raster uniquement sur les clients ArcGIS Desktop. Quand ArcGIS Server rencontre une couche raster en sortie, le raster est renvoyé au client. Les couches raster en sortie ne fonctionnent pas dans les services de carte obtenus pour la même raison que les couches d'entités, comme indiqué ci-dessus.
Autres couches
Seules les couches d'entités et raster sont prises en charge en sortie (et, comme mentionné précédemment, les couches raster sont prises en charge uniquement par les clients ArcGIS Desktop). Tous les autres types de couches (couches NetCDF, couches d'analyse de réseau et couches d'analyse géostatistique, par exemple) ne sont pas pris en charge.
Autres jeux de données géographiques
Il est impossible de renvoyer au client les types de données de jeu de données géographiques en sortie, sauf Classe d'entités ou Raster (comme TIN ou MNT). Cependant, votre service de géotraitement peut utiliser un service de carte obtenu pour afficher les données. Le résultat de votre service de géotraitement est une couche de service de carte qui peut être dessinée sur tout client.
Table
Le type de données Table, comme le type de données Classe d'entités, est également pris en charge ; il est transformé en jeu d'enregistrements en vue d'être renvoyé au client.
Stratégies relatives aux types de données non pris en charge
Si le modèle ou le script que vous voulez publier possède des types de données en entrée ou en sortie non pris en charge ou que le type de données est converti en chaîne, vous devez modifier votre modèle ou votre script afin qu'il utilise uniquement les types de données en entrée et en sortie pris en charge. Vous pouvez employer deux stratégies générales :
- Utiliser la représentation sous forme de chaîne.
- Convertir des données en fichier.
Utilisation de la représentation sous forme de chaîne
Chaque type de données possède une représentation sous forme de chaîne. Pour plus d'informations sur les représentations sous forme de chaîne des données, consultez Types de données pour les paramètres d'outil de géotraitement.
Si une entrée de votre modèle est l'un des types de données convertis en chaîne lors de la publication sur ArcGIS Server, vous pouvez modifier votre modèle de manière à accepter l'entrée sous forme de chaîne, puis convertir la chaîne en type de données souhaité. La démonstration suivante vous indique comment effectuer cette conversion. Cet exemple montre la conversion de la valeur d'un type de données en chaîne (ce qui est le contraire de ce que vous devez faire pour votre modèle), mais il illustre un concept important : tous les types de données possèdent une représentation sous forme de chaîne. La deuxième partie de l'exemple indique comment convertir une chaîne en valeur de type de données, c'est-à-dire la méthode à utiliser dans votre service.
Le type de données utilisé pour la démonstration est Unité surfacique.
La première partie de cette démonstration détermine le format de chaîne d'une unité surfacique.
- Créez un modèle.
- Créez une variable avec un type de données Unité surfacique et renommez-la Unité surfacique en entrée.
- Ajoutez l'outil Calculer une valeur.
- Double-cliquez sur Calculer une valeur pour ouvrir la boîte de dialogue correspondante. Pour le paramètre Expression, entrez %Unité surfacique en entrée%. Cela donne pour instruction à l'outil Calculer une valeur de lire le contenu de la variable Unité surfacique en entrée. Pour le paramètre de type de données, sélectionnez Chaîne, comme illustré ci-dessous.
- Vous pouvez également définir la variable Unité surfacique en entrée comme précondition à l'exécution de l'outil Calculer une valeur. Une précondition signifie que la variable doit contenir une valeur avant l'exécution de l'outil. Les connecteurs de précondition sont affichés sous la forme de lignes pointillées, comme illustré ci-dessous.
- Double-cliquez sur la variable Unité surfacique en entrée et définissez sa valeur sur 1000 mètres carrés.
- Cliquez sur OK.
- Exécutez le modèle dans ModelBuilder. Double-cliquez sur output_value et examinez sa valeur. La valeur désigne la représentation sous forme de chaîne de l'unité surfacique, comme illustré ci-dessous. Notez que la représentation sous forme de chaîne ne contient pas d'espace entre mètres et carrés.
Comme indiqué ci-dessus, toutes les valeurs de type de données possèdent une représentation sous forme de chaîne. Vous pouvez utiliser l'outil Calculer une valeur pour afficher la représentation sous forme de chaîne de tout type de données. Par exemple, vous pouvez entrer une variable Référence spatiale dans l'outil Calculer une valeur pour afficher sa représentation sous forme de chaîne.
Les étapes suivantes vous indiquent comment convertir une variable de chaîne en un autre type de données. Les étapes sont identiques à celles qui précèdent, à la différence près que la variable en entrée est une chaîne et la sortie une unité surfacique.
- Créez un modèle.
- Créez une variable avec un type de données Chaîne et renommez-la Chaîne d'unité surfacique en entrée, comme illustré ci-dessous.
- Ajoutez l'outil Calculer une valeur.
- Double-cliquez sur Calculer une valeur pour ouvrir la boîte de dialogue correspondante. Pour le paramètre Expression, entrez %Chaîne d'unité surfacique en entrée%. Cela donne pour instruction à l'outil Calculer une valeur de lire le contenu de la variable Chaîne d'unité surfacique en entrée.
Pour le paramètre de type de données, sélectionnez Unité surfacique, comme illustré ci-dessous.
- Vous pouvez également définir la variable Chaîne d'unité surfacique en entrée comme précondition à l'exécution de l'outil Calculer une valeur. Une précondition signifie que la variable doit contenir une valeur avant l'exécution de l'outil. Les connecteurs de précondition sont affichés sous la forme de lignes pointillées, comme illustré ci-dessous.
- Double-cliquez sur la variable Chaîne d'unité surfacique en entrée et définissez sa valeur sur 1000 mètres carrés.
- Cliquez sur OK.
- Exécutez le modèle dans ModelBuilder. Double-cliquez sur output_value et examinez sa valeur. La valeur est une unité surfacique, comme illustré ci-dessous. Le type de données d'output_value est en fait Toute valeur (et non Unité surfacique). Un type de données de Toute valeur est un type de données générique qui peut être connecté à tout paramètre d'outil.
Cette technique de conversion est également illustrée dans le modèle Sélectionner une couche par surface dans la rubrique Exemple de service de géotraitement : sélection de données.
L'illustration suivante montre un modèle qui utilise l'outil Simplifier des bâtiments avec Unité surfacique en entrée. Comme l'unité surfacique n'est pas un type de données de paramètre en entrée pris en charge par les services de géotraitement, le paramètre en entrée du modèle (Superficie minimale) est une chaîne convertie en unité surfacique grâce à la méthode ci-dessus. Pour connecter la variable output_value au paramètre Superficie minimale de Simplifier des bâtiments, utilisez l'outil Ajouter une connexion de ModelBuilder ().
L'utilisation de cette technique nécessite l'entrée de la chaîne adéquate par l'utilisateur de votre outil. Par exemple, si 1000 mètres carrés (au lieu de 1000 mètrescarrés) est entré dans Calculer une valeur, l'unité surfacique résultante sera vide. L'utilisation de majuscules n'a aucune importance : MètresCARRES et mètresCarrés reviennent au même, par exemple.
Si vous voulez renforcer la vérification d'erreurs lors du processus de conversion d'une chaîne en un type de données, vous pouvez écrire un outil de script de conversion de type de données et ajouter une fonction de vérification d'erreur au script. Le code Python ci-dessous illustre ce principe de base.
import arcpy # Get the string and call SetParameterAsText on the output # in_string = arcpy.GetParameterAsText(0) # Do error checking/conversion here, converting "meters squared" # to "squaremeters" for example # Set the output parameter # arcpy.SetParameterAsText(1, in_string)
Comme illustré ci-dessous, le type de données en entrée de l'outil est Chaîne et le type de données en sortie est votre type de données cible (Unité surfacique, par exemple). Le type de paramètre en sortie est Derived.
Conversion de données en fichier
Pour les espaces de travail basés sur des dossiers (géodatabase fichier, couvertures et fichiers de formes), vous pouvez utiliser une technique qui consiste à indiquer à l'utilisateur de recourir à l'utilitaire de compression ZIP pour créer un fichier .zip à partir d'un espace de travail, puis à entrer le fichier .zip dans votre outil. Dans votre service de géotraitement, vous pouvez utiliser le script de décompression (voir ci-dessous) pour décompresser le fichier dans un espace de travail avant de poursuivre. Il en va de même pour les sorties : vous pouvez créer un fichier .zip d'un espace de travail et l'utiliser en sortie.
Vous trouverez ci-dessous des liens vers les deux scripts Python, zip.py et unzip.py.
- Le script zip.py accepte un espace de travail en entrée (que ce soit une géodatabase fichier, un dossier contenant des couvertures ou encore un dossier contenant des fichiers de formes, à partir du moment où il ne s'agit pas d'une géodatabase personnelle ni d'entreprise) et un nom de fichier en sortie et il crée un fichier ZIP compressé. Vous devez ajouter le suffixe .zip au nom de fichier en sortie, car le script ne l'ajoute pas automatiquement.
Les propriétés de paramètre sont les suivantes :
Paramètres zip.pyEtiqueter
Type de données
Type
Outil Angle
Input workspace
Espace de travail
Obligatoire
Entrée
Fichier en sortie
Fichier
Obligatoire
Sortie
- Le script unzip.py accepte un fichier .zip, un emplacement en sortie (un dossier existant) et un nom en sortie (lequel devient un nouveau dossier) et écrit le contenu dans le nouveau dossier. Si le fichier .zip contient une géodatabase fichier, ajoutez .gdb au nom en sortie.
Etiqueter |
Type de données |
Type |
Outil Angle |
---|---|---|---|
Fichier ZIP en entrée. |
Fichier |
Obligatoire |
Entrée |
Emplacement en sortie |
Espace de travail |
Obligatoire |
Entrée |
Nom en sortie |
Chaîne |
Requis |
Entrée |
Chemin en sortie |
Espace de travail |
Dérivé |
Sortie |
Pour obtenir des exemples d'utilisation de ces utilitaires ZIP, consultez Exemple de service de géotraitement : découper et expédier et Exemple de service de géotraitement : données à la demande.