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, обект по подразбиране на функцията |
поле |
Поле = слой на полето |
име на избраното поле, напр. |
растер |
Слой = растер |
Обект RasterBrick, обект по подразбиране на пакет |
множествен растер |
Слой = множество растерни |
Обект RasterBrick, обект по подразбиране на пакет |
номер |
N = номер |
избрано цяло или плаващо число |
Текст |
S = текст |
низ в полето |
дълъгтекст |
LS = дълъгтекст |
низ, добавен в полето, може да бъде по-дълъг от нормалния низ |
Избиране |
S = избор първо; второ; трето |
низ на избрания елемент, избран в падащото меню |
crs |
C = crs |
низ на получения избран CRS във формата: |
Пространствен обхват |
E = пространствен обхват |
Обширен обект на пакета |
точка |
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)
Обяснение (на ред в скрипта):
Point pattern analysis
е групата на алгоритъма`` Layer`` е входящият ** вектор ** слой
Size
е numerical параметър със стойност по подразбиране 10Output
is the vector layer that will be created by the algorithmlibrary(sp)
зарежда библиотеката sp`` spatpoly = as (Слой, „Spatial“) `` превод на sp обект
Извикайте функцията
spsample
на библиотекатаsp
и я стартирайте с помощта на входа, дефиниран по-горе (Layer
иSize
)Създайте обект SpatialPointsDataFrame с помощта на функцията
SpatialPointsDataFrame
Създайте изходния вектор слой с помощта на функцията
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
Сценарият е абсолютно същият като този по-горе, с изключение на две редакции:
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.