Annexe D: Syntaxe du script QGIS R

Contribution de Matteo Ghetta - financé par Scuola Superiore Sant’Anna <http://www.santannapisa.it/it/istituto/scienze-della-vita/agricultural-water-management> _

L’écriture de scripts R dans Processing est un peu délicate à cause de la syntaxe spéciale.

Un script Processing R commence par définir ses entrées et sorties, chacune précédée de caractères de hachage double (##).

Avant les entrées, le groupe dans lequel placer l’algorithme peut être spécifié. Si le groupe existe déjà, l’algorithme lui sera ajouté, sinon, le groupe sera créé. Dans l’exemple ci-dessous, le nom du groupe est Mon groupe:

##My Group=group

Entrées

Toutes les données et paramètres d’entrée doivent être spécifiés. Il existe plusieurs types d’entrées:

  • couche vecteur : ##Layer = vector

  • champ de la couche, ##F = Field Layer` (où Layer est le nom de la couche en entrée)

  • raster : ##r = raster

  • table : ##t = table

  • nombre : ##Num = number

  • chaîne de caractères : ##Str = string

  • booléen : ##Bol = boolean

  • éléments dans un menu déroulant. Les éléments doivent être séparés par des points-virgules ;: ##type=selection point;lines;point+lines

Sorties

Comme pour les entrées, chaque sortie doit être définie au début du script:

  • vecteur : ##sortie= output vector

  • raster : ##sortie= output raster

  • table : ##sortie= output table

  • graphiques: ##output_plots_to_html (##showplots dans les versions antérieures)

  • Pour afficher la sortie R dans la Visionneuse de résultats, placez > devant la commande dont vous souhaitez afficher la sortie.

Résumé de la syntaxe des scripts R QGIS

Un certain nombre de types de paramètres d’entrée et de sortie sont proposés.

Type paramètres en entrée

Paramètre

Exemple de Syntaxe

Objets renvoyés

vector

Couche = vector

sf object (ou objet SpatialDataFrame, si ##load_vector_using_rgdal est spécifié)

vector point

Couche = vector point

sf object (ou objet SpatialDataFrame, si ##load_vector_using_rgdal est spécifié)

vector line

Couche = vector line

sf object (ou objet SpatialDataFrame, si ##load_vector_using_rgdal est spécifié)

vector polygon

Couche = vector polygon

sf object (ou objet SpatialPolygonsDataFrame, si ##load_vector_using_rgdal est utilisé)

multiple vector

Couches = multiple vector

sf object (ou objets SpatialDataFrame si ##load_vector_using_rgdal est spécifié)

table

Couche = table

Conversion des données depuis le format csv, objet par défaut de la fonction read.csv.

field

Champ = Field Layer

Nom du champ sélectionné, ex: "Area".

raster

Couche = raster

Objet RasterBrick, objet par défaut du paquet rgdal.

multiple raster

Couches = multiple raster

Objets RasterBrick, objet par défaut du paquet rgdal.

number

N = number

Entier ou nombre à virgule flottante choisi.

string

S = string

Chaîne de caractères ajoutée dans la boîte.

longstring

LS = longstring

Chaîne de caractères ajoutée à la boîte, peut être plus longue que la chaîne normale.

selection

S = selection first;second;third

Chaîne de caractères de l’entrée sélectionnée, choisie dans le menu déroulant.

crs

C = crs

chaîne du CRS résultant choisi, au format: "EPSG:4326"

extent

E = extent

Objet d’emprise du paquet raster, vous pouvez en extraire les valeurs avec E@xmin.

point

P = point

Lorsque vous cliquez sur la carte, vous avez les coordonnées du point.

file

F = file

Chemin du fichier sélectionné, par exemple « /home/matteo/file.txt ».

folder

F = folder

Chemin du dossier sélectionné, par exemple « /home/matteo/Downloads ».

Un paramètre peut être FACULTATIF, ce qui signifie qu’il peut être ignoré.

Afin de définir une entrée comme facultative, vous ajoutez la chaîne facultative avant l’entrée, par exemple:

##Layer = vector
##Field1 = Field Layer
##Field2 = optional Field Layer

Types de paramètres de sortie

Paramètre

Exemple de Syntaxe

vector

Sortie = output vector

raster

Sortie = output raster

table

Sortie = output table

file

Sortie = output file

Note

Vous pouvez enregistrer les graphiques en tant que png à partir de la visionneuse de résultats du processing, ou vous pouvez choisir d’enregistrer le graphique directement à partir de l’interface de l’algorithme.

Corps du script

Le corps du script suit la syntaxe R et le panneau Log peut vous aider en cas de problème avec votre script.

N’oubliez pas que vous devez charger toutes les bibliothèques supplémentaires dans le script

library(sp)

Exemples

Exemple avec sortie vecteur

Prenons un algorithme de la collection de scripts en ligne qui créé des points aléatoires depuis l’emprise d’une couche en entrée:

##Point pattern analysis=group
##Layer=vector polygon
##Size=number 10
##Output=output vector
library(sp)
spatpoly = as(Layer, "Spatial")
pts=spsample(spatpoly,Size,type="random")
spdf=SpatialPointsDataFrame(pts, as.data.frame(pts))
Output=st_as_sf(spdf)

Explication (par ligne dans le script):

  1. Point pattern analysis est le groupe de l’algorithme.

  2. Layer est la couche vecteur en entrée.

  3. Size est un paramètre numérique avec 10 comme valeur par défaut

  4. Output est la couche vecteur qui sera créée par l’algorithme.

  5. library(sp) charge la bibliothèque sp

  6. spatpoly = as(Layer, "Spatial") se traduit par un objet sp

  7. Appelez la fonction spsample de la bibliothèque sp et exécutez-la en utilisant l’entrée définie ci-dessus (Layer et Size).

  8. Créez un objet SpatialPointsDataFrame à l’aide de la fonction SpatialPointsDataFrame

  9. Créez la couche vectorielle de sortie à l’aide de la fonction st_as_sf

C’est ça! Exécutez simplement l’algorithme avec une couche vectorielle que vous avez dans la légende QGIS, choisissez le nombre de points aléatoires. La couche résultante sera ajoutée à votre carte.

Exemple avec sortie raster

Le script suivant effectuera un krigeage ordinaire de base pour créer une carte raster de valeurs interpolées à partir d’un champ spécifié de la couche de vecteur de point d’entrée en utilisant la fonction autoKrige du package automap R. Il va d’abord calculer le modèle de krigeage puis créer un raster. Le raster est créé avec la fonction raster du package raster R

##Basic statistics=group
##Layer=vector point
##Field=Field Layer
##Output=output raster
##load_vector_using_rgdal
require("automap")
require("sp")
require("raster")
table=as.data.frame(Layer)
coordinates(table)= ~coords.x1+coords.x2
c = Layer[[Field]]
kriging_result = autoKrige(c~1, table)
prediction = raster(kriging_result$krige_output)
Output<-prediction

En utilisant ##load_vector_using_rgdal, la couche vectorielle d’entrée sera rendue disponible en tant qu’objets SpatialDataFrame, nous évitons donc d’avoir à la traduire à partir d’un objet sf.

Exemple avec une sortie table

Éditons l’algorithme Summary Statistics de manière à ce que la sortie soit un fichier de table (csv).

Le corps du script est le suivant:

##Basic statistics=group
##Layer=vector
##Field=Field Layer
##Stat=Output table
Summary_statistics<-data.frame(rbind(
    sum(Layer[[Field]]),
    length(Layer[[Field]]),
    length(unique(Layer[[Field]])),
    min(Layer[[Field]]),
    max(Layer[[Field]]),
    max(Layer[[Field]])-min(Layer[[Field]]),
    mean(Layer[[Field]]),
    median(Layer[[Field]]),
    sd(Layer[[Field]])),
  row.names=c("Sum:","Count:","Unique values:","Minimum value:","Maximum value:","Range:","Mean value:","Median value:","Standard deviation:"))
colnames(Summary_statistics)<-c(Field)
Stat<-Summary_statistics

La troisième ligne indique le Champ vecteur et la quatrième ligne indique à l’algorithme que la sortie doit être une table.

La dernière ligne utilisera l’objet Stat créé dans le script et le convertira en une table csv.

Exemple de sortie de la console d’exécution de R

Nous pouvons utiliser l’exemple précédent et au lieu de créer un tableau, imprimer le résultat dans le Visualisateur de resultat

##Basic statistics=group
##Layer=vector
##Field=Field Layer
Summary_statistics<-data.frame(rbind(
sum(Layer[[Field]]),
length(Layer[[Field]]),
length(unique(Layer[[Field]])),
min(Layer[[Field]]),
max(Layer[[Field]]),
max(Layer[[Field]])-min(Layer[[Field]]),
mean(Layer[[Field]]),
median(Layer[[Field]]),
sd(Layer[[Field]])),row.names=c("Sum:","Count:","Unique values:","Minimum value:","Maximum value:","Range:","Mean value:","Median value:","Standard deviation:"))
colnames(Summary_statistics)<-c(Field)
>Summary_statistics

Le script est exactement le même que celui ci-dessus, sauf pour deux modifications:

  1. aucune sortie spécifiée (la quatrième ligne a été supprimée)

  2. la dernière ligne commence par >, indiquant au Processing de rendre l’objet disponible via la visionneuse de résultats

Exemple avec un graphique

Pour créer des graphiques, vous devez utiliser le paramètre ##output_plots_to_html comme dans le script suivant

##Basic statistics=group
##Layer=vector
##Field=Field Layer
##output_plots_to_html
####output_plots_to_html
qqnorm(Layer[[Field]])
qqline(Layer[[Field]])

Le script utilise un champ (Champ) d’une couche vectorielle (Couche) en entrée et crée un QQ Plot (pour tester la normalité de la distribution).

Le graphique est automatiquement ajouté au processing Visualiseur de résultats.