Важно
Перевод - это работа сообщества : ссылка:Вы можете присоединиться. Эта страница в настоящее время переводится |прогресс перевода|.
26.2. Приложение D: Синтаксис сценария QGIS R
Contributed by Matteo Ghetta - funded by Scuola Superiore Sant’Anna
Написание скриптов R в обработке немного затруднено из-за специального синтаксиса.
Скрипт обработки R начинается с определения его входов и выходов, перед каждым из которых стоят двойные символы хэша (##).
Before the inputs, the group to place the algorithm in can be specified. If the group already exists, the algorithm will be added to it, if not, the group will be created. In the example below, the name of the group is My group:
##My Group=group
26.2.1. Входы
Все входные данные и параметры должны быть указаны. Существует несколько типов входных данных:
вектор:
##Слой = векторвекторное поле:
##F = Слой поля(где Слой - имя слоя входного вектора, к которому принадлежит поле)растровый:
##r = растровыйтаблица:
##t = таблицачисло:
##Номер = числострока:
##Str = строкабулево:
##Bol = булевоэлементов в выпадающем меню. Элементы должны быть разделены точкой с запятой
;:##type=selection point;lines;point+lines
26.2.2. Результаты
Как и в случае с входами, каждый выход должен быть определен в начале сценария:
вектор:
##output= выходной векторрастровый:
##output= выходной растровыйтаблица:
##output= выходная таблицаplots:
##output_plots_to_html(##showplots в более ранних версиях)Чтобы показать вывод R в Просмотр результатов, поставьте
>перед командой, вывод которой вы хотите показать.
26.2.3. Сводка синтаксиса для сценариев QGIS R
Предлагается несколько типов входных и выходных параметров.
26.2.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 = масштаб |
Объект Extent из пакета |
точка |
P = точка |
при нажатии на карту вы получаете координаты точки |
файл |
F = file |
путь к выбранному файлу, например, «/home/matteo/file.txt» |
folder |
F = папка |
путь к выбранной папке, например, «/home/matteo/Downloads» |
Параметр может быть ОПЦИОНАЛЬНЫМ, что означает, что его можно игнорировать.
Чтобы установить входные данные как необязательные, вы добавляете строку опционально перед входом, например:
##Layer = vector
##Field1 = Field Layer
##Field2 = optional Field Layer
26.2.3.2. Типы выходных параметров
Параметр |
Пример синтаксиса |
|---|---|
вектор |
Выход = выходной вектор |
растровый |
Выход = выходной растровый |
таблица |
Выход = выходная таблица |
файл |
Выход = выходной файл |
Примечание
Вы можете сохранять графики в формате png из Просмотра результатов обработки, а можете выбрать сохранение графика непосредственно из интерфейса алгоритма.
26.2.3.3. Тело скрипта
Тело скрипта соответствует синтаксису R, а панель Лог поможет вам, если с вашим скриптом что-то не так.
Помните, что в скрипте необходимо загрузить все дополнительные библиотеки:
library(sp)
26.2.4. Примеры
26.2.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)
Объяснение (для каждой строки скрипта):
Точечный анализ шаблонов- группа алгоритмаСлой- входной векторный слойРазмер- это числовой параметр, значение которого по умолчанию равно 10Выход- это векторный слой, который будет создан алгоритмомбиблиотека(sp)загружает библиотеку spspatpoly = as( Слой, "Пространственный")перевести в объект spВызовите функцию
spsampleиз библиотекиspи запустите ее, используя заданные выше входные данные (СлойиРазмер)Создайте объект SpatialPointsDataFrame с помощью функции
SpatialPointsDataFrameСоздайте выходной векторный слой с помощью функции
st_as_sf
Вот и все! Просто запустите алгоритм с векторным слоем, который у вас есть в QGIS Legend, выберите количество случайных точек. Полученный слой будет добавлен на вашу карту.
26.2.4.2. Пример с выводом растровых изображений
Следующий сценарий выполнит базовый обычный кригинг для создания растровой карты интерполированных значений из указанного поля слоя векторов входных точек с помощью функции autoKrige пакета automap R. Сначала будет рассчитана модель кригинга, а затем создан растр. Растр создается с помощью функции raster пакета 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.
26.2.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
Третья строка задает Векторное поле на входе, а четвертая указывает алгоритму, что на выходе должна быть таблица.
Последняя строка возьмет объект Stat, созданный в скрипте, и преобразует его в таблицу csv.
26.2.4.4. Пример с выводом на консоль
Мы можем использовать предыдущий пример и вместо создания таблицы вывести результат в Просмотр результатов:
##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
Сценарий точно такой же, как и выше, за исключением двух правок:
вывод не указан (четвертая строка удалена)
Последняя строка начинается с
>, указывая обработке сделать объект доступным через средство просмотра результатов
26.2.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]])
Сценарий использует поле (Поле) векторного слоя (Слой) в качестве входных данных и создает QQ Plot (для проверки нормальности распределения).
График автоматически добавляется в окно обработки Просмотр результатов.