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 read.csv Funktion

Feld

Feld = Feld Layer

Name des ausgewählten Feldes, z.B. "Fläche"

raster

Layer = Raster

RasterBrick-Objekt, voreingestelltes Objekt des Raster Pakets

Vielfach Raster

Layer = Vielfach Raster

RasterBrick-Objekt, voreingestelltes Objekt des Raster Pakets

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: "EPSG:4326"

extent

E = Ausdehnung

Ausdehnungsobjekt des raster Pakets, man kann Werte als E@xmin` extrahieren

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):

  1. Point pattern analysis ist die Gruppe des Algorithmus

  2. Layer ist der Eingabevektorlayer

  3. Size ist ein numerischer Parameter mit dem Standardwert 10

  4. Output ist der Vektorlayer der vom Algorithmus erstellt wird

  5. library(sp) lädt die sp-Bibliothek

  6. spatpoly = as(Layer, "Spatial") übersetzen in ein sp-Objekt

  7. Aufruf der spsample-Funktion der sp-Bibliothek und Ausführung unter Verwendung der oben definierten Eingabe (Layer und Size)

  8. Erstellen eines SpatialPointsDataFrame-Objekts unter Nutzung der SpatialPointsDataFrame-Funktion

  9. Erstellen 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:

  1. keine Ausgabe-Datei angegeben (die vierte Zeile wurde entfernt)

  2. 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.