Modes en entrée et types de données des paramètres

Lorsque vous publiez votre résultat dans l'Editeur de services, vous spécifiez le Mode en entrée de chaque paramètre de tâche. Le mode que vous choisissez détermine la façon dont les clients fourniront les valeurs des paramètres de tâche. L'objectif de cette rubrique est de vous aider à comprendre pourquoi certaines options de mode en entrée ne sont pas disponibles pour un paramètre et de vous suggérer des méthodes pour créer des tâches qui fonctionnent avec les options disponibles.

Il existe trois options de mode en entrée :

Les choix de mode en entrée que vous possédez pour un paramètre donné dépendent du type de données de paramètre de l'outil. Il existe trois catégories de types de données :

Les trois sections suivantes abordent chacune leur tour ces trois catégories.

Jeux de données

Un service SIG doit fonctionner avec le plus simple de tous les clients : un navigateur Web exécuté sur un ordinateur ne disposant pas de fonctionnalités SIG. Ce type de client simple peut uniquement transporter (envoyer et recevoir) des paquets de données simples, telles que du texte, des nombres, des fichiers et des entités géographiques et leurs attributs, depuis et vers un serveur. Dans le contexte des tâches de géotraitement, les jeux de données SIG peuvent être répartis dans deux catégories distinctes : les transportables et les non transportables.

Détermination du type de données d'un paramètre d'outil

Pour déterminer si un paramètre de tâche prend en charge le mode en entrée Valeur définie par l'utilisateur, vous pouvez l'étudier dans l'Editeur de services et voir si le mode en entrée apparaît en tant que choix. Vous pouvez également déterminer si le mode Valeur définie par l'utilisateur est pris en charge avant d'accéder à l'Editeur de services en déterminant le type de données du paramètre d'outil à l'aide de l'une des méthodes ci-dessous :

  • Dans la page de référence d'un outil, la section de syntaxe comporte un tableau décrivant chaque paramètre. La dernière colonne de ce tableau contient le type de données du paramètre.
  • Dans ModelBuilder, cliquez avec le bouton droit sur une variable, cliquez sur Propriétés, puis cliquez sur l'onglet Type de données. Le type de données s'affiche en haut de la boîte de dialogue.
  • Pour un outil de script, dans la fenêtre Catalogue, cliquez avec le bouton droit sur l'outil de script et choisissez Propriétés. Dans la boîte de dialogue Propriétés, cliquez sur l'onglet Paramètres. Le type de données de chaque paramètre est indiqué dans la table des paramètres.
Les types de données suivants sont transportables et prennent en charge le mode en entrée Valeur définie par l'utilisateur : Classe d'entités, Couche d'entités, Jeu d'entités, Couche raster, Jeu de données raster, Table, Vue tabulaire, Jeu d'enregistrements et Fichier.

Listes de choix et jeux de données non transportables

Si une valeur de paramètre en entrée est une couche qui référence un jeu de données non transportable, vous pouvez choisir Liste de choix comme option de mode en entrée. Ainsi, l'illustration ci-dessous présente le paramètre Réseau de mode de transport d'une tâche qui recherche le meilleur itinéraire en fonction du mode de transport de l'utilisateur, à savoir voiture, vélo ou marche à pied.

Liste de choix des couches de jeu de données réseau

Le type de données de ce paramètre est Couche du jeu de données réseau. Les jeux de données réseau sont des jeux de données complexes qui ne peuvent pas être transportés sur le Web. Le mode Valeur définie par l'utilisateur n'est donc pas disponible pour ce paramètre. Cependant, vous pouvez utiliser une Liste de choix pour spécifier une liste de choix de noms de couches à utiliser. Le client choisit l'un des noms de couches dans la liste et votre tâche utilise la couche choisie par le client, en accédant au jeu de données réseau référencé par la couche et stockée sur le serveur.

Les jeux de données les plus complexes possèdent une représentation de couche correspondante. L'exemple ci-dessus illustrait les couches de jeu de données réseau. Il existe également des couches TIN, géostatistiques, d'atelier parcellaire, de jeux de données LAS, etc. Chaque fois que vous avez un jeu de données non transportable, vous pouvez utiliser sa représentation de couche en tant que valeur en entrée. La tâche exemple ci-dessus a été créée par l'exécution d'un modèle et la spécification de la couche Réseau de transport en tant qu'entrée. Si le modèle a été exécuté suite à la spécification du chemin d'accès à un jeu de données réseau sur disque au lieu d'un nom de couche, le mode en entrée est défini sur Valeur constante. Vous devez exécuter l'outil en utilisant une couche en tant qu'entrée afin que l'option Liste de choix apparaisse.

En résumé :

  • Les clients peuvent envoyer et recevoir (transporter) des entités, rasters, tables et fichiers simples sur Internet.
  • Les jeux de données complexes, tels que les jeux de données réseau, les TIN, les ateliers parcellaires, etc, ne sont pas transportables. Les jeux de données conteneur, tels que les dossiers, les géodatabases, les documents ArcMap, etc, ne sont pas transportables non plus. Cela signifie qu'il est impossible pour les clients de créer des jeux de données complexes ou conteneur et de les transporter sur Internet. Cela s'applique également aux clients aux fonctionnalités complètes, tels que ArcMap.
  • Les bases de données les plus complexes possèdent une représentation de couche. Cela signifie que vous pouvez ajouter le jeu de données à ArcMap et qu'une couche est créée dans la table des matières.
    • Vous pouvez créer une liste de choix de noms de couches. Le client choisit alors un ou plusieurs de ces noms de couches en tant qu'entrée pour votre tâche. Cette tâche utilise donc le jeu de données référencé par la couche.
    • Pour créer une liste de choix de noms de couches, vous devez exécuter votre outil en utilisant une couche en tant qu'entrée. Dans l'Editeur de services, la liste de choix est renseignée à partir des couches sélectionnables de la table des matières.
    • Si vous exécutez votre outil en utilisant le chemin d'accès à un jeu de données sur le disque, l'option Liste de choix n'est pas disponible, même si vous possédez des couches du type correct dans la table des matières.
RemarqueRemarque :

Lorsque vous publiez une liste de choix de noms de couches, les données référencées par les couches deviennent des données de projet et sont copiées sur le serveur SIG sauf si elles se trouvent dans le magasin de données du serveur.

Valeur constante et jeux de données complexes

Si une entrée de votre tâche est un chemin d'accès à un jeu de données complexe (par exemple, D:\mydata\chicago.gdb\transportation\streetnetwork, un jeu de données réseau), le Mode en entrée est défini sur Valeur constante. Si vous effectuez la publication avec le mode en entrée défini sur Valeur constante, le jeu de données est copié sur le serveur (sauf s'il se trouve dans le magasin de données du serveur) et votre tâche utilise le jeu de données copié.

Si vous pouvez ajouter le jeu de données à ArcMap pour créer une couche, vous pouvez réexécuter votre outil en utilisant la couche en tant qu'entrée. Vous créez ainsi un nouveau résultat que vous pouvez partager, et l'Editeur de services prend alors en charge le mode en entrée Liste de choix.

RemarqueRemarque :

Il n'est pas possible de créer des couches pour les réseaux géométriques. Les paramètres contenant des réseaux géométriques ont toujours le mode en entrée défini sur Valeur constante.

Valeur constante et jeux de données conteneur

Les conteneurs sont des éléments tels que des dossiers, des géodatabases fichier et personnelles, et des documents ArcMap (.mxd). Ces types de données contiennent un ensemble d'autres jeux de données, d'où leur nom de conteneurs. Les conteneurs ne sont pas transportables. En règle générale, un conteneur et tout son contenu sont copiés sur le serveur (sauf si le conteneur se trouve dans le magasin de données du serveur) et votre tâche publiée utilise le conteneur copié. Certains conteneurs courants sont abordés ci-dessous.

Dossiers

Si l'entrée de votre tâche est un dossier, le Mode en entrée est défini sur Valeur constante. Si vous effectuez la publication avec le mode en entrée défini sur Valeur constante, le dossier et son contenu (voir la remarque ci-dessous) sont copiés sur le serveur (sauf s'il se trouve dans le magasin de données du serveur) et votre tâche utilise le dossier copié.

RemarqueRemarque :

Lorsque des dossiers sont copiés sur le serveur dans le cadre du processus de publication, seuls les fichiers et les jeux de données géographiques sont copiés, pas les sous-dossiers. Certains jeux de données géographiques, tels que les géodatabases fichier, les rasters et les TIN, sont techniquement des dossiers, mais ils sont copiés sur le serveur s'ils se trouvent dans le dossier à copier.

Documents ArcMap (.mxd)

Si l'entrée de votre tâche est un document ArcMap, le Mode en entrée est défini sur Valeur constante. Si vous effectuez la publication avec le mode en entrée défini sur Valeur constante, le document ArcMap, toutes ses couches et tous les jeux de données référencés par ces couches, sont copiés sur le serveur, sauf si le document ArcMap se trouve dans le magasin de données du serveur. Si les jeux de données référencés sont introuvables dans le magasin de données du serveur, ils sont également copiés sur le serveur. En fait, le document ArcMap est empaqueté, envoyé vers le serveur, puis décompressé sur le serveur.

Géodatabases

Si l'entrée de votre tâche est une géodatabase, le Mode en entrée est défini sur Valeur constante. Si vous effectuez la publication avec le mode en entrée défini sur Valeur constante, la géodatabase et son contenu sont copiés sur le serveur (sauf si elle se trouve dans le magasin de données du serveur) et votre tâche utilise la géodatabase copiée.

Les géodatabases personnelles (.mdb) ne sont pas prises en charge sur les plates-formes serveur (Windows 64 bits et Linux) et sont converties en géodatabases fichier lorsqu'elles sont copiées sur le serveur. Les géodatabases d'entreprise sont également converties en géodatabases fichier lorsqu'elles sont copiées sur le serveur.

Sortie non transportable

Si la sortie de votre outil est un jeu de données complexe ou conteneur, elle ne peut pas être renvoyée au client. Dans l'Editeur de services, le paramètre en sortie présente le Type de données Chaîne. Dans l'illustration ci-dessous, la valeur retournée par la tâche est le nom du jeu de données TIN créé, pas le jeu de données lui-même.

La sortie non transportable est convertie en chaîne

Plusieurs possibilités s'offrent à vous pour la gestion des sorties non transportables.

  • Utilisez un service de carte obtenu pour envoyer le résultat sous forme de carte au client. Aucun jeu de données n'est envoyé au client, uniquement une carte présentant les données.
  • Convertissez le jeu de données en jeu de données transportable. Vous pouvez ainsi utiliser l'outil TIN vers raster pour convertir un TIN (non transportable) en jeu de données raster (transportable).
  • Créez un paquetage de couche (.lpk) du jeu de données à l'aide de l'un des outils du jeu d'outils Couches et vues tabulaires, puis utilisez l'outil Empaqueter une couche pour créer le paquetage de couche. Un paquetage de couche est un fichier et les fichiers sont transportables sur Internet. Le client doit simplement décompresser le paquetage.
  • Utilisez l'utilitaire ZIP pour créer un fichier avec le jeu de données ou dossier obtenu et envoyez ce fichier .zip au client. Le client doit ensuite dézipper ce fichier. L'exemple de service de découpage et d'expédition découpe des couches d'une zone d'étude en une géodatabase fichier (et d'autres formats), puis crée un fichier .zip à envoyer au client. Si vous voulez utiliser cette technique, reportez-vous aux liens ci-dessous :
    • Zip.py prend un dossier en entrée et un nom de fichier en sortie et crée un fichier .zip compressé.
    • Unzip.py prend un fichier .zip en entrée et un dossier en sortie et écrit le contenu dans le dossier.

Scalaires

Un type de données scalaire contient tout ce qui n'est pas un jeu de données. Les types de données scalaires sont parfois appelés types de données simples. Dans le cadre du géotraitement, il existe de nombreux types de données scalaires, tels que Champ (un champ dans une table), Expression SQL, Expression de la calculatrice, Appariement de champs, fonction de recherche approximative, etc. Certains sont rarement utilisés. D'autres, tels que Champ et Expression SQL, sont plus courants.

Les types de données scalaires suivants sont entièrement pris en charge par tous les clients et peuvent être envoyés et reçus par Internet sans conversion : Booléen, Date, Double, Unité linéaire, Long et Chaîne. Tous les autres types de données scalaires sont convertis en chaîne et sont indiqués comme étant non pris en charge ou non transportables.

La conversion de types de données scalaires non pris en charge en chaîne pose rarement problème car chaque type de données possède une représentation sous forme de chaîne bien définie. Il vous suffit juste de la connaître pour pouvoir la documenter pour le client. Dans certains cas, vous pouvez décider de modifier votre outil afin qu'il effectue la représentation sous forme de chaîne à l'aide d'autres informations fournies par le client. Ces deux techniques sont abordées ci-dessous. Un type de données spécial, Table de valeurs, est traité dans sa propre section ci-dessous.

Détermination de la représentation sous forme de chaîne d'un paramètre

La plupart des représentations de chaîne sont évidentes. Ainsi, la représentation sous forme de chaîne d'un type de données Champ correspond au nom de ce champ. Cependant, il est parfois nécessaire de faire une recherche plus approfondie pour trouver la représentation de chaîne.

L'exemple suivant présente le paramètre Rayon de recherche de l'outil IDW (Pondération par l'inverse de la distance) utilisé pour interpoler des surfaces à partir de points. Ce paramètre se compose de trois parties : la méthode (qui est variable ou fixe) et deux valeurs pour les Paramètres du rayon de recherche, comme illustré ci-dessous.

Exemple de type de données scalaire plus compliqué

  1. Pour trouver la représentation sous forme de chaîne de ce paramètre, consultez tout d'abord la section de syntaxe de paramètre de la page de référence de l'outil. La première colonne de ce tableau contient le nom du paramètre et, pour les cas complexes, la représentation sous forme de chaîne. La dernière colonne du tableau contient le type de données du paramètre. L'illustration ci-dessous présente le contenu de la première colonne du paramètre Rayon de recherche référencé ci-dessus.

    Représentation sous forme de chaîne du paramètre Rayon de recherche

    Vous pouvez également consulter l'exemple de code Python en bas de la page de référence de l'outil, car ce type d'exemple utilise souvent la représentation sous forme de chaîne des paramètres.

  2. Pour afficher la représentation sous forme de chaîne d'un paramètre, exécutez l'outil, cliquez avec le bouton droit sur le résultat dans la fenêtre Résultats, puis choisissez Copier comme extrait Python. Collez l'extrait de code dans un éditeur de texte et étudiez-le. Voici l'extrait de code (les paramètres initiaux ont été retirés pour des raisons de concision) pour une exécution de l'outil IDW : arcpy.gp.Idw_sa(...,"2","VARIABLE 12 250","#"). En parcourant la ligne, vous voyez que la représentation sous forme de chaîne du rayon de recherche (correspondant à l'illustration ci-dessus) est "VARIABLE 12 250". Vous pouvez exécuter plusieurs fois l'outil, en changeant les valeurs des paramètres et en copiant l'extrait de code Python pour étudier la représentation sous forme de chaîne des paramètres.

Une fois que vous avez déterminé la représentation sous forme de chaîne, vous devez l'indiquer à vos clients. Vous utilisez pour cela la documentation de votre tâche.

Pour en savoir plus sur la documentation des services et des tâches

Composition de la représentation sous forme de chaîne au sein de votre outil

Pour les représentations de chaîne complexes ou dont la construction demande trop de travail au client, vous pouvez modifier votre outil de façon à construire la chaîne pour le client. Un bon exemple de ceci est le type de données Expression SQL. Dans le modèle illustré ci-dessous, le type de données du paramètre Expression est Expression SQL, et, pour que ce modèle s'exécute en tant que tâche, le client doit fournir une chaîne d'expression SQL valide.

Exemple de modèle utilisant le type de données Expression SQL

Si l'objectif de la tâche est de sélectionner une parcelle en fonction du nom de son propriétaire, vous pouvez créer un modèle où le client entre le nom du propriétaire. Une instruction SQL valide est alors créée. Cela s'effectue facilement, à l'aide d'une substitution de variable, comme illustré ci-dessous. La variable Nom du propriétaire est un type de données de chaîne. Le client entre le nom du propriétaire de la parcelle et une expression SQL valide est créée dans le modèle. D'autres exemples d'utilisation de substitution de variable sont présentés dans la rubrique Exemples de substitution de variables de modèle en ligne.

Utilisation de la substitution de variable pour créer une expression SQL valide pour le client

Création de vos propres listes de choix

De nombreux outils de géotraitement définissent des listes de choix, également appelées filtres de listes de valeurs, pour leurs paramètres de chaîne. L'outil Sélectionner une couche par attributs présenté ci-dessus possède une liste de choix de chaînes pour le paramètre Type de sélection (NEW_SELECTION, ADD_TO_SELECTION, REMOVE_FROM_SELECTION, etc). Vous pouvez créer vos propres listes de choix pour les variables de chaîne, à l'aide de filtres de listes de valeurs.

Pour en savoir plus sur les filtres de listes de valeurs

Tables de valeurs

Une table de valeurs est une table à plusieurs colonnes utilisée pour les outils Intersecter et Combiner, entre autres. L'illustration ci-dessous présente l'outil Intersecter. Son paramètre Entités en entrée est une table de valeurs comportant deux colonnes : Entités et Classement.

Les tables de valeurs ne sont pas transportables. Leur Mode en entrée est donc défini sur Valeur constante dans l'Editeur de services.

Les paramètres des tables de valeurs sont toujours définis sur une chaîne de constante

Si vous voulez que le client puisse entrer des valeurs au lieu d'utiliser la valeur constante, vous devez modifier votre modèle ou script afin qu'il utilise d'autres types de données en plus des tables de valeurs.

Les tables de valeurs peuvent avoir un nombre de lignes indéterminé. Vous pouvez modifier votre outil en fonction du choix que vous accordez au client de déterminer un nombre de lignes fixe ou variable. Si une colonne de la table de valeurs contient des jeux de données, le nombre de lignes doit être fixe, car chaque ligne a besoin de son propre paramètre pour contenir le jeu de données.

L'illustration ci-dessous présente une technique que vous pouvez utiliser dans ModelBuilder pour intersecter deux classes d'entités, avec des classements, sans exposer une table de valeurs. Les variables Rues et Parcs sont automatiquement créées par ModelBuilder lorsque vous les entrez dans la table de valeurs. Les variables Classement des rues et Classement des parcs sont créées de la façon suivante :

  1. Créez deux variables autonomes de type Long. Renommez-les et définissez-les en tant que paramètres du modèle.
  2. Ouvrez l'outil Intersecter et cliquez dans une cellule de la colonne Classements, comme illustré ci-dessous. Vous avez le choix entre les deux variables de type Long que vous avez créées.

Déconstruction d'une table de valeurs dans ModelBuilder

Vous pouvez toujours créer un outil de script qui accepte les entrées individuelles, construit le paramètre Table de valeurs dans le script et appelle l'outil. Le code ci-dessous effectue une intersection de deux classes d'entités sans utiliser de paramètre Table de valeurs.

# Script tool to intersect two feature classes.
#  
import arcpy

inFeatures1 = arcpy.GetParameterAsText(0)  # data type = Feature layer
inRank1 = arcpy.GetParameterAsText(1)      # data type = Long integer
inFeatures2 = arcpy.GetParameterAsText(2)  # data type = Feature layer
inRank2 = arcpy.GetParameterAsText(3)      # data type = Long integer
outFeatures = arcpy.GetParameterAsText(4)  # data type = Feature class

# Default values
#
joinAttributes = "ALL"
xyTolerance = "#"
outputType = "INPUT"

# Construct the value table parameter, a list of lists
#
valueTable = [ [inFeatures1, inRank1], [inFeatures2, inRank2] ]

arcpy.Intersect_analysis(valueTable, outFeatures, joinAttributes, 
                         xyTolerance, outputType)

L'exemple ci-dessous utilise l'outil Fusionner pour illustrer l'utilisation des représentations de chaîne des paramètres et un nombre variable de lignes dans une table de valeurs. L'outil Fusionner accepte une classe d'entités ou une couche de lignes ou polygones, et agrège les entités en fonction des valeurs d'un ou plusieurs champs du paramètre Champ(s) de fusion. Pendant l'agrégation, vous pouvez calculer des statistiques sur les entités agrégées avec le paramètre Champ(s) statistique(s), une table de valeurs.

L'outil Fusionner et deux de ses paramètres

Tant que le client spécifie des champs de fusion et de statistiques figurant dans ses entités en entrée, la tâche est exécutée. Pour pouvoir faire ceci, vous devez créer un outil de script qui accepte la représentation sous forme de chaîne des paramètres Champ(s) de fusion et Champ(s) statistique(s) plutôt que de présenter une liste de choix des champs trouvés dans votre structure d'entités en entrée. En effet, vous évitez l'intelligence intégrée aux boîtes de dialogue de l'outil et à l'Editeur de services, et vous exécutez l'outil en utilisant uniquement la représentation sous forme de chaîne des paramètres.

# Script tool code to do a Dissolve using strings for the Dissolve Fields(s) and
#  Statistics Fields(s) parameters
#
import arcpy

inFeatures = arcpy.GetParameterAsText(0)      # data type = Feature layer
outFeatures = arcpy.GetParameterAsText(1)     # data type = Feature class
dissolveFields = arcpy.GetParameterAsText(2)  # data type = String
statFields = arcpy.GetParameterAsText(3)      # data type = String
multi_part = False     # Always produce single-part features
unsplit_lines = True   # Only dissolve lines if the share common vertex

arcpy.Dissolve_management(inFeatures, outFeatures, dissolveFields, statFields, 
                          multi_part, unsplit_lines)

Lorsque cet outil de script est exécuté, vous fournissez la représentation sous forme de chaîne des paramètres Champ(s) de fusion et Champ(s) statistique(s). Dans l'illustration ci-dessus, Champ(s) de fusion = DISTRICT et Champ(s) statistique(s) = POP98 SUM;NAME FIRST. (Reportez-vous ci-dessus pour en savoir plus sur la détermination de la représentation sous forme de chaîne d'un type de données.) Dans l'Editeur de services, vous pouvez définir les deux paramètres sur Valeur définie par l'utilisateur car il s'agit de chaînes.

Thèmes connexes

5/10/2014