Dans l’article précédent (ArcGis Model Builder: étendre un modèle à un ensemble de données en entrée) nous avons abordé les itérateurs les plus courants utilisés avec Model Builder. Ces itérateurs permettent d’appliquer un modèle de traitement à un ensemble de couches en entrée.
Mais il existe deux autres types d’itérateurs disponibles:
- les itérateurs FOR et WHILE (POUR et TANT QUE)
- les itérateurs qui parcourent des entités d’une seule couche
Dans cet article nous allons voir les itérateurs FOR et WHILE
Itérateur FOR
Vous allez utiliser cet itérateur si vous voulez exécuter le traitement pour une série de valeurs. Par exemple, vous voulez calculer un buffer d’une certaine distance et exécuter un traitement. Au lieu de tester plusieurs valeurs individuellement, vous pouvez décider de faire des buffers de 500 à 5000 mètres avec un pas de 500m. Le modèle s’exécutera 10 fois, la première fois avec une valeur de 500m pour le buffer, la deuxième avec une valeur de 1000m, et ainsi de suite.
Si on reprend la définition du Centre de Ressources ArcGis, l’itérateur FOR:
« Exécute une itération sur une valeur de début et une valeur de fin en fonction d’une valeur donnée. Il se comporte comme tout itérateur Pour de n’importe quel langage de programmation/script. Il exécute l’itération sur un nombre défini d’éléments. »
C’est donc l’équivalent de
for num in range(500,5000) : En Python
num = num + 500
For num As Double = 500 To 5000 Step 500 En VB.NET
Comment changer les noms des sorties du modèle?
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.
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
L’élément à ajouter au noms de la couche en sortie n’est autre que la valeur de l’itérateur (VALUE). Pour insérer VALUE dans le nom de la couche en sortie, il suffit de mettre VALUE entre % à l’endroit souhaité de la chaîne de nom, par exemple :
C:\Users\admin\Documents\ArcGIS\Projects\MyProject10\HYDROGRAPHIE_SURFACIQUE_%VALUE%.shp
A chaque itération %VALUE% sera substituée par le nom de la couche en entrée.
Itérateur WHILE
Là, nous sommes en face d’un dilemme, parceque cet itérateur n’a du jamais servir dans aucun modèle. Une recherche sur le WEB ne permet de trouver aucun exemple d’utilisation. Nous avons donc, ici, à expliquer pourquoi il ne sert pas et pas comment servir!
Si on reprend la définition du Centre de Ressources ArcGis, l’itérateur WHILE:
« Fonctionne exactement comme l’instruction « while » dans tout script/langage de programmation, et qui s’exécute tant qu’une condition est soit true, soit false pour l’entrée ou le jeu d’entrées. »
Le problème c’est que, dans les langages de programmation, cet opérateur s’utilise sur des opérations séquentielles. Par exemple, vous allez lire les enregistrements d’un fichier TANT QUE vous n’arrivez pas à la fin du fichier. Ou alors traiter les enregistrements tant que la date est inférieure à une date limite, etc.
Mais ceci présuppose que les données en entrée de l’itération suivent un ordre connu et maîtrisé.
Et dans le cas des modèles de Model Builder, ceci n’est pas le cas, ou alors il n’est pas nécessaire d’utiliser ce type d’instruction.
Inutile de dire que la fin de fichier est un concept absent des traitements de la toolbox! Mais pour l’exemple des dates limites, il suffit d’effectuer une sélection sur la date pour ne retenir que les dates souhaitées. Inutile de parcourir séquentiellement les enregistrements jusqu’à une date donnée.
Les rares évocations de cet itérateur sur les forums concernent des tentatives de l’utiliser dans des cas où il ne s’applique pas.
Alors, est-ce qu’il y a des cas où il peut servir?
La réponse est oui, mais ils sont rares. Il faut d’abord comprendre que la condition à tester doit être une condition externe au modèle. Par exemple, une condition temporelle.
Si on veut exécuter le modèle tant qu’une heure n’est pas arrivée, ou bien pendant un laps de temps donné. Avouons que ces cas sont rares, mais c’est le seul exemple qui me vient en tête où on pourrait utiliser cet itérateur.
En tout cas, ce qu’il ne faut absolument pas faire c’est de relier la sortie de l’itérateur au reste du modèle: vous pouvez indiquer la sortie comme précondition d’un outil mais si la condition est remplie, le modèle s’arrêtera à la fin de l’exécution courante.
Rendez-vous dans le prochain article pour voir le dernier type d’itérateurs disponible avec Model Builder.