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 = vetor

  • vector field: ##F = Field Layer (where Layer is the name of an input vector layer the field belongs to)

  • raster: ##r = raster

  • tabela: ##t = tabela

  • número: ##Num = número

  • string: ##Str = string

  • boolean: ##Bol = boolean

  • elementos 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ída

  • raster: ##saída= saída raster

  • tabela: ##saída= tabela de saída

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

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

  1. Point pattern analysis is the group of the algorithm

  2. Camada é a camada de entrada vetorial

  3. Size is a numerical parameter with a default value of 10

  4. Saída é a camada vetorial que será criada pelo algoritmo

  5. library(sp) loads the sp library

  6. spatpoly = as(Layer, "Spatial") translate to an sp object

  7. Call the spsample function of the sp library and run it using the input defined above (Layer and Size)

  8. Create a SpatialPointsDataFrame object using the SpatialPointsDataFrame function

  9. Create the output vector layer using the st_as_sf function

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

  1. nenhuma saída especificada (a quarta linha foi removida)

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