Viktigt

Översättning är en gemenskapsinsats du kan gå med i. Den här sidan är för närvarande översatt till 100.00%.

26.2. Bilaga D: Syntax för QGIS R-skript

Bidrag från Matteo Ghetta - finansierat av Scuola Superiore Sant’Anna

Att skriva R-skript i Processing är lite knepigt på grund av den speciella syntaxen.

Ett Processing R-skript börjar med att definiera dess Inputs och Outputs, som var och en föregås av dubbla hash-tecken (##).

Före inmatningarna kan den grupp som algoritmen ska placeras i anges. Om gruppen redan finns kommer algoritmen att läggas till i den, om inte kommer gruppen att skapas. I exemplet nedan är gruppens namn Min grupp:

##Min grupp=grupp

26.2.1. Inmatningar

Alla indata och parametrar måste specificeras. Det finns flera olika typer av indata:

  • vektor: ##Lager = vektor

  • vektorfält: ##F = fältskikt (där skikt är namnet på ett ingångsvektorskikt som fältet tillhör)

  • raster: ##r = raster

  • bord: ##t = tabell

  • nummer: ##Num = nummer

  • sträng: ##Str = sträng

  • boolean: ##Bol = boolean

  • element i en rullgardinsmeny. Objekten måste separeras med semikolon ;: ##type=valpunkt;linjer;punkt+linjer

26.2.2. Utgångar

På samma sätt som för inmatningarna måste varje utmatning definieras i början av skriptet:

  • vektor: ##output= utmatningsvektor

  • raster: ##output= utmatning raster

  • tabell: ##output= utmatningstabell

  • plots: ##output_plots_to_html (##showplots i tidigare versioner)

  • Om du vill visa R-utdata i Result Viewer sätter du > framför det kommando vars utdata du vill visa.

26.2.3. Syntaxsammanfattning för QGIS R-skript

Det finns ett antal olika typer av parametrar för in- och utmatning.

26.2.3.1. Typer av inmatningsparametrar

Parameter

Exempel på syntax

Återlämnande av objekt

vektor

Lager = vektor

sf-objekt (eller SpatialDataFrame-objekt, om ##load_vector_using_rgdal anges)

vektorpunkt

Lager = vektorpunkt

sf-objekt (eller SpatialDataFrame-objekt, om ##load_vector_using_rgdal anges)

vektorlinje

Lager = vektorlinje

sf-objekt (eller SpatialDataFrame-objekt, om ##load_vector_using_rgdal anges)

vektorpolygon

Lager = vektorpolygon

sf-objekt (eller SpatialPolygonsDataFrame-objekt, om ##load_vector_using_rgdal används)

multipel vektor

Lager = flera vektorer

sf-objekt (eller SpatialDataFrame-objekt om ##load_vector_using_rgdal har angetts)

tabell

Lager = bord

dataframe-konvertering från csv, standardobjekt för funktionen read.csv

fält

Fält = fältskikt

namnet på det valda fältet, t.ex. "Area"

raster

Lager = raster

RasterBrick-objekt, standardobjekt för raster-paketet

flera raster

Lager = flera raster

RasterBrick-objekt, standardobjekt i raster-paketet

nummer

N = antal

heltal eller flytande tal vald

sträng

S = sträng

sträng tillagd i rutan

långsträng

LS = långsträng

sträng som läggs till i lådan, kan vara längre än den normala strängen

urval

S = urval första;andra;tredje

sträng för det valda objektet som valts i rullgardinsmenyn

crs

C = crs

sträng av den resulterande CRS som valts, i formatet: "EPSG:4326"

omfattning

E = omfattning

Extent-objekt i paketet raster, du kan extrahera värden som E@xmin

poäng

P = punkt

när du klickar på kartan har du koordinaterna för punkten

fil

F = fil

sökvägen till den valda filen, t.ex. ”/home/matteo/file.txt”

folder

F = mapp

sökvägen till den valda mappen, t.ex. ”/home/matteo/Downloads”

En parameter kan vara OPTIONAL, vilket innebär att den kan ignoreras.

För att ange att en inmatning är valfri lägger du till strängen optional före inmatningen, t.ex:

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

26.2.3.2. Typer av utgångsparametrar

Parameter

Exempel på syntax

vektor

Utgång = utgångsvektor

raster

Output = utmatning av raster

tabell

Output = utmatningstabell

fil

Output = utdatafil

Observera

Du kan spara plottar som png från Processing Result Viewer, eller så kan du välja att spara plotten direkt från algoritmens gränssnitt.

26.2.3.3. Skriptets kropp

Skriptet följer R-syntaxen och panelen Log kan hjälpa dig om det är något fel på ditt skript.

Kom ihåg att du måste ladda alla ytterligare bibliotek i skriptet:

library(sp)

26.2.4. Exempel

26.2.4.1. Exempel med vektorutgång

Låt oss ta en algoritm från online-samlingen som skapar slumpmässiga punkter från omfattningen av ett ingångsskikt:

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

Förklaring (per rad i skriptet):

  1. Punktmönsteranalys är gruppen för algoritmen

  2. Lager är det ingående vektor-lagret

  3. Size är en numerisk parameter med ett standardvärde på 10

  4. Output är det vektor-lager som kommer att skapas av algoritmen

  5. library(sp)` laddar sp-biblioteket

  6. spatpoly = as(Layer, "Spatial") översätt till ett sp-objekt

  7. Anropa funktionen spsample i biblioteket sp och kör den med de indata som definierats ovan (Layer och Size)

  8. Skapa ett SpatialPointsDataFrame-objekt med hjälp av funktionen SpatialPointsDataFrame

  9. Skapa utmatningsvektorlagret med hjälp av funktionen st_as_sf

Så där ja! Kör bara algoritmen med ett vektorlager som du har i QGIS Legend, välj antalet slumpmässiga punkter. Det resulterande lagret kommer att läggas till på din karta.

26.2.4.2. Exempel med rasterutmatning

Följande skript utför grundläggande vanlig kriging för att skapa en rasterkarta med interpolerade värden från ett angivet fält i indatapunktens vektorlager med hjälp av funktionen autoKrige i R-paketet automap. Först beräknas krigingmodellen och sedan skapas ett raster. Rastret skapas med funktionen raster i R-paketet raster:

##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

Genom att använda ##load_vector_using_rgdal kommer ingångsvektorlagret att göras tillgängligt som ett SpatialDataFrame-objekt, så vi undviker att behöva översätta det från ett sf-objekt.

26.2.4.3. Exempel med tabellutdata

Låt oss redigera algoritmen Summary Statistics så att utdata blir en tabellfil (csv).

Skriptets huvuddel är följande:

##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

Den tredje raden anger Vector Field i indata och den fjärde raden talar om för algoritmen att utdata ska vara en tabell.

Den sista raden tar Stat-objektet som skapats i skriptet och konverterar det till en csv-tabell.

26.2.4.4. Exempel med konsolutmatning

Vi kan använda det tidigare exemplet och istället för att skapa en tabell skriva ut resultatet i Result Viewer:

##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

Manuset är exakt detsamma som det ovan, med undantag för två ändringar:

  1. ingen utdata specificerad (den fjärde raden har tagits bort)

  2. den sista raden börjar med >, vilket säger till Processing att göra objektet tillgängligt via resultatvisaren

26.2.4.5. Exempel med diagram

För att skapa plottar måste du använda parametern ##output_plots_to_html som i följande skript:

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

Skriptet använder ett fält (Field) i ett vektorlager (Layer) som indata och skapar en QQ Plot (för att testa normaliteten i fördelningen).

Plotten läggs automatiskt till i Processing Result Viewer.