28.4. Apêndice D: sintaxe de script QGIS R
Contributed by Matteo Ghetta - funded by Scuola Superiore Sant’Anna
Escrever scripts R scripts em Processamento é um pouco complicado em função da sintaxe específica.
Um script de Processamento R começa com a definição de suas Entradas e Saídas, cada uma precedida de caracteres tralha duplos (##).
Pode-se especificar o grupo para colocar o algoritmo antes das entradas. Se o grupo já existe, o algoritmo será adicionado a ele e, se não, o grupo será criado. No exemplo abaixo, o nome do grupo é “Meu grupo”:
##Meu Grupo=grupo
28.4.1. Entradas
Todos os dados de entrada e parâmetros devem ser especificados. Existem vários tipos de entradas:
vetor:
##Camada = vetorvector field:
##F = Field Layer(where Layer is the name of an input vector layer the field belongs to)raster:
##r = rastertabela:
##t = tabelanúmero:
##Num = númerostring:
##Str = stringboolean:
##Bol = booleanelementos em um menu dropdown. Os items devem ser separados com ponto e vírgula
;:##tipo=pontos;linhas;pontos+linhas
28.4.2. Saídas
Quanto às entradas, cada saída tem de ser definida no início do script:
vetor:
##saída= vetor de saídaraster:
##saída= saída rastertabela:
##saída= tabela de saídagráfico:
##saída_gráfico_para_html(##showplots em versões anteriores)To show R output in the Result Viewer, put
>in front of the command whose output you would like to show.
28.4.3. Sumário de Sintaxe para scripts QGIS R
Vários tipos de parâmetros de entrada e saída são oferecidos.
28.4.3.1. Tipos de parâmetros de entrada
Parâmetros |
Exemplo de sintaxe |
Retornando objetos |
|---|---|---|
vetor |
Camada = vetor |
sf object (or SpatialDataFrame object, if ##load_vector_using_rgdal is specified) |
vetor de pontos |
Camada = vetor de pontos |
sf object (or SpatialDataFrame object, if ##load_vector_using_rgdal is specified) |
vetor de linha |
Camada = vetor de linha |
sf object (or SpatialDataFrame object, if ##load_vector_using_rgdal is specified) |
vetor de poligono |
Camada = polígono de vetor |
sf object (or SpatialPolygonsDataFrame object, if ##load_vector_using_rgdal is used) |
vetores multiplos |
Camada = vetores múltiplos |
sf object (or SpatialDataFrame objects if ##load_vector_using_rgdal is specified) |
Tabela |
Camada = tabela |
quadro de conversão de csv, objeto padrão da função “read.csv” |
campo |
Campo = Camada Campo |
nome do campo selecionado, e.g. “Area” |
imagem |
Camada = imagem |
Objeto RasterBrick, padrão do pacote de objetos “raster” |
múltiplas imagens |
Camada = Múltiplas imagens |
Objeto RasterBrick, padrão do pacote de objetos “raster” |
número |
N = número |
número escolhido inteiro ou flutuante |
texto |
S = texto |
texto adicionado na caixa |
texto longo |
LS= texto longo |
texto adicionado na caixa, pode ser maior que o texto normal |
seleção |
S = primeira seleção; segunda; terceira |
texto do item selecionado escolhido no menu suspenso. |
crs |
C = crs |
string do SRC resultante escolhido, no formato: |
Extensão |
E = extensão |
Extensão do pacote de objeto “raster”, você pode extrair valores como “E@xmin” |
ponto |
P = ponto |
Quando clicado no mapa, você terá as coordenadas do ponto |
arquivo |
F = arquivo |
caminho do arquivo escolhido, e.g “/home/matteo/file.txt” |
pasta |
F = pasta |
caminho do arquivo escolhido, e.g “/home/matteo/Downloads” |
Um parâmetro poder ser OPCIONAL, o que significa que pode ser ignorado.
Para definir uma entrada como opcional, adicione a string opcional antes da entrada, como por exemplo:
##Layer = vector
##Field1 = Field Layer
##Field2 = optional Field Layer
28.4.3.2. Tipos de parâmetros de saída
Parâmetros |
Exemplo de sintaxe |
|---|---|
vetor |
Saída = vetor de saída |
imagem |
Saída = imagem de saída |
Tabela |
Saída = tabela de saída |
arquivo |
Saída = arquivo de saída |
Nota
Você pode salvar gráficos como png do Visualizador de Resultado em Processamento, ou salvar o gráfico diretamente da interface do algoritmo.
28.4.3.3. Cuerpo de lineas de codigo
O corpo do script segue a sintaxe R e o painel Log pode ajudar se houver algo errado com o seu script
Remember that you have to load all additional libraries in the script:
library(sp)
28.4.4. Exemplos
28.4.4.1. Exemplo com saída em vetor
Vamos pegar um algoritmo da coleção online que cria pontos aleatórios a partir da extensão de uma camada de entrada:
##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)
Explanation (per line in the script):
Point pattern analysisis the group of the algorithmCamadaé a camada de entrada vetorialSizeis a numerical parameter with a default value of 10Saídaé a camada vetorial que será criada pelo algoritmolibrary(sp)loads the sp libraryspatpoly = as(Layer, "Spatial")translate to an sp objectCall the
spsamplefunction of thesplibrary and run it using the input defined above (LayerandSize)Create a SpatialPointsDataFrame object using the
SpatialPointsDataFramefunctionCreate the output vector layer using the
st_as_sffunction
É isso! Agora você só precisa rodar o algoritmo com uma camada vetorial que você tenha na Legenda QGIS, escolhendo o número de ponto aleatório. A camada resultante será adicionada ao seu mapa.
28.4.4.2. Exemplo com saída raster
The following script will perform basic ordinary kriging to
create a raster map of interpolated values from a specified field
of the input point vector layer by using the autoKrige
function of the automap R package.
It will first calculate the kriging model and then create a
raster.
The raster is created with the raster function of the raster R
package:
##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
By using ##load_vector_using_rgdal, the input vector layer
will be made available as a SpatialDataFrame objects,
so we avoid having to translate it from an sf object.
28.4.4.3. Exemplo com saída em tabela
Vamos editar o algoritmo do Sumário de Estatísticas para que a saída seja um arquivo de dados em tabela (csv).
O corpo do script é o seguinte:
##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
A terceira linha especifica o Campo vetorial na entrada e a quarta linha informa ao algoritmo que a saída deve ser uma tabela.
A última linha pegará o objeto Stat criado no script e o converterá em uma tabela csv.
28.4.4.4. Exemplo com saída do console
Você pode usar o exemplo anterior e ao invés de criar uma tabela, pode imprimir o resultado no Visualizador de Resultado:
##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
O script é exatamente o mesmo que foi usado acima exceto por duas edições:
nenhuma saída especificada (a quarta linha foi removida)
a última linha começa com
>, informando ao Processamento que deve deixar o objeto disponível no visualizador de resultado
28.4.4.5. Exemplo com gráfico
To create plots, you have to use the ##output_plots_to_html
parameter as in the following script:
##Basic statistics=group
##Layer=vector
##Field=Field Layer
##output_plots_to_html
####output_plots_to_html
qqnorm(Layer[[Field]])
qqline(Layer[[Field]])
The script uses a field (Field) of a vector layer (Layer) as
input, and creates a QQ Plot (to test the normality of the
distribution).
The plot is automatically added to the Processing Result Viewer.