Faire le lien entre R et QGIS : Intégrer ses propres algorithmes écrits sous R dans QGIS

Partagez cet article !

Paramétrage de QGIS et de R

La présentation de QGIS n’est plus à faire ! Cette plateforme open-source est maintenant largement utilisée dans de nombreux domaines pour visualiser, exploiter et traiter des données spatialisées. Les fonctions de traitement inhérentes à QGIS en plus de toutes celles des systèmes d’information géographique associés (SAGA, GRASS…) via le module de géotraitement permettent aux utilisateurs d’avoir à leur disposition un large panel d’algorithmes pour efficacement valoriser leurs données. Néanmoins, lorsqu’aucune fonction ne répond à ses besoins (et qu’aucune nouvelle n’est disponible dans les extensions proposées), l’utilisateur doit se mettre à les programmer tout seul… Aie aie aie ! Il lui est alors possible d’écrire ses propres fonctions dans la console Python de QGIS. Si comme moi, vous préférez travailler sous le langage R, il est également envisageable de faire un lien entre R et QGIS de manière à pouvoir utiliser vos algorithmes R directement sous QGIS et de les intégrer, pourquoi pas, dans une chaîne de traitement (via le modeleur graphique) que vous auriez préalablement construite dans QGIS. Dans ce post, je vous montrerai les réglages à faire pour autoriser QGIS à échanger avec R, et je vous présenterai un exemple simple de traitement (une interpolation de données de rendement intra-parcellaires à haute résolution par un algorithme de pondération inverse à la distance) programmé en R et lancé via QGIS après y avoir chargé des données de rendement de blé provenant d’une parcelle française. Let’s go !

Ces manipulations ne sont pas très compliquées (et elles devraient fonctionner, on croise les doigts) mais nécessitent d’avoir R déjà installé sur votre machine ! A partir de QGIS 3, vous allez devoir installer l’extension “Processing R Provider” que vous trouverez classiquement dans le menu “Extension” ==> “Installer/Gérer les extensions…” pour pouvoir utiliser R dans QGIS. Une fois que vous aurez installé l’extension, vous pourrez ouvrir la boite à outils de traitements (dans l’onglet Traitement ==> 1.) si elle n’est pas déjà ouverte sur la droite de votre écran.

Figure 1. Ouverture de la boite à outils de traitements

Vous pourrez alors paramétrer les liens entre R et QGIS en cliquand sur l’icone “outil” de la boite à outils de traitements (==> le point 2. de la figure 1). Vous allez voir ainsi apparaître la fenêtre suivante (voir Figure 2). Les chemins importants à paramétrer sont le “R folder” qui va indiquer à QGIS où se trouve l’installation de R sur votre machine, et le “User library folder” qui est le dossier où sont installées les librairies R quand vous en installez de nouvelles. Il n’y a pas besoin en général de changer le “R scripts folder” qui est le répertoire où vont être stockés les scripts R que vous allez enregistrer via QGIS. Pensez bien à valider le “Use 64 bit version” si vous avez installé la version 64 bit de R. Vous pouvez ensuite valider ces paramétrage en cliquant sur “OK” en bas de la fenêtre.

NB: Il se peut que vous ayiez un message d’erreur en validant votre boite à outil, qui n’est souvent pas lié au paramétrage de R mais de GRASS. Vous pouvez avoir un message vous indiquant que un certain chemin dans le paramétrage de l’outil GRASS n’existe pas (souvent parce qu’un répertoire de ce dossier – ‘msys’ – n’existe pas). Vous pourrez trouver ce chemin en déroulant le paramétrage de GRASS qui se trouve juste au dessus de celui de R dans la figure 2. Une solution pour régler le problème est de pointer le chemin défaillant vers un répertoire existant ou tout simplement de créer un répertoire “msys” vide là où le chemin pointe.

Figure 2. Paramétrage de R dans QGIS

Après ces manipulations, si tout va bien, ça devrait marcher ! Vous pouvez aussi trouver des informations pertinentes dans cette vidéo

Le traitement à réaliser

Comme on l’a dit dans la partie introductive, on souhaite réaliser une interpolation par pondération inverse à la distance des données de rendement de blé sur la parcelle que l’on a à disposition. Je n’entrerai pas dans le détail et la paramétrisation de ce traitement mais il faut simplement comprendre que l’on va estimer le rendement à toutes les positions (dans toutes les mailles d’une grille plus précisément) où on ne dispose pas d’information de rendement. On a deux couches d’entrée: le contour de la parcelle (polygone au format vecteur) et des données ponctuelles de rendement (au format vecteur également).

Quelques règles de bonne conduite

Quand on veut rentrer du code R dans QGIS, il y a néanmoins quelques lignes de code particulières à renseigner au début du code. Ce sont des lignes qui commencent par des hashtag # pour que QGIS puisse comprendre le code R (voir plus loin). Une remarque très importante : dans R, on met souvent des commentaires avec des hashtag, il faut les enlever ici sinon QGIS ne va rien comprendre au code ! Il croira que ce sont des paramètres d’entrée… Un des problèmes assez énervant malgré tout, c’est que s’il y a une erreur dans votre code R, vous ne saurez pas d’où elle vient… d’où l’importance de s’assurer au préalable que dans R déjà, votre code fonctionne et donc que la seule erreur possible vienne de votre paramétrage R-QGIS ou des quelques lignes que vous aurez renseignées au départ…

Implémentation du code R dans QGIS

Vous pouvez créer un nouveau script R en cliquant sur l’onglet R de la boite à outils de traitement (point 3. de la figure 1.). Vous pouvez ensuite copier coller votre code dans l’éditeur de script proposé (Figure 3.)

Figure 3. Script R dans QGIS

Dans la partie introductive du code, on trouve les quatre lignes suivantes !

##Vector processing=group

##Contour=vector

##Rendement=Vector

##Output=output raster

1ère ligne ⇒ Dans QGIS, dans le groupe “scripts R” du module de géotraitement, notre script R sera trouvé dans un groupe qui s’appelle “Vector processing”. Cette première ligne sert essentiellement à classer ses scripts

2ème ligne ⇒ C’est le contour de la parcelle qui est appelé “Contour” dans le code R. On renseigne que cette couche est un vecteur avec “=vector”

3ème ligne ⇒ Ce sont les données de rendement qui sont appelées “Rendement” dans le code R. On renseigne que cette couche est un vecteur avec “=vector”

4ème ligne ⇒ La couche de sortie de l’algorithme s’appelle “Output”. Cette couche est un raster parce qu’on va créer un raster de rendement interpolé. On explicite cela avec la commande “=output raster”.

C’est la seule chose qu’il y a à changer sur son code pour qu’il fonctionne ! (Je rappelle qu’il faut enlever les commentaires avec des # de son code). Vous pourrez aussi trouver d’autres commandes sur la documentation QGIS en ligne si vous avez besoin d’autres types de données à utiliser dans QGIS. Une fois le code enregistré (j’ai donné le nom “Rendement”), vous voyez qu’il apparaît dans le groupe “Vector processing” ! (Figure 4). S’il n’apparaît pas, fermez et relancez QGIS, il y a parfois des problèmes d’actualisation.

Figure 4. Lancement du script R dans QGIS

En double cliquant sur la fonction “Rendement” que l’on vient de créer dans la boite à outils de traitement, on lance le script avec les paramètres d’entrée (“Contour” et “Rendement”) que l’on a mis en entrée du code R. Il faut par contre que les variables “Contour” et “Rendement” soient utilisées dans le code, bien évidemment… Il suffit alors simplement de charger les couches correspondantes dans QGIS (au préalable) et de les renseigner dans cette fenêtre.

Lancement du script

Et voilà les données de rendement ont été interpolées (Figure 5.) ! Je peux même maintenant appeler directement ce code R depuis le modeleur graphique pour le rajouter dans une chaîne de traitement.

Figure 5. Résultat de l’interpolation des données de rendement dans QGIS en utilisant un code R.

Faire le lien entre R et QGIS est surtout intéressant si vous avez besoin de partager des applications/traitements spécifiques à des gens qui ne maitrisent pas ce langage de programmation ou qui manque de compétence en analyse de données spatiales. Bien évidemment, si c’est juste pour votre propre utilisation, l’intérêt est moins grand (si ce n’est qu’il est plus facile de visualiser les données cartographiques générées dans QGIS). Le traitement proposé ici est très simple et n’a pas à vocation à être réutilisé directement tel quel, l’objectif était exclusivement de montrer comment faire tourner un code R dans QGIS.

Soutenez les articles de blog d’Aspexit sur TIPEEE


Un p’tit don pour continuer à proposer du contenu de qualité et à toujours partager et vulgariser les connaissances =) ?


Partagez cet article !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *