Lorsque vous publiez votre résultat dans la fenêtre Service Editor (Éditeur de services), vous spécifiez l’option Input mode (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 :
- User defined value (Valeur définie par l’utilisateur) : le client fournit une valeur pour le paramètre.
- Choice list (Liste de choix) : le client a accès à une liste de chaînes (la liste de choix) et doit choisir une ou plusieurs chaînes dans cette liste. En fonction du type de données de l'entrée, les chaînes de la liste de choix peuvent être les noms des couches ou de simples options de mots-clés.
- Constant value (Valeur constante) : la tâche utilise la valeur que vous avez indiquée pour le paramètre lorsque vous avez créé le résultat. Etant donné que la valeur est constante, le client ne peut pas la changer. Elle ne devient donc pas un paramètre de tâche lorsque le service est publié.
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 :
- Jeu de données : données stockées sur le disque, telles que les classes d’entités, les tables, les dossiers, les cartes, les bases de données, etc.
- Scalaires : tout ce qui n'est pas jeu de données, par exemple les nombres et les chaînes.
- Table de valeurs : type de données spécial se présentant sous la forme d'une table à plusieurs colonnes.
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.
- Les jeux de données transportables sont les entités, les rasters, les tables et les fichiers. Les paramètres contenant des jeux de données transportables prennent en charge le mode en entrée User defined value (Valeur définie par l’utilisateur).
- Les jeux de données non transportables sont les éléments autres que les entités, rasters, tables et fichiers. Il existe deux catégories de jeux de données non transportables.
- Les jeux de données complexes sont des jeux de données tels que des réseaux géométriques, des jeux de données réseau, des topologies, des TIN, etc. Ces types de données sont appelés jeux de données complexes car ils modélisent des relations complexes entre des entités simples.
- Les jeux de données conteneur 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.
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 User defined value (Valeur définie par l’utilisateur), vous pouvez l’étudier dans la fenêtre Service Editor (Éditeur de services) et voir si le mode en entrée apparaît en tant que choix. Vous pouvez également déterminer si le mode User defined value (Valeur définie par l’utilisateur) est pris en charge avant d’accéder à la fenêtre Service Editor (Éditeur 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 une table décrivant chaque paramètre. La dernière colonne de cette table contient le type de données du paramètre.
- Dans ModelBuilder, cliquez avec le bouton droit sur une variable, cliquez sur Properties (Propriétés), puis cliquez sur l’onglet Data Type (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 Catalog (Catalogue), cliquez avec le bouton droit sur l’outil de script et choisissez Properties (Propriétés). Dans la boîte de dialogue Propriétés, cliquez sur l’onglet Parameters (Paramètres). Le type de données de chaque paramètre est indiqué dans la table des paramètres.
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 Choice list (Liste de choix) comme option de mode en entrée. Ainsi, le paramètre Transportation mode network (Réseau de mode de transport) peut être utilisé dans une tâche pour rechercher le meilleur itinéraire en fonction du mode de transport de l’utilisateur, à savoir voiture, vélo ou marche à pied.
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 User defined value (Valeur définie par l’utilisateur) n’est donc pas disponible pour ce paramètre. Cependant, vous pouvez utiliser le paramètre Choice list (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 d’autres jeux de données complexes, notamment les couches TIN, géostatistiques, d’atelier parcellaire et de jeux de données LAS. 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 d’exemple ci-dessus a été créée par l’exécution d’un modèle et la spécification de la couche Street network (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 Constant value (Valeur constante). Vous devez exécuter l’outil en utilisant une couche en tant qu’entrée afin que l’option Choice list (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 et les ateliers parcellaires, ne sont pas transportables. Les jeux de données conteneur, tels que les dossiers, les géodatabases et les cartes 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 la fenêtre Service Editor (Éditeur 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 Choice list (Liste de choix) n’est pas disponible, même si vous possédez des couches du type approprié dans la table des matières.
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 paramètre Input mode (Mode en entrée) est défini sur Constant value (Valeur constante). Si vous effectuez la publication avec le mode en entrée défini sur Constant value (Valeur constante), le jeu de données est copié sur le serveur (sauf s’il se trouve dans le Data Store 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 la fenêtre Service Editor (Éditeur de services) prend alors en charge le mode en entrée Choice list (Liste de choix).
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 cartes (.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 Data Store 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 paramètre Input mode (Mode en entrée) est défini sur Constant value (Valeur constante). Si vous effectuez la publication avec le mode en entrée défini sur Constant value (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 Data Store du serveur) et votre tâche utilise le dossier copié.
Cartes (.mxd)
Si l’entrée de votre tâche est une carte, le paramètre Input mode (Mode en entrée) est défini sur Constant value (Valeur constante). Si vous effectuez la publication avec le mode en entrée défini sur Constant value (Valeur constante), la carte, 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 la carte se trouve dans le Data Store du serveur. Si certains des jeux de données référencés sont introuvables dans le Data Store du serveur, ils sont également copiés sur le serveur. En fait, la carte est empaquetée, envoyée vers le serveur, puis décompressée sur le serveur.
Géodatabases
Si l’entrée de votre tâche est une géodatabase, le paramètre Input mode (Mode en entrée) est défini sur Constant value (Valeur constante). Si vous effectuez la publication avec le mode en entrée défini sur Constant value (Valeur constante), la géodatabase et son contenu sont copiés sur le serveur (sauf si elle se trouve dans le Data Store 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 plateformes serveur (systèmes d’exploitation 64 bits) 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 la fenêtre Service Editor (Éditeur de services), l’option Data type (Type de données) du paramètre en sortie est définie sur String (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 même.
Plusieurs possibilités s'offrent à vous pour la gestion des sorties non transportables.
- Utilisez un service de carte généré 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écompresser 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 :
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 en chaîne de types de données scalaires non pris en charge 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 Search radius (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 Search Radius Settings (Paramètres du rayon de recherche), comme illustré ci-dessous.
- 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 cette table contient le nom du paramètre et, pour les cas complexes, la représentation sous forme de chaîne. La dernière colonne de la table 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 Search radius (Rayon de recherche) référencé ci-dessus.
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.
- 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 Results (Résultats), puis choisissez Copy as Python Snippet (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 : 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.
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 Owner name (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.
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 Selection type (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.
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 Input Features (Entités en entrée) est une table de valeurs comportant deux colonnes : Features (Entités) et Rank (Classement).
Les tables de valeurs ne sont pas transportables. Leur paramètre Input mode (Mode en entrée) est donc défini sur Constant value (Valeur constante) dans la fenêtre Service Editor (Éditeur de services).
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 Streets (Rues) et Parks (Parcs) sont automatiquement créées par ModelBuilder lorsque vous les entrez dans la table de valeurs. Les variables Streets Rank (Classement des rues) et Parks Rank (Classement des parcs) sont créées de la façon suivante :
- Créez deux variables autonomes de type Long. Renommez-les et définissez-les en tant que paramètres du modèle.
- Ouvrez l’outil Intersecter et cliquez dans une cellule de la colonne Ranks (Classements), comme illustré ci-dessous. Vous avez le choix entre les deux variables de type Long que vous avez créées.
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 de plusieurs champs du paramètre Dissolve Field(s) (Champ(s) de fusion). Pendant l’agrégation, vous pouvez calculer des statistiques sur les entités agrégées avec le paramètre Statistics Field(s) (Champ(s) statistique(s)), une table de valeurs.
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 Dissolve Field(s) (Champ(s) de fusion) et Statistics Fields(s) (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 réalité, vous évitez l’intelligence intégrée aux boîtes de dialogue de l’outil et à la fenêtre Service Editor (Éditeur 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 Dissolve Field(s) (Champ(s) de fusion) et Statistics Fields(s) (Champ(s) statistique(s)). Dans l’illustration ci-dessus, Dissolve Field(s) (Champ(s) de fusion) = DISTRICT et Statistics Fields(s) (Champ(s) statistique(s)) = POP98 SUM;NAME FIRST. (Reportez-vous ci-dessus pour savoir comment déterminer la représentation sous forme de chaîne d’un type de données.) Dans la fenêtre Service Editor (Éditeur de services), vous pouvez définir les deux paramètres sur User defined value (Valeur définie par l’utilisateur) car il s’agit de chaînes.