Ajouter un sous-modèle à un modèle

Un modèle de géotraitement est enregistré comme outil de modèle dans une boîte d’outils. Les outils de modèle peuvent être exécutés comme tout autre outil de géotraitement à partir de la fenêtre Geoprocessing (Géotraitement) et utilisés dans d’autres modèles et scripts Python.

Le fait d’ajouter et d’exécuter un outil de modèle dans un autre modèle est souvent appelé un sous-modèle, un modèle imbriqué ou un modèle dans un modèle. L’utilisation d’un modèle dans un autre modèle permet de diviser des grands modèles en modèles réutilisables plus petits et plus faciles à gérer.

Pour ajouter un sous-modèle à un modèle, procédez comme suit :

  1. Créez un modèle qui effectue le traitement que vous souhaitez appeler à partir d’autres modèles (le sous-modèle). Vous exécuterez ce sous-modèle dans un autre modèle ; le sous-modèle doit donc être créé selon les recommandations en vigueur pour un outil de modèle., notamment en ce qui concerne la définition des propriétés et des paramètres de l’outil de modèle.

    Si vous disposez déjà d’une partie de modèle que vous souhaitez intégrer dans un sous-modèle, vous pouvez copier et coller les variables et les traitements du modèle dans un nouveau modèle ou les regrouper et utiliser la commande Save Group as New Model (Enregistrer un groupe comme nouveau modèle).

  2. Veillez à enregistrer le modèle lorsque vous avez terminé la procédure ci-dessus et que vous êtes prêt à ajouter le modèle à un autre modèle.
  3. Mettez à jour ou créez un nouveau modèle principal.
  4. Ajoutez le sous-modèle au modèle principal à l’aide d’une des techniques permettant d’ajouter un outil à un modèle. Vous devez localiser le sous-modèle dans la fenêtre Catalog (Catalogue) et le faire glisser dans le modèle principal, sauf si le sous-modèle se trouve dans une boîte d’outils du projet.

    Les paramètres des données en entrée et en sortie du sous-modèle sont automatiquement transformées en variables dans le modèle principal. Vous pouvez exposer des paramètres supplémentaires du sous-modèle en tant que variables dans le modèle en cliquant avec le bouton droit sur le sous-modèle et en sélectionnant Create Variable (Créer une variable) > From Parameter (À partir du paramètre) > <select a parameter> (<sélectionnez un paramètre>).

Voici les deux raisons principales d’utiliser un modèle dans un autre modèle :

  • Allègement d’un grand modèle complexe en plusieurs modèles plus petits et plus simples à gérer
  • Prise en charge de l’utilisation des itérateurs de modèle sur une surface d’un modèle plus grand

Simplifier un modèle grand complexe

L'incorporation d'un outil de modèle dans un autre modèle permet de diviser des traitement volumineux complexes en unités de modèle plus petites, plus facile à gérer et à réutiliser dans d’autres modèles ou scripts. Il est également possible de modifier et de réexécuter ces sous-modèles sans avoir à mettre à jour un grand modèle potentiellement ingérable ou à recommencer entièrement le traitement. Si une erreur se produit dans un sous-modèle, vous corrigez et réexécutez uniquement à ce modèle.

Grand modèle
Illustration d’un grand modèle décomposable en quatre sous-modèles et un modèle principal chargé d’exécuter les quatre sous-modèles

Le grand modèle ci-dessus peut être décomposé en quatre sous-modèles et un modèle principal. Les sous-modèles de plus petite taille peuvent être ajoutés au modèle principal et rattachés à un traitement final. Lorsqu’un sous-modèle est ajouté à un autre modèle, les paramètres en sortie du sous-modèle sont ajoutés sous forme de variables en sortie.

Ajout de sous-modèles à un modèle principal

Utilisation avancée des itérateurs de modèles

L’incorporation d’un outil de modèle dans un autre modèle permet également d’utiliser de manière plus poussée les itérateurs de modèle. Lorsqu’un processus nécessite l’itération de modèles, les outils ou traitements spécifiques à exécuter plusieurs fois doivent être séparés de ceux à exécuter une seule fois.

Remarque :

On pense souvent à tort que seuls les outils en aval d’un itérateur de modèle s’exécutent plusieurs fois. Dès lors qu’un modèle contient un itérateur, tous les traitements du modèle s’exécutent plusieurs fois.

Tous les outils à exécuter plusieurs fois doivent être placés dans un modèle avec un itérateur de modèle et utilisés comme sous-modèle. Les outils à exécuter une seule fois doivent être placés dans le modèle principal, qui appelle le sous-modèle d'itération.

L’exemple ci-après représente un processus automatisé qui regroupe un ensemble d’entrées provenant d’une géodatabase. L'outil Combiner accepte plusieurs classes d’entités en entrée à combiner, mais il n’existe aucun moyen automatique d’ajouter toutes les classes d’entités à partir d'un espace de travail donné. Dans ce cas, l’itérateur de modèle Iterate Feature Classes (Itérer dans des classes d’entités) peut être utilisé conjointement avec l’outil Collect Values (Recueillir des valeurs) pour lire toutes les classes d’entités d’un espace de travail et les regrouper en une variable à valeurs multiples. Ces deux traitements devant être exécutés plusieurs fois (itérations), ils sont ajoutés à un sous-modèle, alors que l’outil Combiner, qui doit être exécuté une seule fois, est ajouté au modèle principal et rattaché à la sortie du sous-modèle qui contient l’itérateur.

Modèle principal et sous-modèle

Voici une description détaillée de la façon dont le workflow complet a été créé. Pour plus d’informations sur les termes et les techniques décrits ci-après, reportez-vous à la rubrique Terminologie de ModelBuilder

  1. Créez deux modèles : un modèle principal et un sous-modèle, ce dernier étant ajouté au premier. Ajoutez l'outil Combiner au modèle principal et l’itérateur Itérer dans des classes d’entités et l’outil Recueillir des valeurs au sous-modèle.
  2. Dans le sous-modèle, définissez l’espace de travail contenant les classes d’entités à combiner comme entrée de l’itérateur Itérer dans des classes d’entités. Pour limiter l’itération aux classes d’entités ponctuelles, définissez le paramètre Feature Type (Type d’entité) de l’itérateur Iterate Feature Classes (Itérer dans des classes d’entités) sur POINT.
  3. Connectez la variable en sortie Iterate Feature Classes (Itérer dans des classes d’entités), Output Feature Class (Classe d’entités en sortie), à l’outil Recueillir des valeurs de sorte que le chemin de chaque classe d’entités ponctuelles de l’espace de travail fasse l’objet d’une itération et soit collecté.
  4. Faites de la variable d’espace de travail en entrée et de la sortie de l'outil Recueillir des valeurs des paramètres de modèle. Renommez la variable d’espace de travail en entrée Input Datasets (Jeux de données en entrée) en lui attribuant un nom pertinent et facile à comprendre.
    Définition d’un sous-modèle
  5. Enregistrez et fermez le sous-modèle, puis ajoutez-le en tant que traitement au modèle principal. Lorsque le sous-modèle est ajouté au modèle principal, ses paramètres sont automatiquement ajoutés en tant que variables dans le modèle principal.
    Ajout d’un sous-modèle
  6. Connectez la variable en sortie du sous-modèle comme le paramètre Input Datasets (Jeux de données en entrée) de l’outil Combiner. Vérifiez que la sortie de l’outil Combiner possède un chemin valide.