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 |
field |
Champ = Field Layer |
Nom du champ sélectionné, ex: |
raster |
Couche = raster |
Objet RasterBrick, objet par défaut du paquet |
multiple raster |
Couches = multiple raster |
Objets RasterBrick, objet par défaut du paquet |
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: |
extent |
E = extent |
Objet d’emprise du paquet |
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):
Point pattern analysis
est le groupe de l’algorithme.Layer
est la couche vecteur en entrée.Size
est un paramètre numérique avec 10 comme valeur par défautOutput
est la couche vecteur qui sera créée par l’algorithme.library(sp)
charge la bibliothèque spspatpoly = as(Layer, "Spatial")
se traduit par un objet spAppelez la fonction
spsample
de la bibliothèquesp
et exécutez-la en utilisant l’entrée définie ci-dessus (Layer
etSize
).Créez un objet SpatialPointsDataFrame à l’aide de la fonction
SpatialPointsDataFrame
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:
aucune sortie spécifiée (la quatrième ligne a été supprimée)
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.