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
mais c’est la même chose pour ArcMap.
Prenons un modèle quelconque et simple:
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:
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
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
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
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
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
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
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.
Bonjour,
il n’y a pas moyen d’itérer sur des nom de champs, n’est-ce pas?
Non. Pour faire cela il faut le programmer en Python.
ok. Merci. C’est bien ce dont je me doutais
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
Il y a beaucoup de matériel disponibles sur le net.
Vous pouvez démarrer avec les deux didacticiels d’arcgis:
http://help.arcgis.com/fr/arcgisdesktop/10.0/help/index.html#/na/002w0000007t000000/
http://help.arcgis.com/fr/arcgisdesktop/10.0/help/index.html#/na/002w0000007v000000/
Et l’intro sur youtube: