Wichtig
Übersetzen ist eine Gemeinschaftsleistung Sie können mitmachen. Diese Seite ist aktuell zu 100.00% übersetzt.
32.4. Anhang D: QGIS R Skriptsyntax
Beigetragen von Matteo Ghetta - gefördert von der Scuola Superiore Sant’Anna <https://www.santannapisa.it/en/istituto/scienze-della-vita/istituto-di-scienze-della-vita>`_
Das Schreiben von R-Skripten in Processing ist wegen seiner speziellen Syntax etwas knifflig.
Ein Verarbeitungsskript für die R beginnt mit der Definition seiner Eingaben und Ausgaben, denen jeweils doppelte Hashzeichen (##
) vorangestellt sind.
Vor den Eingaben kann die Gruppe, in der der Algorithmus platziert werden soll, angegeben werden. Wenn die Gruppe bereits existiert, wird der Algorithmus zu ihr hinzugefügt; ist dies nicht der Fall, wird die Gruppe erstellt. Im folgenden Beispiel lautet der Name der Gruppe Meine Gruppe:
##Meine Gruppe=group
32.4.1. Eingaben
Alle Eingabedaten und Parameter müssen angegeben werden. Es gibt verschiedene Arten von Eingaben:
Vektor:
##Layer = vector
Vektorfeld:
##F = Field Layer
(wobei Layer der Name eines Eingabe-Vektorayers ist, zu der das Feld gehört))Raster:
##r = raster
Tabelle:
##t = table
Zahl:
##Num = number
String:
##Str = string
Boolean:
##Bol = boolean
Elemente in einem Dropdown-Menü. Die Elemente müssen durch Semikolons
;
getrennt werden:##type=selection point;lines;point+lines
32.4.2. Ausgaben
Genau wie die Eingaben müssen alle Ausgaben am Beginn des Skriptes definiert werden:
Vektor:
##output= output vector
Raster:
##output= output raster
Tabelle:
##output= output table
Diagramme:
##output_plots_to_html
(##showplots in früheren Versionen)Um die R-Ausgabe im Ergebnis-Viewer anzuzeigen, schreiben Sie
>
vor den Befehl, dessen Ausgabe Sie anzeigen möchten.
32.4.3. Syntaxzusammenfassung für QGIS R-Skripte
Es wird eine Reihe von Eingabe- und Ausgangsparametertypen angeboten.
32.4.3.1. Typen von Eingabeparametern
Parameter |
Syntax-Beispiel |
Rückgabeobjekte |
---|---|---|
Vektor |
Layer = Vektor |
sf-Objekt (oder SpatialDataFrame-Objekt, wenn ##load_vector_using_rgdal angegeben ist) |
vector point |
Layer = Vektor Punkt |
sf-Objekt (oder SpatialDataFrame-Objekt, wenn ##load_vector_using_rgdal angegeben ist) |
Vektor Linie |
Layer = Vektor Linie |
sf-Objekt (oder SpatialDataFrame-Objekt, wenn ##load_vector_using_rgdal angegeben ist) |
Vektor Polygon |
Layer = Vektor Polygon |
sf-Objekt (oder SpatialDataFrame-Objekt, wenn ##load_vector_using_rgdal genutzt wird) |
Vielfach Vektor |
Layer = Vielfach Vektor |
sf-Objekt (oder SpatialDataFrame-Objekt, wenn ##load_vector_using_rgdal angegeben ist) |
Tabelle |
Layer = Tabelle |
Daten-Tabellen-Umwandlung von csv, voreingestelltes Objekt der |
Feld |
Feld = Feld Layer |
Name des ausgewählten Feldes, z.B. |
raster |
Layer = Raster |
RasterBrick-Objekt, voreingestelltes Objekt des |
Vielfach Raster |
Layer = Vielfach Raster |
RasterBrick-Objekt, voreingestelltes Objekt des |
Zahl |
N = Zahl |
gewählte Ganzzahl oder Fließkommazahl |
String |
S = String |
in der Box eingefügter String |
Longstring |
LS = Longstring |
in der Box eingefügter String, kann länger als ein normaler String sein |
Auswahl |
S = Auswahl erste;zweite;third;dritte |
String des im Dropdown-Menü gewählten Objektes |
crs |
C = CRS/KBS |
String des sich ergebenen KBS im Format: |
extent |
E = Ausdehnung |
Ausdehnungsobjekt des |
Punkt |
P = Punkt |
beim Klicken auf die Karte erhält man die Koordinaten des Punktes |
Datei |
F = Datei |
Pfad der gewählten Datei, z.B. „/home/matteo/file.txt“ |
folder |
F = Ordner |
Pfad des gewählten Ordners, z.B „/home/matteo/Downloads“ |
Ein Parameter kann OPTIONAL ein, was bedeutet, dass er ignoriert werden kann.
Um eine Eingabe als optional festzulegen, fügen Sie den String optional
vor die Eingabe ein, z.B.:
##Layer = vector
##Field1 = Field Layer
##Field2 = optional Field Layer
32.4.3.2. Arten von Ausgabeparametern
Parameter |
Syntax-Beispiel |
---|---|
Vektor |
Output = Ausgabe-Vektor |
raster |
Output = Ausgabe-Raster |
Tabelle |
Output = Ausgabe-Tabelle |
Datei |
Output = Ausgabe-Datei |
Bemerkung
Sie können Diagramme als png
aus dem Prozess-Ergebnis-Viewer oder direkt über die Algorithmus-Schnittstelle speichern.
32.4.3.3. Hauptteil des Skripts
Der Skripttext folgt der R-Syntax, und der Bereich „Protokoll“ kann Helfen Sie Ihnen, wenn mit Ihrem Skript etwas nicht stimmt.
Denken Sie daran, dass Sie im Skript alle zusätzlichen Bibliotheken laden müssen:
library(sp)
32.4.4. Beispiele
32.4.4.1. Beispiel mit Vektorausgabe
Sehen wir uns einen Algorithmus aus der Onlinesammlung an, der zufällige Punkte innerhalb der Ausdehnung eines Eingabelayers erstellt:
##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)
Erklärung (pro Zeile im Skript):
Point pattern analysis
ist die Gruppe des AlgorithmusLayer
ist der EingabevektorlayerSize
ist ein numerischer Parameter mit dem Standardwert 10Output
ist der Vektorlayer der vom Algorithmus erstellt wirdlibrary(sp)
lädt die sp-Bibliothekspatpoly = as(Layer, "Spatial")
übersetzen in ein sp-ObjektAufruf der
spsample
-Funktion dersp
-Bibliothek und Ausführung unter Verwendung der oben definierten Eingabe (Layer
undSize
)Erstellen eines SpatialPointsDataFrame-Objekts unter Nutzung der
SpatialPointsDataFrame
-FunktionErstellen des Ausgabevektor-Layers mit der
st_as_sf
-Funktion
Das wars! Führen Sie einfach den Algorithmus mit einem Vektorlayer aus, den Sie in der QGIS-Legende haben. Wählen Sie die Anzahl der zufälligen Punkte. Der Ergebnis-Layer wird der Karte hinzugefügt.
32.4.4.2. Beispiel mit Rasterausgabe
Das folgende Skript führt mit der ``autoKrige`-Funktion des R-Pakets ein normales Kriging aus, um eine Raster-Karte mit interpolierten Werten aus einem angegebenen Feld des Eingabe-Punkt-Vektorlayers zu erstellen. Es wird zuerst das Kriging-Modell berechnet und dann ein Raster. erstellt Das Raster wird mit der ``raster`-Funktion des R-Raster-Pakets erstellt:
##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
Durch die Verwendung von ##load_vector_using_rgdal
, wird der Eingabevektorlayer als SpatialDataFrame
-Objekt zur Verfügung gestellt. So vermeiden wir es, ihn aus einem sf`-Objekt übersetzen zu müssen.
32.4.4.3. Beispiel mit Tabellenausgabe
Lassen Sie uns den Algorithmus Summary Statistics
bearbeiten, so dass als Ausgabe eine Tabelle (csv) erzeugt wird.
Der Hauptteil des Skriptes sieht wie folgt aus:
##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
Die dritte Zeile gibt als Eingabe Vektor Feld vor. In der vierten Zeile wird die Ausgabe des Algorithmus als Tabelle festgelegt.
In der letzten Zeile wird das im Skript erstellte Objekt Stat
in eine csv
Tabelle umgewandelt.
32.4.4.4. Beispiel mit Konsolenausgabe
Wir können das vorherige Beispiel verwenden; aber anstatt eine Tabelle zu erstellen, wird das Ergebnis im Ergebnis-Viewer ausgedruckt:
##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
Das Skript ist bis auf zwei Bearbeitungen genau das gleiche wie das obige:
keine Ausgabe-Datei angegeben (die vierte Zeile wurde entfernt)
die letzte Zeile beginnt mit ``>` und weist Processing an, das Objekt über den Ergebnis-Viewer verfügbar ist
32.4.4.5. Beispiel mit Diagramm
Um Diagramme zu erstellen, müssen Sie den ##output_plots_to_html
-Parameter wie im folgenden Skript verwenden:
##Basic statistics=group
##Layer=vector
##Field=Field Layer
##output_plots_to_html
####output_plots_to_html
qqnorm(Layer[[Field]])
qqline(Layer[[Field]])
Das Skript verwendet ein Feld (Field
) eines Vektorlayers (Layer
) als Input und erstellt ein QQ-Diagramm (um die Normalität der Verteilung zu testen).
Der Plot wird automatisch zum Prozess-Ergebnis-Viewer hinzugefügt.