L’exécution d’algorithmes de modèle par itération
Dans le chapitre précédent nous avons exécuté notre modèle qui sélectionne et découpe les parcelles situées à moins de 500 mètres de nos installations ostréicoles. Le résultat est une seule couche de parcelles. Mais nous pourrions vouloir récupérer les parcelles de chaque installation dans une couche séparée. Nous avons neuf installations, nous voudrions avoir donc neuf couches.
Dans le premier cas, si une parcelle se situe à moins de 500 m de deux ou plus installations, elle n’apparaît qu’une seule fois. Dans le deuxième cas, nous aurions cette parcelle dans autant de couches que d’installations se situant à moins de 500 m d’elle.
Avec le modeleur graphique de QGis, cette opération est extrêmement simple.
Rappelons la structure de notre modèle:
Un premier algorithme calcule le buffer de 500m autour des Installations et un deuxième algorithme découpe la couche Parcelles avec les zones buffer produites par le premier.
Nous voudrions donc que ce modèle s’exécute autant de fois que d’installations sont présentes dans la couche Installations.
Pour cela il suffit de lancer le modèle et de lui indiquer que nous souhaitons l’itération sur la couche Installations.
Le symbole situé à côté des couches en entrée permet de faire ceci. Il suffit de cliquer dessus pour activer l’itération sur la couche concernée.
Attention à ne pas vous tromper de couche en entrée. Dans notre exemple nous avons 9 Installations et 863 parcelles. Si vous vous trompez et demandez l’itération sur les parcelles vous aurez 863 couches en sortie!
Comme pour tout modèle, vous pouvez laisser le nom de la couche en sortie à blanc pour créer des couches temporaires, ou bien entrer un chemin et un nom de fichier pour créer des couches permanentes. La seule chose qui change avec l’itération c’est que les noms temporaires ou permanents seront complétés d’un indice numérique indiquant le numéro d’itération correspondant:
Dans cet exemple nous avons entré C:\QGis\data articles\resultats\resultat comme nom de la couche en sortie. Nous avons obtenu neuf couches nommées resultat_0.shp à resultat_8.shp.
Emboîtement de modèles
Comme nous l’avons précisé précédemment, lorsqu’un modèle est enregistré dans le dossier modèles, il apparaît dans la catégorie Modèles du panneau Boîte à uotils de traitement. Ce qui n’a pas été mentionné plus haut, c’est qu’il apparaît également dans l’onglet des algorithmes de la fenêtre du modeleur graphique. Cela signifie qu’un modèle écrit précédemment peut être utilisé comme un algorithme dans un autre modèle.
Attention quand même, car un modèle peut ne pas apparaître dans la liste des algorithmes si certains de leurs composantes ne sont pas disponibles. Cela peut se produire si un fournisseur d’algorithme est désactivé. Par exemple, si vous avez utilisé un outil SAGA dans un modèle mais vous avez désactivé par la suite les outils SAGA, ce modèle ne sera pas disponible. Tant que tous les algorithmes d’un modèle sont présents dans le panneau de la boîte à outils de traitement, le modèle sera disponible en tant qu’algorithme dans le modeleur graphique.
Pour illustrer cette fonctionnalité, nous nous appuierons sur le modèle que nous avons utilisé dans la section précédente. Une fois créées les parcelles et les secteurs de parcelle situés à moins de 500 m nous allons fusionner les résultats par Quartier Maritime. Cette information est contenue dans la table attributaire des parcelles et donc dans la table attributaire de la couche résultat.
Nous commençons par nommer le nouveau modèle et lui affecter le même groupe
Nous ajoutons les données en entrée: parcelles et installations
Nous ajoutons le modèle existant
1- Nous sélectionnons l’onglet Algorithmes
2- Nous Cliquons-déplaçons le modèle Parcelles riveraines
3-nous renseignons les champs d’entrée
Puis on clique sur OK
Nous allons maintenant ajouter l’algorithme qui permet de fusionner des polygones suivant le contenu d’un champ (dissolve en anglais)
Pour la couche en entrée on sélectionne ‘parcelles riveraines’ créé par l’algorithme ‘parcelles riveraines’
Dans Dissoudre tout on sélectionne NON car nous voulons utiliser le contenu d’un champ comme critère de fusion
Dans Champ d’identifiant unique nous entrons le nom du champ contenant le critère (QUARTIER)
Nous donnons un nom à la couche résultat (zoneriveraine)
Nous n’avons pas besoin de définir l’algorithme parent car nous utilisons la sortie de l’algorithme précédent.
On clique sur OK
Le modèle complet est maintenant:
Une fois enregistré, le nouveau modèle est prêt à être utilisé. Il apparaît dans la rubrique Modèles de la Boîte à outils de trraitements
On double-clique pour l’exécuter.
On renseigne la fenêtre de dialogue
Le résultat s’affiche. si on ouvre la table attributaire de la couche résultat, on voit bien qu’il n’y a qu’un seul polygone, toutes les parcelles concernées correspondant au même quartier maritime.
Utilisation du traitement par lots avec les modèles
Les Modèles peuvent également être lancés en mode batch tout comme les autres algorithmes de traitement. Pour ce faire, simplement trouvez le modèle dans le panneau de la boîte à outils de traitement, faites un clic droit dessus et sélectionner exécuter comme traitement par lots, comme le montre la capture d’écran suivante :
L’outil fonctionne comme n’importe quel autre geoalgorithme dans QGIS.
Vous pouvez cliquer sur Ajouter lignes, supprimer des lignes et finalement sur RUN lorsque vous êtes prêt. Avec cette méthode, le modèle peut être utilisé sur des ensembles de données de différentes zones géographiques. Cette technique est également utile dans les cas où vous devrez répéter les étapes de géotraitement plusieurs fois sur une collection de fichiers.
Convertir un modèle en un script Python
Dans la version 2.4 de QGIS il était possible de convertir un modèle de traitement vers un script Python. Pour cela, il suffisait de cliquer-droit sur le modèle dans la Boîte à outils de traitements et de sélectionner l’option Enregistrer comme script Python. Au cours du développement de QGIS 2.6, le code sous-jacent du modeleur graphique a été complètement réécrit. En conséquence, il y a beaucoup de changements et d’améliorations dans la nouvelle version du modeleur:les fichiers .Model sont désormais stockées au format JSON au lieu de XML; il n’y a aucune limite de profondeur d’imbrication des modèles; on peut glisser-coller les algorithmes et les entrées vers la fenêtre graphique du modeleur; …
Malheureusement, la possibilité d’exporter un modèle comme un script Python n’a pas encore été implémentée dans le modeleur mis à jour.
Cette fonctionnalité devrait réapparaître dans une future version de QGIS. Pour le moment, étant donné que les modèles sont des algorithmes, ils peuvent toujours tre exécutées depuis la Console Python.
Bonjour, merci pour ce tuto.
J’ai une question annexe à la réalisation du tuto jusqu’au bout.
Vous dites avoir 9 installations sur la couche etab_conchy_2002_l2. Effectivement, visuellement cela concorde. Néanmoins, si j’ouvre la table attributaire de cette couche il y a le double d’installations.
Je n’arrive pas à comprendre pourquoi les autres points ne sont pas visibles ici.
Il s’agit peut-être d’une question de débutant, mais pourriez-vous m’aider à comprendre cela.
Par avance, merci de votre réponse.
Vérifiez que chaque installation n’est pas doublée. Peut-être vous avez exécuté deux fois une opération et vous en avez créé des doublons
Bonjour, merci de votre réponse.
Visiblement non car les objets ont sont différents en tous points (raison sociale, adresse, coordonnées X et Y, etc.)
Seulement, ils n’apparaissent pas. Et je ne me l’explique pas.
Malheureusement je n’ai plus les couches qui m’ont servi à rédiger l’article. Si ce ne sont pas des doublons, peut-être c’est des installations hors cadre…
Avez-vous fait un »zoom sur la couche » pour voir si ce n’est pas le cas?
Bonjour,
Merci de votre réponse.
Oui, c’est bien en faisant ce genre de manipulation que je trouvais les points supplémentaires.
Bon, peu importe finalement, pour le tuto. Car j’ai bien réussi à reproduire les commandes.
(comme écrit plus haut, il s’agissait d’une question annexe…)