17.33. Nutzung von R-Skripten in der Prozessierung
Modul erstellt von Matteo Ghetta - finanziert von der Scuola Superiore Sant’Anna
Die Verarbeitungsumgebung (mit der Erweiterung Processing R Provider
) macht das Schreiben und Ausführen von R Skripten innerhalb von QGIS möglich.
Warnung
R muss auf Ihrem Rechner installiert und die PATH-Variable korrekt gesetzt sein. Die Verarbeitungsumgebung ruft die externen R Packete nur auf. Sie kann sie nicht selbst installieren. Stellen Sie daher sicher, dass die externen Pakete direkt in R installiert werden. Im Benutzerhandbuch Kapitel findet man dazu weitere Informationen.
Bemerkung
Wenn es Probleme mit Paketen gibt, fehlen unter Umständen für die Verarbeitung erforderliche Pakete wie sp
, rgdal
und raster
.
17.33.1. Hinzufügen von Skripten
Das Hinzufügen eines Skriptes ist einfach. Der einfachste Weg ist das Öffnen der Werkzeugkiste. In der Werkzeugleiste der Werkzeugkiste wählt man dann processing/rscripts
) ablegen. Sobald es dort abgelegt wurde, wird es zur Bearbeitung in der Werkzeugkiste verfügbar. Man klickt dazu mit der rechten Maustaste auf den Skriptnamen und wählt ).
Bemerkung
Wenn Sie R nicht in der Verarbeitungsumgebung finden, müssen Sie es unter
aktivieren.Es öffnet sich ein Fenster R Script Editor. Hier müssen einige Parameter definiert werden, bevor das Skript an sich erstellt werden kann.
17.33.2. Erstellung von Plots
In dieser Anleitung erstellen wir einen Box-Plot für ein Feld eines Vektorlayers.
Öffnen das QGIS Projekt r_intro.qgs
im Ordner exercise_data/processing/r_intro/
.
Skript Parameter
Öffnen Sie den Editor und beginnen mit dem Schreiben am Anfang.
Sie müssen einige Parameter vor dem Hauptteil des Skripts festlegen:
Der Name der Gruppe (plots in diesem Fall) in der Sie Ihr Skript stellen wollen (wenn die Gruppe nicht existiert, wird sie erstellt):
##plots=group
Sie finden Ihr Skript in der plots R Gruppe in den Verarbeitungswerkzeugen.
Sie müssen der Verarbeitung mitteilen, dass Sie ein Plot (in diesem Beispiel) darstellen möchten:
##showplots
Sie erhalten dann in der Ergebnisanzeige einen Link zum Plot (das kann unter
und mit ein- oder ausgeschaltet werden).Sie müssen der Verarbeitung auch die Eingabedaten vorgeben. In diesem Beispiel wollen wir ein Plot für ein Feld eines Vektorlayers erstellen:
##Layer=vector
Die Verarbeitung weiß nun, dass die Eingabe eine Vektordatei ist. Der Name Layer ist nicht wichtig, entscheidend ist der Parameter vector.
Als Letztes müssen Sie das Eingabefeld des Vektorlayers vorgeben (unter Nutzung des Namens, den Sie oben vergeben haben - Layer):
##X=Field Layer
Die Verarbeitung weiß nun, dass Sie ein Feld Layer benötigen und es X nennen.
Man kann den Namen des Skriptes auch mit Hilfe von
name
definieren:##My box plot script=name
Wenn nichts vorgegeben ist, wird der Dateiname als Name des Skriptes verwendet.
Skript Hauptteil
Nachdem wir den Kopf des Skriptes festgelegt haben, können wir die Funktionalität hinzufügen:
boxplot(Layer[[X]])
boxplot ist der Name der R Funktion. Der Parameter Layer ist der Name, den wir für den Eingabedatensatz vorgegeben haben. X ist der vorgegebene Name des Feldes im Datensatz.
Warnung
Der Parameter X muss innerhalb doppelter eckiger Klammern stehen ([[]]
).
Das fertige Skript sollte wie folgt aussehen:
##Vector processing=group
##showplots
##Layer=vector
##X=Field Layer
boxplot(Layer[[X]])
Speichern Sie das Skript im voreingestellten Pfad entsprechend des Vorschlags der Verarbeitung (processing/rscripts). Wenn Sie name
im Kopf des Skriptes nicht definiert haben, wird das Skript in der Verarbeitungsumgebung mit dem Dateinamen bezeichnet.
Bemerkung
Sie können das Skript an einem beliebigen Ort speichern. Die Verarbeitung übernimmt das Skript dann nicht automatisch in die Verarbeitungsumgebung und es muss manuell hinzugefügt werden.
Starten Sie jetzt das Skript durch Drücken auf die ausführen Schaltfläche im Editorfenster:
Nutzen Sie nach dem Schließen des Editorfensters die Textbox der Verarbeitung, um Ihr Skript zu finden:
Sie können nun die erforderlichen Parameter im Fenster des Verarbeitungsalgorithmus eintragen:
wählen Sie sample_points als Layer
wählen Sie value als X Feld
Klicken Sie auf Starte.
Die Ergebnisanzeige sollte sich automatisch öffnen. Falls das nicht geschieht, klicken Sie auf
.Wenn Sie auf den Link in der Ergebnisanzeige klicken, sehen Sie das Folgende:
Bemerkung
Sie können das Bild nun durch Rechtsklick auf den Plot kopieren und speichern.
17.33.3. Erstellen eines Vektorlayers
Sie können außerdem einen Vektorlayer erstellen und ihn automatisch in QGIS laden.
The following example has been taken from the Random sampling grid
script that can be found in the online collection of R scripts
(the scripts in this online collection can be found in
https://github.com/qgis/QGIS-Processing/tree/master/rscripts).
Das Ziel dieser Übung ist die Erstellung eines zufälligen Punktlayers mit Hilfe der spsample
Funktion aus dem sp
Paket. Dabei soll die Ausdehnung über einen Eingabevektorlayer begrenzt werden.
Skript Parameter
Wie vorhin müssen wir zuerst einige Parameter oberhalb des Hauptteiles des Skriptes vorgeben:
Geben Sie den Namen der Gruppe vor, in die das Skript soll. In diesem Fall ist das Point pattern analysis:
##Point pattern analysis=group
Define an input parameter (a vector layer) that will constrain the placement of the random points:
##Layer=vector
Geben Sie einen Eingabeparameter für die Anzahl der zu erzeugenden Punkte vor (
Size
, der Vorgabewert ist10
):##Size=number 10
Bemerkung
Da ein Vorgabewert (
10
) vorhanden ist, kann der Nutzer den Parameter so belassen oder einen eigenen Wert eingeben.Geben Sie vor, dass ein Ausgabevektorlayer erzeugt wird (bezeichnet mit
Output
):##Output=output vector
Skript Hauptteil
Sie können jetzt den Hauptteil der Funktion hinzufügen:
Verwenden Sie die Funktion
spsample
:pts=spsample(Layer, Size, type="random")
Die Funktion verwendet den Layer, um die Platzierung der Punkte zu beschränken (wenn der Layer eine Linie ist, müssen die Punkte auf der Linie liegen; wenn es ein Polygon ist, müssen die Punkte innerhalb des Polygons liegen). Die Anzahl der Punkt entspricht der Vorgabe im Parameter Size. Das Stichprobenverfahren ist random.
Erstellen Sie die Ausgabe (der Parameter
Output
):Output=SpatialPointsDataFrame(pts, as.data.frame(pts))
Das fertige Skript sollte wie folgt aussehen:
##Point pattern analysis=group
##Layer=vector
##Size=number 10
##Output=output vector
pts=spsample(Layer, Size, type="random")
Output=SpatialPointsDataFrame(pts, as.data.frame(pts))
Speichern Sie es und klicken Sie auf die Schaltfläche zum Starten.
Geben Sie in dem neu geöffneten Fenster die richtigen Parameter ein:
und klicken Sie auf Starte.
Der Ergebnislayer wird im Inhaltsverzeichnis eingefügt und die Punkte werden im Kartenfenster angezeigt:
17.33.4. Textausgabe und grafische Ausgabe mit der R - Syntax
Die Verarbeitung (mit dem Processing R Provider plugin
) nutzt eine spezielle Syntax, um die Ergebnisse aus R zu erhalten:
>
vor einem Kommando, wie in>lillie.test(Layer[[Field]])
bedeutet, dass das Ergebnis an die R Ausgaeb gesendet wird (Ergebnisanzeige)+
nach einem Plot erlaubt sich überlagernde Plots. Zum Beispielplot(Layer[[X]], Layer[[Y]]) + abline(h=mean(Layer[[X]]))