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: |
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 analysis
is the group of the algorithmCamada
é a camada de entrada vetorialSize
is 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
spsample
function of thesp
library and run it using the input defined above (Layer
andSize
)Create a SpatialPointsDataFrame object using the
SpatialPointsDataFrame
functionCreate 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:
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.