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 |
fält |
Fält = fältskikt |
namnet på det valda fältet, t.ex. |
raster |
Lager = raster |
RasterBrick-objekt, standardobjekt för |
flera raster |
Lager = flera raster |
RasterBrick-objekt, standardobjekt i |
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: |
omfattning |
E = omfattning |
Extent-objekt i paketet |
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):
Punktmönsteranalys
är gruppen för algoritmenLager
är det ingående vektor-lagretSize
är en numerisk parameter med ett standardvärde på 10Output
är det vektor-lager som kommer att skapas av algoritmenlibrary(sp)`
laddar sp-biblioteketspatpoly = as(Layer, "Spatial")
översätt till ett sp-objektAnropa funktionen
spsample
i biblioteketsp
och kör den med de indata som definierats ovan (Layer
ochSize
)Skapa ett SpatialPointsDataFrame-objekt med hjälp av funktionen
SpatialPointsDataFrame
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:
ingen utdata specificerad (den fjärde raden har tagits bort)
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.