31.4. 附录D:QGIS R脚本语法
由Matteo Ghetta贡献-由 Scuola Superiore Sant'Anna
由于特殊的语法,在处理过程中编写R脚本有点棘手。
处理R脚本首先定义它的 Inputs 和 Outputs ,每个字符前面都有双哈希字符 (##
)。
在输入之前,可以指定要放置算法的组。如果组已经存在,则将算法添加到组中;如果不存在,则将创建组。在下面的示例中,组的名称为 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转换数据帧,默认对象为 |
字段 |
FIELD=场层 |
所选字段的名称,例如 |
栅格 |
图层=栅格 |
RasterBrick对象,默认对象 |
多个栅格 |
图层=多个栅格 |
RasterBrick对象,默认对象 |
数 |
N=数字 |
所选的整数或浮点数 |
细绳 |
S=字符串 |
添加到框中的字符串 |
长弦 |
LS=长字符串 |
添加到框中的字符串可能比正常字符串更长 |
选择 |
S=选择第一、第二、第三 |
在下拉菜单中选择的选定项目的字符串 |
CRS |
C=CRS |
所选结果CRS的字符串,格式为: |
程度 |
E=范围 |
对象的范围对象 |
点 |
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. 输出参数类型
参数 |
语法示例 |
---|---|
矢量 |
输出=输出向量 |
栅格 |
输出=输出栅格 |
表格 |
输出=输出表 |
文件 |
输出=输出文件 |
备注
您可以将地块另存为 png
从 Processing 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)
解释(脚本中的每一行):
Point pattern analysis
是算法的组Layer
是输入 vector 图层Size
是一种 numerical 参数的默认值为10Output
是 vector 将由算法创建的图层library(sp)
加载 sp 类库spatpoly = as(Layer, "Spatial")
转换为SP对象调用
spsample
的功能sp
库,并使用上面定义的输入运行它 (Layer
和Size
)创建 SpatialPointsDataFrame 对象使用
SpatialPointsDataFrame
功能使用创建输出向量层
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
除了两处编辑外,该脚本与上面的脚本完全相同:
未指定输出(已删除第四行)
最后一行以
>
,通知处理通过结果查看器使对象可用。
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 。