28.4. Приложение D: Синтаксис на R скрипт на QGIS

Contributed by Matteo Ghetta - funded by Scuola Superiore Sant’Anna

Писането на R скриптове в обработка е малко сложно поради специалния синтаксис.

Скриптът за обработка R започва с дефиниране на неговите Входове и Изходи,всеки от които предхожда с двойни хеш символи (##).

Преди входовете може да се определи групата, която да постави алгоритъма. Ако групата вече съществува, алгоритъмът ще бъде добавен към нея, ако не, групата ще бъде създадена. В примера по-долу името на групата е * Моята група *:

##Моята група = група

28.4.1. Входове

Всички входни данни и параметри трябва да бъдат посочени. Има няколко типа входове:

  • вектор: ##Слой = вектор

  • векторно поле: ``## F = слой на полето ‚‘ (където Слой е името на входния вектор слой, към който принадлежи полето)

  • растер: ## r = растер

  • таблица: ##t = таблица

  • номер: ##Num = номер

  • низ: ##Str = низ

  • булев: ##Bol = булев

  • елементи в падащо меню. Елементите трябва да бъдат разделени със запетая ; ``: `` ##type = точка за избор; линии; точка + линии

28.4.2. Изходни резултати

Що се отнася до входовете, всеки изход трябва да бъде дефиниран в началото на скрипта:

  • вектор: `` ##изход = изходен вектор``

  • растер: `` ##output = изход растер``

  • таблица: `` ##output = изходна таблица``

  • графики: ##output_plots_to_html (##showplots в по-ранни версии)

  • За да покажете R изход в Result Viewer, поставете ``> `` пред командата, чийто изход искате да покажете.

28.4.3. Обобщение на синтаксиса за QGIS R скриптове

Предлагат се редица видове входни и изходни параметри.

28.4.3.1. Типове входни параметри

параметър

Пример за синтаксис

Връщане на обекти

вектор

Слой = вектор

sf обект (или обект SpatialDataFrame, ако е зададен ##load_vector_using_rgdal)

векторна точка

Слой = векторна точка

sf обект (или обект SpatialDataFrame, ако е зададен ##load_vector_using_rgdal)

векторна линия

Слой = векторна линия

sf обект (или обект SpatialDataFrame, ако е зададен ##load_vector_using_rgdal)

вектор полигон

Слой = векторен многоъгълник

sf обект (или обект SpatialPolygonsDataFrame, ако се използва ##load_vector_using_rgdal)

множество вектор

Слой = множество вектори

sf обект (или SpatialDataFrame обекти, ако е зададен ##load_vector_using_rgdal)

таблица

Слой = таблица

преобразуване на рамка от данни от csv, обект по подразбиране на функцията read.csv

поле

Поле = слой на полето

име на избраното поле, напр. "Area"

растер

Слой = растер

Обект RasterBrick, обект по подразбиране на пакет raster

множествен растер

Слой = множество растерни

Обект RasterBrick, обект по подразбиране на пакет raster

номер

N = номер

избрано цяло или плаващо число

Текст

S = текст

низ в полето

дълъгтекст

LS = дълъгтекст

низ, добавен в полето, може да бъде по-дълъг от нормалния низ

Избиране

S = избор първо; второ; трето

низ на избрания елемент, избран в падащото меню

crs

C = crs

низ на получения избран CRS във формата: "EPSG:4326"

Пространствен обхват

E = пространствен обхват

Обширен обект на пакета raster, можете да извлечете стойности като E@xmin

точка

P = точка

когато щракнете върху картата, имате координатите на точката

файл

F = файл

път на избрания файл, напр. „/Home/matteo/file.txt“

директория

F = директория

път на избраната директория, напр. „/ Начало / Матео / Downloads“

Параметърът може да бъде OPTIONAL, което означава, че може да бъде игнориран.

За да зададете вход като незадължителен, добавяте низа optional преди въвеждането, например

##Layer = vector
##Field1 = Field Layer
##Field2 = optional Field Layer

28.4.3.2. Типове изходни параметри

параметър

Пример за синтаксис

вектор

Изход = изходен вектор

растер

Изход = изходен растер

таблица

Изход = таблица на изхода

файл

Изход = изходен файл

Note

Можете да запишете парцели като png от Processing Result Viewer или можете да изберете да запазите графиката директно от интерфейса на алгоритъма.

28.4.3.3. Тяло на сценария

Тялото на скрипта следва синтаксиса на R и панелът Log може да ви помогне, ако има нещо нередно с вашия скрипт.

Remember, че трябва да заредите всички допълнителни библиотеки в скрипта

library(sp)

28.4.4. Примери

28.4.4.1. Пример с векторна продукция

Нека вземем алгоритъм от онлайн колекцията, който създава случайни точки от степента на входния слой

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

Обяснение (на ред в скрипта):

  1. Point pattern analysis е групата на алгоритъма

  2. `` Layer`` е входящият ** вектор ** слой

  3. Size е numerical параметър със стойност по подразбиране 10

  4. Output is the vector layer that will be created by the algorithm

  5. library(sp) зарежда библиотеката sp

  6. `` spatpoly = as (Слой, „Spatial“) `` превод на sp обект

  7. Извикайте функцията spsample на библиотеката sp и я стартирайте с помощта на входа, дефиниран по-горе (Layer и Size)

  8. Създайте обект SpatialPointsDataFrame с помощта на функцията SpatialPointsDataFrame

  9. Създайте изходния вектор слой с помощта на функцията st_as_sf

Това е! Просто стартирайте алгоритъма с векторен слой, който имате в легендата QGIS, изберете броя на случайната точка. Полученият слой ще бъде добавен към вашата карта.

28.4.4.2. Пример с растерна продукция

Следващият скрипт ще изпълни основен обикновен кригинг, за да създаде растерна карта от интерполирани стойности от определено поле на векторен слой на входната точка, като използва функцията autoKrige на пакета automap R. Първо ще изчисли кригинг модела и след това ще създаде растер. Растерът е създаден с функцията 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

Използвайки ##load_vector_using_rgdal, входният вектор слой ще бъде достъпен като обекти на SpatialDataFrame, така че избягваме да го превеждаме от обект sf.

28.4.4.3. Пример с изход на таблица

Нека редактираме алгоритъма Обобщена статистика, така че изходът да е табличен файл (csv).

Тялото на скрипта е следното:

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

Третият ред указва Vector Field във входа, а четвъртият ред казва на алгоритъма, че изходът трябва да бъде таблица.

Последният ред ще вземе обекта Stat, създаден в скрипта, и ще го преобразува в таблица csv.

28.4.4.4. Пример с конзолен изход

Можем да използваме предишния пример и вместо да създадем таблица, отпечатайте резултата в **Viewer Result **

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

Сценарият е абсолютно същият като този по-горе, с изключение на две редакции:

  1. no output specified (the fourth line has been removed)

  2. последният ред започва с ``> ``, казва на обработката, за да направи обекта достъпен чрез резултатите за гледане на резултати

28.4.4.5. Пример със графики

За да създадете графики, трябва да използвате параметъра ##output_plots_to_html, както в следния скрипт:

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

Скриптът използва поле (Field) на векторен слой (``Layer ‚‘) като вход и създава QQ Plot (за тестване на нормалността на разпределението).

Графикът се добавя автоматично към обработващия Result Viewer.