Важно

Перевод - это работа сообщества : ссылка:Вы можете присоединиться. Эта страница в настоящее время переводится |прогресс перевода|.

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, объект по умолчанию функции read.csv

поле

Поле = Полевой слой

название выбранного поля, например, "Область"

растровый

Слой = растровый

Объект RasterBrick, объект по умолчанию из пакета растровый

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

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

Объекты RasterBrick, объект по умолчанию из пакета растровый

номер

N = номер

Выбирается целое или плавающее число

строка

S = строка

строка, добавленная в поле

длинная строка

LS = длинная строка

добавление строки в коробку, может быть длиннее обычной строки

выбор

S = выбор первого; второго; третьего

строка выбранного пункта в выпадающем меню

crs

C = crs

строка выбранного CRS, в формате: EPSG:4326

масштаб

E = масштаб

Объект Extent из пакета растровый, вы можете извлекать значения как E@xmin

точка

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)

Объяснение (для каждой строки скрипта):

  1. Точечный анализ шаблонов - группа алгоритма

  2. Слой - входной векторный слой

  3. Размер - это числовой параметр, значение которого по умолчанию равно 10

  4. Выход - это векторный слой, который будет создан алгоритмом

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

  6. spatpoly = as( Слой, "Пространственный") перевести в объект sp

  7. Вызовите функцию spsample из библиотеки sp и запустите ее, используя заданные выше входные данные (Слой и Размер)

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

  9. Создайте выходной векторный слой с помощью функции 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

Сценарий точно такой же, как и выше, за исключением двух правок:

  1. вывод не указан (четвертая строка удалена)

  2. Последняя строка начинается с >, указывая обработке сделать объект доступным через средство просмотра результатов

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 (для проверки нормальности распределения).

График автоматически добавляется в окно обработки Просмотр результатов.