Важно
Перевод - это работа сообщества : ссылка:Вы можете присоединиться. Эта страница в настоящее время переводится |прогресс перевода|.
26.2. Приложение D: Синтаксис сценария QGIS R
Вклад Маттео Гетта - финансируется Школой Святой Анны <https://www.santannapisa.it/en/istituto/scienze-della-vita/istituto-di-scienze-della-vita>`_
Написание скриптов R в обработке немного затруднено из-за специального синтаксиса.
Скрипт обработки R начинается с определения его входов и выходов, перед каждым из которых стоят двойные символы хэша (##
).
Перед входом можно указать группу, в которую будет помещен алгоритм. Если группа уже существует, алгоритм будет добавлен в нее, если нет - группа будет создана. В примере ниже имя группы - Моя группа:
##Моя группа=группа
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 = файл |
путь к выбранному файлу, например, «/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 (для проверки нормальности распределения).
График автоматически добавляется в окно обработки Просмотр результатов.