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: |
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):
Análise de padrão pontual
é o grupo do algoritmoCamada
é a camada de entrada vetorialTamanho
é um parâmetro numérico com um valor padrão de 10Saída
é a camada vetorial que será criada pelo algoritmolibrary(sp)
loads the sp libraryspatpoly = como (Camada , “Espacial”)`` traduz para um objeto sp
Chame a função
spamostra
da bibliotecasp
e execute-a usando a entrada definida acima (Camada
e ``Tamanho`)Crie um *EspacialPontosQuadroDeDados” usando o objeto
EspacialPontosQuadroDeDados
funçãoCrie 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:
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
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.