.
Le module de Traitements peut être étendu par des applications tierces. Pour l’instant, les logiciels SAGA, GRASS, OTB (Orfeo Toolbox) et R sont supportés, ainsi que des applications en ligne de commande qui proposent des fonctionnalités d’analyses spatiales. Les algorithmes reposant sur des applications tierces sont gérées par leur propre fournisseur d’algorithmes.
Cette section vous montrera comment configurer le module de Traitements pour inclure ces applications additionnelles et vous expliquera quelques fonctionnalités propres à leurs algorithmes. Une fois le système configuré, vous pourrez exécuter les algorithmes externes depuis tous les composants du module tels que la boîte à outils ou le modeleur graphique, comme vous pourriez le faire avec n’importe quel géoalgorithme.
Par défaut, tous les algorithmes qui reposent sur une application tierce non fournie avec QGIS sont désactivés. Vous pouvez les activer dans la fenêtre de configuration. Vérifiez que l’application correspondante est préalablement installée sur votre ordinateur. Activer un fournisseur d’algorithmes non installé résultera en une erreur à l’exécution, bien que les algorithmes soient présent dans la boîte à outils.
La raison est que les descriptions des algorithmes (nécessaires pour créer la fenêtre de paramètres et donner les informations sur l’algorithme) ne sont pas fournies avec les applications mais sont incluses dans QGIS. C’est à dire que QGIS les inclut d’office, même si vous ne les avez pas installées. Exécuter un algorithme nécessite évidemment que l’application tierce soit installée au préalable.
Si vous n’êtes pas un utilisateur avancé et utilisez QGIS sur Windows, vous pourriez ne pas vous intéresser au reste de ce chapitre. Assurez-vous d’avoir installé QGIS sur votre système avec l’installeur indépendant. Ceci installera automatiquement SAGA, GRASS et OTB sur votre système et les configurera de manière à ce qu’ils soient accessibles depuis QGIS. Tous les algorithmes de la vue simplifiée de la barre d’outils sont prêts à être utilisés, sans aucune configuration supplémentaire. Si vous installez via QGIS l’application OSGeo4W, assurez-vous de bien sélectionner SAGA et OTB pour l’installation.
Si vous voulez en savoir plus sur le fonctionnement de ces fournisseurs ou si vous souhaitez utiliser des algorithmes non incluses dans la barre d’outils simplifiée (telles que des scripts R), continuez donc à lire.
Le fait d’ouvrir un fichier dans QGIS ne garantit pas que ce fichier pourra être ouvert et traité par l’application tierce. Dans la plupart des cas, celui-ci pourra lire ce que vous avez ouvert dans QGIS, mais parfois, cela ne sera pas le cas. C’est particulièrement le cas des connections aux bases de données et les fichiers peu communs, aussi bien raster que vectoriels, qui pourront présenter des problèmes. Si cela arrivait, essayez de convertir vos données dans un format usuel reconnu par l’application tierce et vérifiez dans la console (historique et messages) le résultat du traitement pour analyser l’origine des erreurs.
Si vous utilisez des couches raster GRASS, par exemple, vous allez peut-être rencontrer des problèmes et ne pas pouvoir mener à bien votre travail si vous appelez des algorithmes externes ayant cette couche comme entrée. C’est pour cette raison que ces couches ne seront pas disponibles pour les algorithmes.
Pour les couches vectorielles, vous ne devriez pas rencontrer de problème : QGIS les convertit automatiquement dans un format reconnu par l’application tierce avant de lui transmettre. Cela aboutit à un temps de traitement plus long, particulièrement si la couche comprend beaucoup d’objets. Ne vous étonnez donc pas si le traitement d’une couche provenant d’une base de données est plus long que celui d’un shapefile de taille équivalente.
Les algorithmes n’utilisant pas d’application tierce peuvent traiter toutes les couches qui peuvent s’ouvrir dans QGIS puisque qu’ils sont lancés depuis QGIS.
Concernant les formats de sortie, tous les formats gérés par QGIS peuvent être utilisés en sortie, à la fois pour les couches raster et vecteur. Certains formats ne sont pas gérés par certaines applications tierces mais celles-ci permettent toutes d’exporter dans des formats raster courants qui peuvent ensuite être convertis automatiquement par QGIS. Comme pour les couches d’entrée, si une conversion est opérée, le temps de traitement peut être allongé.
Si l’extension du fichier spécifié lors de l’appel de l’algorithme ne correspond pas à un format géré par QGIS, alors un suffixe sera ajouté pour définir un format par défaut. Pour les couches raster, l’extension .tif est utilisée tandis que .shp est utilisée pour les couches vecteur.
Les applications tierces peuvent prendre en compte les sélections qui existent sur les couches vecteur dans QGIS. Cependant, cela nécessite de réécrire toutes les couches vecteur d’entrée, comme si elles étaient dans un format non géré par l’application tierce. Une couche peut être passée directement à une application tierce uniquement lorsqu’il n’y a pas de sélection ou que l’option N’utiliser que les entités sélectionnées n’ pas activée dans les paramètres de configuration généraux du module de traitement.
Dans les cas où l’export de la sélection est nécessaire cela rallonge les temps d’exécution.
Les algorithmes de SAGA peuvent être exécutés depuis QGIS si SAGA est installé sur votre ordinateur et que le module de traitements QGIS est configuré correctement pour trouver les fichiers nécessaires. En particulier, l’exécutable en ligne de commande de SAGE est nécessaire pour utiliser les algorithmes.
Si vous utilisez Windows, les installateurs indépendant et OSGeo4W incluent SAGA aux côtés de QGIS, et le chemin d’accès est automatiquement configuré. Il n’y a donc rien à faire d’autre.
Si vous avez installé vous-même SAGA (rappelez-vous qu’il vous faut la version 2.1), le chemin de l’exécutable SAGA doit être configuré. pour cela, ouvrez la fenêtre de configuration. Dans le bloc SAGA, vous trouverez un paramètre nommé Répertoire SAGA. Entrez le chemin du dossier d’installation de SAGA et fermez la fenêtre. Vous êtes prêts à utiliser les algorithmes de SAGA depuis QGIS.
Si vous êtes sur Linux, les exécutables SAGA ne sont pas inclus dans le module de traitement. Vous devez donc télécharger et installer le logiciel vous-même. Référez au site web de SAGA pour plus d’informations. SAGA 2.1 est requis.
Dans ce cas, il n’est pas nécessaire de configurer le chemin vers l’exécutable de SAGA et vous ne verrez pas ces répertoires. Vérifiez que SAGA est correctement installé et que le chemin d’installation figure dans la variable d’environnement PATH. Pour vérifier que les fichiers binaires de SAGA sont accessibles, ouvrez une console et tapez saga_cmd.
La plupart des algorithmes SAGA nécessitent habituellement des couches Raster en entrée sur la même emprise et la même grille, couvrant la même emprise et ayant la même résolution. A l’appel d’un algorithme SAGA depuis QGIS, vous pouvez cependant utiliser n’importe quelle couche, quelles que soient leur emprise et leur résolution. Quand plusieurs couches raster son indiquées en entré d’un algorithme SAGA, QGIS les rééchantillonne sur une grille commune avant de les transmettre à SAGA (à moins que l’algorithme SAGA manipule directement des couches dans des grilles différentes).
La définition de cette grille commune est contrôlée par l’utilisateur et peut se faire selon plusieurs paramètres, présents dans le groupe SAGA de la fenêtre de configuration. Deux façons de procéder existent:
La configuration manuelle. Vous définissez l’emprise à l’aide des paramètres suivants:
Rééchantillonner la valeur minimum de X
Rééchantillonner la valeur maximum de X
Rééchantillonner la valeur minimum de Y
Rééchantillonner la valeur maximum de Y
Rééchantillonner la taille de la cellule
Veuillez noter que QGIS rééchantillonnera les couches en entrées sur cette emprise, même si elles ne la recoupent pas.
La configuration automatique à partir des couches en entrée. Pour choisir cette option, activez l’option Utiliser la grille minimale pour le rééchantillonnage. Toutes les autres options seront ignorées et l’emprise minimum couvrant toutes les couches sera utilisée. La taille de la cellule de la couche cible sera la plus grande des tailles de cellules des couches en entrée.
Pour les algorithmes qui n’utilisent pas plusieurs couches raster, ou pour ceux qui n’ont pas besoin d’une grille unique, le rééchantillonnage n’est pas nécessaire et ces paramètres ne seront pas utilisés.
Contrairement à QGIS, SAGA ne gère pas les couches multi-bande. Si vous utilisez de telles couches (par exemple une image RVB ou multispectrale), vous devez tout d’abord la séparer en couches mono-bande. Pour ce faire, vous pouvez utilisez l’algorithme ‘SAGA/Grid - Tools/Split RGB image’ (qui crée trois images à partir d’une image RVB) ou l’algorithme ‘SAGA/Grid - Tools/Extract band’ (qui extrait une bande en particulier).
SAGA suppose que la couche raster possède la même résolution en X et en Y. Si vous travaillez sur une couche avec des résolutions différentes entre les deux axes, les résultats peuvent être incohérents. Dans ce cas, un message d’avertissement est ajouté au journal, indiquant que la couche n’est pas adaptée au traitement par SAGA.
Lorsque QGIS appelle SAGA, il le fait par son interface en ligne de commandes, envoyant ainsi une série de commandes pour réaliser les opérations demandées. SAGA transmet son état d’avancement dans la console ainsi que d’autres informations. Ces messages sont filtrés et utilisés pour afficher la barre d’avancement pendant l’exécution de l’algorithme.
Les commandes envoyées par QGIS et les informations supplémentaires écrites par SAGA peuvent être consignées dans le log comme pour tous les algorithmes. Il peut être utile de suivre en détail ce qu’il se passe lorsque QGIS lance un algorithme SAGA. Vous avez deux options pour activer ce mécanisme : Log console output et Log execution commands
La plupart des autres fournisseurs tiers qui sont appelés par la ligne de commandes ont des options similaires, que vous trouverez dans la rubrique configuration du module.
L’intégration de R est légèrement différente de celle de SAGA, dans la mesure où il n’y a pas d’ensemble prédéfini d’algorithmes à exécuter (hormis quelques exemples). C’est donc à vous d’écrire les scripts à transmettre à R, comme vous le feriez depuis R. Un peu comme dans la section sur les scripts. Cette section va vous montrer comment appeler les commandes R à partir de QGIS et comment leur transmettre les objets QGIS (couches et tables).
La première chose à faire, comme nous l’avons vu pour SAGA, est de dire à QGIS où se situent les fichiers exécutables de R. Paramétrez l’entrée Répertoire R dans la fenêtre de configuration du module de traitements. Une fois cela fait, vous pouvez commencer à créer et exécuter vos propres scripts R.
Une fois encore, pour Linux, cela est légèrement différent : vous n’avez qu’à vérifier que le répertoire R est inclus dans la variable d’environnement PATH. Si vous pouvez lancer R en tapant R dans un terminal, alors vous êtes prêt pour la suite.
Pour ajouter un nouvel algorithme qui appelle une fonction R (ou un script R plus complexe que vous auriez développé et que vous souhaiteriez utiliser dans QGIS), vous devez créer un fichier de script qui va indiquer au module de traitements comment effectuer l’opération et les commandes R correspondantes.
Les fichiers de scripts R ont l’extension .rsx et leur création est relativement simple si vous connaissez la syntaxe et le langage de script de R. Ils seront sauvegardés dans le répertoire de scripts de R. Vous pouvez configurer ce répertoire dans le groupe de configuration de R (dans la fenêtre Options du module de traitements), comme vous le feriez pour un script ordinaire.
Voyons un simple script, qui appelle la méthode spsample de R, pour créer une grille aléatoire à l’intérieur de l’emprise d’un ensemble de polygones d’une couche donnée. Cette fonction appartient au paquet maptools. Comme la plupart des algorithmes que vous aurez à intégrer dans QGIS utilisent ou génèrent des données spatiales, la connaissance des paquets spatiaux comme maptools et surtout sp est un prérequis.
##polyg=vector
##numpoints=number 10
##output=output vector
##sp=group
pts=spsample(polyg,numpoints,type="random")
output=SpatialPointsDataFrame(pts, as.data.frame(pts))
Les premières lignes, qui commencent avec un double signe de commentaire Python (##), indiquent à QGIS les entrées de l’algorithme décrit dans le fichier ainsi que les sorties qu’il génère. Ces lignes fonctionnent exactement avec la même syntaxe que les scripts SEXTANTE que nous avons déjà étudié et elles ne seront pas décrites davantage ici.
Quand vous déclarez un paramètre d’entrée, QGIS utilise cette information pour deux choses : créer le formulaire pour demander à l’utilisateur la valeur de ce paramètre et créer la variable R correspondante qui sera ensuite utilisée dans les commandes R.
Dans l’exemple ci-dessus, nous avons déclaré une entrée de type vecteur appelée polyg. A l’exécution de l’algorithme, QGIS ouvrira la couche sélectionnée par l’utilisateur dans R et la stockera dans une variable nommée polyg. Ainsi, le nom du paramètre est également le nom de la variable à utiliser dans R pour accéder à son contenu (par conséquent, évitez d’utiliser des mots réservés R comme noms de paramètre).
Les éléments spatiaux telles que les couches vecteur et raster sont lues en utilisant les commandes readOGR() et brick() (n’ajoutez pas ces commandes à votre description de fichier – QGIS s’en chargera). Elles sont stockées en tant qu’objets Spatial*DataFrame. Les champs des tables sont stockés en tant que chaînes de caractères contenant le nom du champ sélectionné.
Les tables sont ouvertes par la commande read.csv(). Si la table à charger n’est pas au format CSV, il faudra la convertir avant de l’importer dans R.
De plus, les couches raster peuvent être lues avec la commande readGDAL() au lieu de brick(), en utilisant ##usereadgdal.
Si vous êtes un utilisateur expert et que vous ne voulez pas que QGIS crée l’objet correspondant à une couche, vous pouvez utiliser le paramètre ##passfilename qui indique que vous préférez une chaîne de caractères contenant le nom du fichier à la place. Dans ce cas, c’est à vous d’ouvrir le fichier au préalable.
Avec l’information ci-dessus, nous pouvons maintenant comprendre la première ligne de notre premier exemple de script (la première ligne qui n’est pas un commentaire Python).
pts=spsample(polyg,numpoints,type="random")
La variable polygon contient déjà un objet SpatialPolygonsDataFrame, l’appel de la méthode spsample est donc simple. Il en est de même pour la méthode numpoints qui renvoit le nombre de points à ajouter pour créer la grille.
Comme nous avons déclaré une sortie de type vecteur nommée out, nous devons créer cette variable out et lui affecter un objet Spatial*DataFrame (dans notre cas, un SpatialPointsDataFrame). Vous pouvez utiliser n’importe quel nom pour les variables intermédiaires. Assurez-vous simplement que la variable qui stocke la valeur finale ait le même nom que la variable de sortie définie au début ainsi qu’une valeur compatible.
Dans notre exemple, le résultat de la méthode spsample doit être converti explicitement en objet SpatialPointsDataFrame, dans la mesure où c’est un objet de la classe ppp qui ne peut être retransmis à QGIS.
Si votre algorithme génère des couches raster, la façon dont elles sont sauvegardées varie si vous avez utilisé l’option #dontuserasterpackage ou pas. If oui, les couches seront sauvegardées en utilisant la méthode writeGDAL(). Si non, la méthode writeRaster() du paquet raster sera utilisée.
Si vous avez utilisé l’option #passfilename, les sorties sont générées à l’aide du package raster (avec writeRaster()), bien qu’il ne soit pas utilisé en entrée.
Si votre algorithme ne renvoie pas de couche mais plutôt un résultat texte dans la console, vous devez préciser que la console doit s’afficher à la fin de son exécution. Pour cela, commencez les lignes qui doivent renvoyer les résultats par le signe >. Les sorties des autres lignes seront masquées. Par exemple, voici la description d’un algorithme qui réalise un test de normalisation sur un champ donné (ou une colonne) de la table d’attributs d’une couche vectorielle :
##layer=vector
##field=field layer
##nortest=group
library(nortest)
>lillie.test(layer[[field]])
La sortie de la dernière ligne est affichée, mais la sortie de la première ne l’est pas (ni celles des commandes ajoutées automatiquement par QGIS).
Si votre algorithme crée des graphiques (par la méthode plot()), ajoutez la ligne suivante:
##showplots
Ceci va indiquer à QGIS de rediriger toutes les sorties graphiques de R vers un fichier temporaire qui sera chargé une fois l’exécution de R terminée.
Les graphiques et les résultats dans la console seront affichés dans le gestionnaire de résultats.
Pour plus d’informations, veuillez vous référer aux scripts fournis avec la barre d’outils Traitements. Tous sont relativement simples et pourront vous aider à construire vos propres scripts.
Note
Les bibliothèques rgdal et maptools sont chargées par défaut de manière à ce que vous n’ayez pas besoin d’ajouter les commandes library() correspondantes (vous devez juste vous assurer que ces deux paquets sont installés dans votre distribution de R). Néanmoins, d’autres bibliothèques supplémentaires dont vous avez besoin doivent explicitement être chargées. Ajoutez simplement les commandes requises au début de votre script. Vous devez également vous assurer que les paquets correspondants sont installés dans la distribution de R utilisée par QGIS. Le framework de géo-traitement ne s’occupe pas de l’installation des paquets. Si vous lancez un script qui nécessite un paquet spécifique qui n’est pas installé, son exécution échouera et Processing tentera de détecter quels paquets manquent. Vous devez installer ces bibliothèques manquantes manuellement avant de pouvoir lancer votre algorithme.
La configuration pour GRASS est similaire à celle de SAGA. Tout d’abord, pour Windows, indiquez le répertoire d’installation de GRASS ainsi que l’emplacement de l’interpréteur shell (habituellement le fichier msys.exe fourni avec GRASS).
Par défaut, le module de traitement est configuré de telle sorte qu’il utilise la distribution de GRASS installée avec QGIS. Cela devrait fonctionner sans problème sur la plupart des systèmes mais, si vous rencontrez des difficultés, vous allez sans doute devoir configurer la connexion à GRASS manuellement. De même, si vous souhaitez utiliser une version différente de GRASS, vous pouvez modifier ce paramètre et pointer sur le répertoire qui contient la version souhaitée. La version 6.4 de GRASS est nécessaire pour que les algorithmes fonctionnent correctement.
Sous Linux, assurez-vous simplement que GRASS est correctement installé et qu’il peut être lancé depuis un terminal.
Les algorithmes GRASS nécessitent la définition d’une région. Cette région peut être définie manuellement, en fournissant les valeurs, comme pour la configuration de SAGA, ou de manière automatique, correspondant à l’emprise minimale des données d’entrée à l’exécution de l’algorithme. Si vous préférez ce dernier réglage, cochez l’option Utiliser l’emprise minimale dans les paramètres de configuration de GRASS.
Le dernier paramètre à configurer est le jeu de données. Un jeu de données est nécessaire pour exécuter GRASS et le module de traitement crée un jeu temporaire à chaque exécution. Vous devez indiquer si le système de coordonnées est géographique (lat/lon) ou projeté.
Les algorithmes GDAL ne nécessitent pas de configuration particulière, dans la mesure où ils sont déjà intégrés dans QGIS et y récupèrent donc leurs configurations.
Les algorithmes de la boîte à outils Orfeo (OTB) peuvent être exécutés depuis QGIS si OTB est installé sur votre ordinateur et que QGIS est configuré correctement pour trouver les fichiers nécessaires (outils en ligne de commande et librairies).
Comme pour SAGA, les exécutables d’OTB sont incluses dans l’installateur indépendant de Windows mais pas sous Linux. Vous devez donc télécharger et installer le logiciel vous-même. Référez au site web d’OTB pour plus d’informations.
Une fois OTB installé, démarrez QGIS, ouvrez la fenêtre de configuration du module de Traitements et configurez le fournisseur OTB. Dans le groupe Orfeo Toolbox (analyse d’image), vous retrouverez tous les réglages relatifs à OTB. Vérifiez que les algorithmes sont activés.
Ensuite, configurez l’emplacement des exécutables et des librairies OTB :
habituellement, le répertoire Applications OTB pointe vers /usr/lib/otb/applications et celui des Outils OTB en ligne de commande est /usr/bin.
si vous avez utilisé l’installateur OSGeo4W pour installer le paquet otb-bin, entrez respectivement C:\OSGeo4W\apps\orfeotoolbox\applications et C:\OSGeo4W\bin pour les répertoires Applications OTB et Outils OTB en ligne decommande. Ces valeurs sont les configurations par défaut mais si vous avez une installation différente d’OTB, modifiez les en conséquence.
Pour utiliser ce fournisseur, vous devez installer les outils TauDEM en ligne de commandes.
Veuillez vous reporter au site de TauDEM pour les instructions d’installation et les exécutables des systèmes 32bits et 64bits.**IMPORTANT** : installez la version TauDEM 5.0.6, la version 5.2 n’étant pas pour l’instant supportée.
La plupart des distributions Linux n’ont pas de paquets précompilés. Il vous faudra donc compiler vous-même TauDEM. TauDEM utilise MPICH2, qu’il faudra donc installer avec votre gestionnaire de paquets. TauDEM fonctionne également avec OpenMPI, que vous pouvez installer à la place de MPICH2.
Téléchargez le code source de TauDEM 5.0.6 et décompressez les fichiers dans un répertoire.
Ouvrez le fichier lienarpart.h et, après la ligne
#include "mpi.h"
ajoutez la ligne suivante
#include <stdint.h>
afin d’obtenir ceci
#include "mpi.h"
#include <stdint.h>
Sauvegardez les modifications et fermez le fichier. À présent, ouvrez le fichier tiffIO.h, trouvez la ligne #include "stdint.h" dans laquelle vous remplacerez les quotes ("") par des <>, pour obtenir ceci
#include <stdint.h>
Sauvegardez les modifications et fermez le fichier. Créez un répertoire de compilation et déplacez-vous dedans
mkdir build
cd build
Configurez votre compilation avec la commande
CXX=mpicxx cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
ensuite compilez
make
Enfin, pour installer TauDEM dans /usr/local/bin, exécutez
sudo make install