Exécution d'outils personnalisés (de modèle ou de script) en arrière-plan

L'exécution d'un outil en arrière-plan vous permet de continuer à interagir avec l'application (ArcMap, par exemple) et d'effectuer d'autres tâches pendant l'exécution de l'outil.

Les outils de modèle ou de script sont exécutés par défaut au premier plan. Si vous souhaitez que votre outil soit exécuté en arrière-plan, vous devez résoudre les problèmes décrits ci-dessous. Après vous être assuré d'avoir résolu tous les problèmes de vos modèles et de vos scripts, vous pouvez exécuter en arrière-plan votre outil en suivant la procédure suivante :

  1. Dans la fenêtre Catalogue ou ArcToolbox, cliquez avec le bouton droit sur votre outil et cliquez sur Propriétés. Sous l'onglet Général, décochez Toujours exécuter au premier plan et cliquez sur OK.
  2. Dans le menu ArcMap, cliquez sur Géotraitement > Options de géotraitement. Dans le volet Traitement en arrière-plan, cochez Activer.

Les problèmes à résoudre sont les suivants :

  1. Utilisation de couches de carte – Les outils de modèle et les outils de script sont concernés par ce problème.
  2. Utilisation de la carte en cours dans des outils de script - Seuls les outils de script sont concernés par ce problème.

Problème 1 – Utilisation de couches de carte

Exemple de modèle

Lorsqu'un outil de modèle est exécuté en arrière-plan, seules les couches qui interviennent en tant que paramètres de modèle sont disponibles dans le processus d'arrière-plan. Par exemple, le modèle suivant permet à l'utilisateur d'entrer une zone d'intérêt, une isoligne de base et un intervalle des isolignes pour produire une classe d'entités isolignes. Ce modèle possède quatre paramètres (3 en entrée et 1 en sortie). Notez que la variable Raster d'altitude est une couche dans la table des matières d'ArcMap, mais qu'elle n'est pas définie en tant que paramètre de modèle. Lorsque ce modèle est exécuté à partir de la boîte de dialogue de l'outil, l'utilisateur entre la couche Site de décharge potentiel pour le paramètre Zone d'intérêt, mais il n'a pas à fournir la couche Raster d'altitude car il ne s'agit pas d'un paramètre.

Utilisation de couches dans un modèle

Le modèle ci-dessus s'exécutera comme il se doit au premier plan. Si toutefois ce modèle est configuré pour être exécuté en arrière-plan, ce sera un échec et le message d'avertissement "Aucun des processus n'est prêt à être exécuté" s'affichera, comme illustré ci-dessous. La raison de cet échec en est que les processus qui s'exécutent en arrière-plan ne peuvent pas utiliser de couches qui ne sont pas des paramètres d'outil. Comme, dans cet exemple, la variable de modèle Raster d'altitude n'est pas un paramètre, le processus d'arrière-plan ne parvient pas à la trouver, échoue et affiche un message d'avertissement.

Message d'avertissement pour un modèle utilisant une couche en arrière-plan

Solutions

Vous pouvez modifier de différentes façons le modèle pour qu'il s'exécute en arrière-plan.

  • Convertissez la variable de couche en paramètre de modèle. La couche sera ainsi transmise au processus d'arrière-plan et l'outil pourra s'exécuter en arrière-plan. Cette solution est la plus simple.
  • Au lieu d'utiliser une couche, vous pouvez utiliser un jeu de données sur le disque. Dans l'exemple ci-dessus, double-cliquez sur l'outil Extraction par masque et modifiez le paramètre Raster en entrée (représenté par la variable Raster d'élévation) pour utiliser un jeu de données raster plutôt qu'une couche à partir de la table des matières. Cette solution pose toutefois un problème : les couches peuvent posséder des sélections, mais les jeux de données sur le disque n'en possèdent pas. Si vous utilisez une variable de couche parce que vous devez utiliser des sélections de couches, vous ne pouvez pas utiliser de jeu de données sur le disque. Dans ce cas, deux possibilités s'offrent à vous (autres que convertir la variable en paramètre de modèle) :
    • Dans le modèle, ajoutez l'outil Générer une couche pour créer une variable de couche à partir d'une variable de jeu de données et utiliser la variable de couche en tant qu'entrée dans le processus de modèle suivant. (L'outil Générer une couche vous permet d'entrer une expression de sélection.)
    • Créez un fichier de couches (.lyr) et utilisez le fichier .lyr dans le modèle. Autrement dit, dans le modèle ci-dessus, la variable Raster d'élévation pointerait sur un fichier .lyr. Vous pouvez créer un fichier .lyr à l'aide de l'outil Enregistrer dans un fichier de couche.
RemarqueRemarque :

des paramètres de modèle sont non seulement définis pour les couches en entrée, mais toutes les autres couches créées ou mises à jour par le modèle doivent également être définies en tant que paramètres de modèle.

Exemple d'outil de script

L'utilisation de couches en tant qu'entrées pose problème avec les outils de script et les outils de modèle. Chaque couche doit être transmise en tant que paramètre et son type de données de géotraitement doit être approprié. Les outils de script permettent une certaine marge de manœuvre. Par exemple, ils peuvent contourner les couches en utilisant un type de données de chaîne qui correspond à un nom de couche dans la table des matières. Même si cette méthode fonctionne au premier plan, elle ne fonctionne pas en arrière-plan, car il n'existe aucune connexion entre la référence aux couches de cartes et le processus d'arrière-plan. L'illustration suivante montre la transmission d'une couche de paramètre en tant que chaîne et la modification des propriétés de script de manière à pouvoir utiliser une couche en tant qu'entrée. Modifier le type de données d'un paramètre d'outil de script

Solutions

Vérifiez que vos paramètres d'outil de script utilisent des types de données appropriés (Couche d'entités, Couche raster et Vue tabulaire, par exemple).

Si votre outil de script utilise une couche qui n'est pas un paramètre, vous allez alors devoir :

  • convertir la couche en paramètre,
  • utiliser le jeu de données sur le disque ou un fichier .lyr sur le disque au lieu d'utiliser une couche.

Problème 2 – Utilisation de la carte en cours dans des outils de script

Les outils de script qui s'appliquent à la carte en cours doivent être exécutés au premier plan. La classe arcpy.MapDocument constitue un moyen très efficace de tirer parti de votre carte en cours en utilisant des outils de script. Par exemple, vous pouvez avoir un script qui effectue automatiquement un zoom sur les entités que vous venez de sélectionner. L'exécution du script suivant génèrera le message d'erreur "Object : CreateObject ne peut pas ouvrir carte".

Exemple de script qui permet de sélectionner des entités et de zoomer sur eux à l'aide du script ArcPy Mapping :

idvalue = arcpy.GetParameterAsText(0)
SelectLayerByAttribute_management("Parcels","NEW_SELECTION","ID' = " + idvalue)
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]
df.zoomToSelectedFeatures()
Pour en savoir plus sur l'utilisation de CURRENT dans la classe MapDocument ArcPy.

Solution

Les outils de script qui utilisent la carte en cours doivent toujours être exécutés au premier plan. Dans la fenêtre Catalogue, cliquez avec le bouton droit sur votre outil de script et cliquez sur Propriétés. Sous l'onglet Général, cochez Toujours exécuter au premier plan.

Imbrication d'outils

Supposez que vous ayez un outil de script qui utilise la carte en cours décrite ci-dessus et que cet outil doive toujours être exécuté au premier plan. Que se passe-t-il si vous utilisez cet outil de script dans un outil de modèle et que cet outil de modèle s'exécute en arrière-plan ? Les modèles reconnaissent en fait les outils du modèle qui doivent être exécutés au premier plan. Si tous les outils doivent être exécutés au premier plan, le modèle s'exécutera automatiquement au premier plan.

9/12/2013