﻿{"id":913,"date":"2015-03-15T07:27:22","date_gmt":"2015-03-15T06:27:22","guid":{"rendered":"http:\/\/www.sigterritoires.fr\/?p=913"},"modified":"2015-03-23T21:32:57","modified_gmt":"2015-03-23T20:32:57","slug":"arcgis-model-builder-les-iterateurs-for-et-while","status":"publish","type":"post","link":"https:\/\/www.sigterritoires.fr\/index.php\/arcgis-model-builder-les-iterateurs-for-et-while\/","title":{"rendered":"ArcGis Model Builder: les it\u00e9rateurs FOR et WHILE"},"content":{"rendered":"<p>Dans l&rsquo;article pr\u00e9c\u00e9dent (<a href=\"http:\/\/www.sigterritoires.fr\/?p=890\">ArcGis Model Builder: \u00e9tendre un mod\u00e8le \u00e0 un ensemble de donn\u00e9es en entr\u00e9e<\/a>) nous avons abord\u00e9 les it\u00e9rateurs les plus courants utilis\u00e9s avec Model Builder. Ces it\u00e9rateurs permettent d&rsquo;appliquer un mod\u00e8le de traitement \u00e0 un ensemble de couches en entr\u00e9e.<\/p>\n<p>Mais il existe deux autres types d&rsquo;it\u00e9rateurs disponibles:<\/p>\n<ul>\n<li>les it\u00e9rateurs\u00a0 FOR et WHILE (POUR et TANT QUE)<\/li>\n<li>les it\u00e9rateurs qui parcourent des entit\u00e9s d&rsquo;une seule couche<\/li>\n<\/ul>\n<p>Dans cet article nous allons voir les it\u00e9rateurs FOR et WHILE<!--more--><\/p>\n<h2>It\u00e9rateur FOR<\/h2>\n<p>Vous allez utiliser cet it\u00e9rateur si vous voulez ex\u00e9cuter le traitement pour une s\u00e9rie de valeurs. Par exemple, vous voulez calculer un buffer d&rsquo;une certaine distance et ex\u00e9cuter un traitement. Au lieu de tester plusieurs valeurs individuellement, vous pouvez d\u00e9cider de faire des buffers de 500 \u00e0 5000 m\u00e8tres avec un pas de 500m. Le mod\u00e8le s&rsquo;ex\u00e9cutera 10 fois, la premi\u00e8re fois avec une valeur de 500m pour le buffer, la deuxi\u00e8me avec une valeur de 1000m, et ainsi de suite.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2015\/03\/mod11.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"915\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/arcgis-model-builder-les-iterateurs-for-et-while\/mod11\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2015\/03\/mod11.png?fit=771%2C330&amp;ssl=1\" data-orig-size=\"771,330\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"mod11\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2015\/03\/mod11.png?fit=630%2C270&amp;ssl=1\" class=\"aligncenter size-large wp-image-915\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2015\/03\/mod11-630x270.png?resize=630%2C270\" alt=\"it\u00e9rateur for \" width=\"630\" height=\"270\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2015\/03\/mod11.png?resize=630%2C270&amp;ssl=1 630w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2015\/03\/mod11.png?resize=300%2C128&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2015\/03\/mod11.png?w=771&amp;ssl=1 771w\" sizes=\"auto, (max-width: 630px) 100vw, 630px\" \/><\/a><\/p>\n<p>Si on reprend la d\u00e9finition du Centre de Ressources ArcGis, l&rsquo;it\u00e9rateur FOR:<br \/>\n<em>\u00ab\u00a0Ex\u00e9cute une it\u00e9ration sur une valeur de d\u00e9but et une valeur de fin en fonction d&rsquo;une valeur donn\u00e9e. Il se comporte comme tout it\u00e9rateur Pour de n&rsquo;importe quel langage de programmation\/script. Il ex\u00e9cute l&rsquo;it\u00e9ration sur un nombre d\u00e9fini d&rsquo;\u00e9l\u00e9ments.\u00a0\u00bb<\/em><\/p>\n<p>C&rsquo;est donc l&rsquo;\u00e9quivalent de<br \/>\nfor num in range(500,5000) :\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 En Python<br \/>\nnum = num + 500<\/p>\n<p>For num As Double = 500 To 5000 Step 500 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 En VB.NET<\/p>\n<h2>Comment changer les noms des sorties du mod\u00e8le?<\/h2>\n<p>Pour que, \u00e0 chaque it\u00e9ration, la couche r\u00e9sultante porte un nom diff\u00e9rent (si non chaque sortie cons\u00e9cutive \u00e9crase la pr\u00e9c\u00e9dente) il faut ajouter un \u00e9l\u00e9ment variable dans le nom.<\/p>\n<p>En ouvrant le dernier outil d\u2019un mod\u00e8le, on a toujours le champ \u00ab\u00a0Output\u00a0\u00bb, dans lequel vous d\u00e9finissez l\u2019endroit et le nom de la couche r\u00e9sultante. Prenons par exemple:<\/p>\n<p><em>C:\\Users\\admin\\Documents\\ArcGIS\\Projects\\MyProject10\\HYDROGRAPHIE_SURFACIQUE.shp<\/em><\/p>\n<p>L&rsquo;\u00e9l\u00e9ment \u00e0 ajouter au noms de la couche en sortie n&rsquo;est autre que la valeur de l&rsquo;it\u00e9rateur (VALUE). Pour ins\u00e9rer VALUE dans le nom de la couche en sortie, il suffit de mettre VALUE entre % \u00e0 l\u2019endroit souhait\u00e9 de la cha\u00eene de nom, par exemple :<\/p>\n<p><em>C:\\Users\\admin\\Documents\\ArcGIS\\Projects\\MyProject10\\HYDROGRAPHIE_SURFACIQUE_%VALUE%.shp<\/em><\/p>\n<p>A chaque it\u00e9ration %VALUE% sera substitu\u00e9e par le nom de la couche en entr\u00e9e.<\/p>\n<h2>It\u00e9rateur WHILE<\/h2>\n<p>L\u00e0, nous sommes en <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/cartes-enc-dans-qgis-avec-postgis1\/\">face<\/a> d&rsquo;un dilemme, parceque cet it\u00e9rateur n&rsquo;a du jamais servir dans aucun mod\u00e8le. Une recherche sur le WEB ne permet de trouver aucun exemple d&rsquo;utilisation. Nous avons donc, ici, \u00e0 expliquer pourquoi il ne sert pas et pas comment servir!<\/p>\n<p>Si on reprend la d\u00e9finition du Centre de Ressources ArcGis, l&rsquo;it\u00e9rateur WHILE:<br \/>\n<em>\u00ab\u00a0Fonctionne exactement comme l&rsquo;instruction \u00ab\u00a0while\u00a0\u00bb dans tout script\/langage de programmation, et qui s&rsquo;ex\u00e9cute tant qu&rsquo;une condition est soit true, soit false pour l&rsquo;entr\u00e9e ou le jeu d&rsquo;entr\u00e9es.\u00a0\u00bb<\/em><\/p>\n<p>Le probl\u00e8me c&rsquo;est que, dans les langages de programmation, cet op\u00e9rateur s&rsquo;utilise sur des op\u00e9rations s\u00e9quentielles. Par exemple, vous allez lire les enregistrements d&rsquo;un fichier TANT QUE vous n&rsquo;arrivez pas \u00e0 la fin du fichier. Ou alors traiter les enregistrements tant que la date est inf\u00e9rieure \u00e0 une date limite, etc.<br \/>\nMais ceci pr\u00e9suppose que les donn\u00e9es en entr\u00e9e de l&rsquo;it\u00e9ration suivent un ordre connu et ma\u00eetris\u00e9.<br \/>\nEt dans le cas des mod\u00e8les de Model Builder, ceci n&rsquo;est pas le cas, ou alors il n&rsquo;est pas n\u00e9cessaire d&rsquo;utiliser ce type d&rsquo;instruction.<\/p>\n<p>Inutile de dire que la fin de fichier est un concept absent des traitements de la toolbox! Mais pour l&rsquo;exemple des dates limites, il suffit d&rsquo;effectuer une s\u00e9lection sur la date pour ne retenir que les dates souhait\u00e9es. Inutile de parcourir s\u00e9quentiellement les enregistrements jusqu&rsquo;\u00e0 une date donn\u00e9e.<\/p>\n<p>Les rares \u00e9vocations de cet it\u00e9rateur sur les forums concernent des tentatives de l&rsquo;utiliser dans des cas o\u00f9 il ne s&rsquo;applique pas.<\/p>\n<p>Alors, est-ce qu&rsquo;il y a des cas o\u00f9 il peut servir?<br \/>\nLa r\u00e9ponse est oui, mais ils sont rares. Il faut d&rsquo;abord comprendre que la condition \u00e0 tester doit \u00eatre une condition externe au mod\u00e8le. Par exemple, une condition temporelle.<br \/>\nSi on veut ex\u00e9cuter le mod\u00e8le tant qu&rsquo;une heure n&rsquo;est pas arriv\u00e9e, ou bien pendant un laps de temps donn\u00e9. Avouons que ces cas sont rares, mais c&rsquo;est le seul exemple qui me vient en t\u00eate o\u00f9 on pourrait utiliser cet it\u00e9rateur.<\/p>\n<p>En tout cas, ce qu&rsquo;il ne faut absolument pas faire\u00a0 c&rsquo;est de relier la sortie de l&rsquo;it\u00e9rateur au reste du mod\u00e8le: vous pouvez indiquer la sortie comme pr\u00e9condition d&rsquo;un outil mais si la condition est remplie, le mod\u00e8le s&rsquo;arr\u00eatera \u00e0 la fin de l&rsquo;ex\u00e9cution courante.<\/p>\n<p>Rendez-vous dans le prochain article pour voir le dernier type d&rsquo;it\u00e9rateurs disponible avec Model Builder.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans l&rsquo;article pr\u00e9c\u00e9dent (ArcGis Model Builder: \u00e9tendre un mod\u00e8le \u00e0 un ensemble de donn\u00e9es en entr\u00e9e) nous avons abord\u00e9 les it\u00e9rateurs les plus courants utilis\u00e9s avec Model Builder. Ces it\u00e9rateurs permettent d&rsquo;appliquer un mod\u00e8le de traitement&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"give_campaign_id":0,"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"sfsi_plus_gutenberg_text_before_share":"","sfsi_plus_gutenberg_show_text_before_share":"","sfsi_plus_gutenberg_icon_type":"","sfsi_plus_gutenberg_icon_alignemt":"","sfsi_plus_gutenburg_max_per_row":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[9,4,26],"tags":[15,10,123,122,50,124],"class_list":["post-913","post","type-post","status-publish","format-standard","hentry","category-arcgis-pro","category-logiciels_editeur","category-outils-et-methodes","tag-arcgis","tag-arcgis-pro-2","tag-for","tag-iterateurs","tag-model-builder","tag-while"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p6XU0A-eJ","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/comments?post=913"}],"version-history":[{"count":0,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/913\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/media?parent=913"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/categories?post=913"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/tags?post=913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}