29.4. Apêndice D: sintaxe de script QGIS R

Contribuição de Matteo Ghetta - financiado pela Escola Sant’Anna de Estudos Avançados <https://www.santannapisa.it/en/istituto/scienze-della-vita/istituto-di-scienze-della-vita>

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

29.4.1. Entradas

Todos os dados de entrada e parâmetros devem ser especificados. Existem vários tipos de entradas:

  • vetor: ##Camada = vetor

  • campo vetorial: ##F = Camada de campo (onde Layer é o nome de uma camada vetorial de entrada à qual o campo pertence)

  • raster: ##r = raster

  • tabela: ##t = tabela

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

  • string: ##Str = string

  • Booleano: ##Bol = booleano

  • elementos em um menu dropdown. Os items devem ser separados com ponto e vírgula ;: ##tipo=pontos;linhas;pontos+linhas

29.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)

  • Para mostrar a saída do R no Visualizador de Resultados, coloque > na frente do comando cuja saída você gostaria de mostrar.

29.4.3. Sumário de Sintaxe para scripts QGIS R

Vários tipos de parâmetros de entrada e saída são oferecidos.

29.4.3.1. Tipos de parâmetros de entrada

Parâmetros

Exemplo de sintaxe

Retornando objetos

vetor

Camada = vetor

sf objeto (ou objeto ObjetoDeQuadroDeDadosEspaciais, se ##carrega_vetor_usando_rgdal for especificado)

vetor de pontos

Camada = vetor de pontos

sf objeto (ou objeto ObjetoDeQuadroDeDadosEspaciais, se ##carrega_vetor_usando_rgdal for especificado)

vetor de linha

Camada = vetor de linha

sf objeto (ou objeto ObjetoDeQuadroDeDadosEspaciais, se ##carrega_vetor_usando_rgdal for especificado)

vetor de poligono

Camada = polígono de vetor

objeto sf (ou EspacialPolígonosQuadroDeDados objeto, se ##carrega_vetor_usando_rgdal é usado)

vetores multiplos

Camada = vetores múltiplos

objeto sf (ou QuadroDeDadosEspaciais objetos se ##carrega_vetor_usando_rgdal for especificado)

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

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

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

Lembre que você precisa carregar todas as bibliotecas adicionais no script:

library(sp)

29.4.4. Exemplos

29.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)

Explicação (por linha no script):

  1. Análise de padrão pontual é o grupo do algoritmo

  2. Camada é a camada de entrada vetorial

  3. Tamanho é um parâmetro numérico com um valor padrão de 10

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

  5. library(sp) loads the sp library

  6. spatpoly = como (Camada , “Espacial”)`` traduz para um objeto sp

  7. Chame a função spamostra da biblioteca sp e execute-a usando a entrada definida acima (Camada e ``Tamanho`)

  8. Crie um *EspacialPontosQuadroDeDados” usando o objeto EspacialPontosQuadroDeDados função

  9. Crie a camada vetorial de saída usando a função st_as_sf

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

29.4.4.2. Exemplo com saída raster

O script a seguir executará krigagem ordinária básica para criar um mapa raster de valores interpolados de um campo especificado da camada vetorial de ponto de entrada usando a função autoKrige do pacote R automap. Ele primeiro calculará o modelo de krigagem e, em seguida, criará um raster. O raster é criado com a função raster do pacote raster R:

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

Usando ##carregar_vetor_usando_rgdal, a camada vetorial de entrada será disponibilizada como um EspacialQuadroDeDados, então evitamos ter que traduzi-lo de um objeto sf.

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

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

29.4.4.5. Exemplo com gráfico

Para criar plotagens, você deve usar o parâmetro ##saída_impressão_para_html como no script a seguir:

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

O roteiro usa um campo (Campo) de uma camada vetorial (Camada) como entrada e cria um QQ Plot (para testar a normalidade da distribuição).

O gráfico é adicionado automaticamente ao Processando Visualizador de Resultados.