ArcGis Model Builder: étendre un modèle à un ensemble de données en entrée

Il y a toujours deux barrières psychologiques à franchir avec Model Builder:

  • la première pour décider de l’utiliser et passer du mode de travail interactif, naturel à ArcMap, à ce mode de travail où l’on fait tout le cheminement de travail virtuellement, avant de le lancer pour de bon
  • la deuxième, quand on est à l’aise avec l’outil et que l’on arrive à créer des modèles de plus en plus complexes, mais toujours basés sur une couche en entrée produisant une couche en sortie. Et là, on se dit que ce serait bien de pouvoir appliquer le modèle automatiquement à tout un lot de données en entrée, et quelque part on trouve qu’il faut utiliser des « itérateurs ».

Si vous êtes devant la première, gardez cet article dans un coin, il vous servira un jour. Par contre si vous êtes dans la deuxième, on va essayer de passer la barrière ensemble.
On a deux grands types d’itérateurs; ceux qui vont chercher plusieurs couches de données et ceux qui vont chercher plusieurs entités dans une seule couche de données.

Dans cet article on va aborder seulement le premier type d’itérateurs, ceux qui vont chercher plusieurs couches de données en entrée . Dans un article séparé on verra les autres itérateurs.

On va suivre les exemples avec ArcGis Pro
iterateurs dans arcgis pro
mais c’est la même chose pour ArcMap.
iterateurs dans arcmap
Prenons un modèle quelconque et simple:
modèle exemple
On peut le compliquer à l’infini, il n’en reste pas moins que vous aurez une (quelquefois plusieurs) ellipse bleue représentant les données en entrée, et une (ou plusieurs) ellipse verte représentant les données en sortie.

Quand on veut utiliser les itérateurs, on doit se concentrer sur ces deux ellipses et oublier tout le reste du modèle.

Première étape :Pour que le modèle fonctionne sur des lots de données en entrée différentes, il va falloir choisir le type d’itérateur.

Deuxième étape: on va le mettre en place et le configurer pour qu’il fasse exactement ce que l’on souhaite.

Troisième étape: on doit analyser quel type de sortie on souhaite, et là il y a deux possibilités:

  • on veut une seule sortie, un seul fichier qui regroupe les résultats de tous les fichiers en entrée
  • on veut une sortie différente pour chaque fichier en entrée

Ceci étant fait, le problème est pratiquement résolu. Avant de voir les différents itérateurs, le point important à connaître c’est comment lier la première et la dernière étape.

La plupart des itérateurs ont une structure de ce type:
structure générale des itérateurs

L’itérateur produit deux sorties:

  • la première c’est une couche de données qui va rentrer dans le modèle
  • la deuxième c’est une variable « textuelle », contenant le nom de la couche en entrée.

C’est cette variable que nous allons utiliser pour personnaliser la couche en sortie du modèle, en général en ajoutant ce nom dans la couche de sortie. Chaque couche en entrée ayant un nom différent, la couche en sortie correspondante aura aussi un nom différent.

Dernier point à avoir en tête: la plupart des itérateurs ont une portée limitée. Ils vont chercher un type de couche de données dans un espace restreint qui peut être soit un répertoire (workspace), soit une geodatabase (feature dataset). Avant de vous compliquer la tâche avec des couches réparties un peu partout sur vos disques, pensez, si c’est possible, à les rassembler dans un seul répertoire ou geodatabase.

Comment décider du bon itérateur?

Pour répondre à cette question, il suffit en général de se poser le problème en français: par exemple « je veux appliquer mon modèle à tous les images d’un répertoire » ou bien « je veux appliquer le modèle à toutes les couches de polygones de ma géodatabase », etc…

Voyons les cas les plus fréquents et les itérateurs correspondants:

Expression de l’itérateur Itérateur à utiliser
les jeux de données d’une type donné (raster,classe d’entités,mosaïque,…) dans un répertoire ou une geodatabase Iterate Datasets (Jeux de données)
les classes d’entités d’un type donné (polygones, lignes, points…) shapes d’un répertoire ou classes d’entités d’une geodatabase Iterate feature classes (classes d’entités)
les fichiers d’un répertoire Iterate Files (fichiers)
les rasters d’un certain format d’un répertoire ou d’une geodatabase Iterate rasters (rasters)
les tables d’un répertoire ou d’une geodatabase Iterate tables (tables)
les sous-espaces de travail d’un espace de travail (les geodatabases d’un répertoire,…) Iterate Workspaces (espaces de travail)

Iterate Datasets

iterate datasets
Vous définissez le répertoire ou la geodatabase contenant les jeux de données
Vous pouvez utiliser un masque de nom de ( avec *)
Vous définissez le type de jeu de données à traiter en le sélectionnant dans la liste
Vous cochez la case Recursive si vous souhaitez prendre en compte aussi les sous-répertoires présents dans le répertoire

La sortie DATASET doit être reliée au premier outil du modèle.
La sortie Name sera utilisée pour les données en sortie (voir plus loin)

Iterate feature classes

iterate feature classes
Vous définissez le répertoire ou la geodatabase contenant les classes d’entités
Vous pouvez utiliser un masque de nom de ( avec *)
Vous définissez le type de classes d’entités à traiter en la sélectionnant dans la liste
Vous cochez la case Recursive si vous souhaitez prendre en compte aussi les sous-répertoires présents dans le répertoire

La sortie Feature Class doit être reliée au premier outil du modèle.
La sortie Name sera utilisée pour les données en sortie (voir plus loin)

Iterate Files

iterate files
Vous définissez le répertoire contenant les fichiers
Vous pouvez utiliser un masque de nom de ( avec *)
Vous définissez l’extension à prendre en compte (TXT, ASC,…)
Vous cochez la case Recursive si vous souhaitez prendre en compte aussi les sous-répertoires présents dans le répertoire

La sortie FILE doit être reliée au premier outil du modèle.
La sortie Name sera utilisée pour les données en sortie (voir plus loin)

Iterate Rasters

iterate rasters
Vous définissez le répertoire ou la geodatabase contenant les classes d’entités
Vous pouvez utiliser un masque de nom de ( avec *)
Vous définissez le type de raster à traiter en la sélectionnant dans la liste
Vous cochez la case Recursive si vous souhaitez prendre en compte aussi les sous-répertoires présents dans le répertoire

La sortie RASTER doit être reliée au premier outil du modèle.
La sortie Name sera utilisée pour les données en sortie (voir plus loin)

Iterate tables

iterate tables
Vous définissez le répertoire ou la geodatabase contenant les tables
Vous pouvez utiliser un masque de nom de ( avec *)
Vous définissez le type de table à traiter en la sélectionnant dans la liste
Vous cochez la case Recursive si vous souhaitez prendre en compte aussi les sous-répertoires présents dans le répertoire

La sortie TABLE doit être reliée au premier outil du modèle.
La sortie Name sera utilisée pour les données en sortie (voir plus loin)

Iterate Workspaces

iterate workspaces
Vous définissez le répertoire contenant les geodatabases ou des répertoires.
Vous pouvez utiliser un masque de nom de ( avec *)
Vous définissez le type d’espace de travail à traiter en la sélectionnant dans la liste
Vous cochez la case Recursive si vous souhaitez prendre en compte aussi les sous-répertoires présents dans le répertoire

La sortie WORKSPACE doit être reliée au premier outil du modèle.
La sortie Name sera utilisée pour les données en sortie (voir plus loin)

Nom de la couche résultante

En ouvrant le dernier outil d’un modèle, on a toujours le champ « Output », dans lequel vous définissez l’endroit et le nom de la couche résultante. Prenons par exemple:

C:\Users\admin\Documents\ArcGIS\Projects\MyProject10\HYDROGRAPHIE_SURFACIQUE.shp

Pour que, à chaque itération, la couche résultante porte un nom différent (si non chaque sortie consécutive écrase la précédente) il faut ajouter un élément variable dans le nom.

Cet élément sera la sortie NAME de l’itérateur. Pour insérer NAME dans le nom de la couche en sortie, il suffit de mettre NAME entre % à l’endroit souhaité de la chaîne de nom, par exemple :

C:\Users\admin\Documents\ArcGIS\Projects\MyProject10\HYDROGRAPHIE_SURFACIQUE_%NAME%.shp

A chaque itération %NAME% sera substitué par le nom de la couche en entrée.

Si vous avez tenu jusqu’ici, vous méritez de lire le prochain article où nous verrons les autres types d’itérateurs qui agissent sur les entités d’une couche.

Si cet article vous a intéressé et que vous pensez qu'il pourrait bénéficier à d'autres personnes, n'hésitez pas à le partager sur vos réseaux sociaux en utilisant les boutons ci-dessous. Votre partage est apprécié !

5 thoughts on “ArcGis Model Builder: étendre un modèle à un ensemble de données en entrée

  1. bonjour je suis un novice en programmation avec modelbuilder je veux des notion de base pour donner un model d’échange nappe/rivière.merci

Répondre à Atilio Francois Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *