31.4. 附录D:QGIS R脚本语法

由Matteo Ghetta贡献-由 Scuola Superiore Sant'Anna

由于特殊的语法,在处理过程中编写R脚本有点棘手。

处理R脚本首先定义它的 InputsOutputs ,每个字符前面都有双哈希字符 (## )。

在输入之前,可以指定要放置算法的组。如果组已经存在,则将算法添加到组中;如果不存在,则将创建组。在下面的示例中,组的名称为 My group

##My Group=group

31.4.1. 输入量

必须指定所有输入数据和参数。有几种类型的输入:

  • 向量: ##Layer = vector

  • 向量场: ##F = Field Layer (其中 Layer 是字段所属的输入向量层的名称)

  • 栅格: ##r = raster

  • 表: ##t = table

  • 编号: ##Num = number

  • 字符串: ##Str = string

  • 布尔值: ##Bol = boolean

  • 下拉菜单中的元素。这些项目必须用分号分隔 ;##type=selection point;lines;point+lines

31.4.2. 产出

至于输入,每个输出都必须在脚本的开头定义:

  • 向量: ##output= output vector

  • 栅格: ##output= output raster

  • 表: ##output= output table

  • 剧情: ##output_plots_to_html (##早期版本中的展示图)

  • 在中显示R输出 Result Viewer ,投放 > 在您想要显示其输出的命令前面。

31.4.3. QGIS R脚本的语法摘要

提供了许多输入和输出参数类型。

31.4.3.1. 输入参数类型

参数

语法示例

正在返回对象

矢量

层=向量

SF对象(或SpatialDataFrame对象,如果指定了##LOAD_VECTOR_USING_RGDAL)

矢量点

LAYER=矢量点

SF对象(或SpatialDataFrame对象,如果指定了##LOAD_VECTOR_USING_RGDAL)

矢量线

LAYER=矢量线

SF对象(或SpatialDataFrame对象,如果指定了##LOAD_VECTOR_USING_RGDAL)

向量多边形

Layer=矢量多边形

Sf对象(或SpatialPolygonsDataFrame对象,如果使用##LOAD_VECTOR_USING_RGDAL)

多向量

层=多个矢量

SF对象(如果指定了##LOAD_VECTOR_USING_RGDAL,则为SpatialDataFrame对象)

表格

Layer=表

从CSV转换数据帧,默认对象为 read.csv 功能

字段

FIELD=场层

所选字段的名称,例如 "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=文件夹

所选文件夹的路径,例如“/home/matteo/Downloads”

参数可以是 OPTIONAL 这意味着它可以被忽略。

In order to set an input as optional, you add the string optional before the input, e.g:

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

31.4.3.2. 输出参数类型

参数

语法示例

矢量

输出=输出向量

栅格

输出=输出栅格

表格

输出=输出表

文件

输出=输出文件

备注

您可以将地块另存为 pngProcessing Result Viewer ,或者您可以选择直接从算法界面保存绘图。

31.4.3.3. 脚本体

脚本体遵循R语法,并且 Log 如果您的脚本有问题,Panel可以帮助您。

Remember 您必须加载脚本中的所有其他库::

library(sp)

31.4.4. 实例

31.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 是输入 vector 图层

  3. Size 是一种 numerical 参数的默认值为10

  4. Outputvector 将由算法创建的图层

  5. library(sp) 加载 sp 类库

  6. spatpoly = as(Layer, "Spatial") 转换为SP对象

  7. 调用 spsample 的功能 sp 库,并使用上面定义的输入运行它 (LayerSize )

  8. 创建 SpatialPointsDataFrame 对象使用 SpatialPointsDataFrame 功能

  9. 使用创建输出向量层 st_as_sf 功能

就这样!只需用QGIS图例中的矢量层运行算法,选择随机点的数量即可。生成的图层将添加到地图中。

31.4.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 对象。

31.4.4.3. 表输出的示例

让我们编辑一下 Summary Statistics 算法,以便输出为表文件(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 桌子。

31.4.4.4. 使用控制台输出的示例

我们可以使用前面的示例,而不是创建表,而是将结果打印在 Result Viewer **

##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. 最后一行以 > ,通知处理通过结果查看器使对象可用。

31.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