付録D:QGIS Rスクリプト構文¶
Contributed by Matteo Ghetta - funded by Scuola Superiore Sant'Anna
Writing R scripts in Processing is a bit tricky because of the special syntax.
A Processing R script starts with defining its Inputs and
Outputs, each preceded with double hash characters (##
).
入力の前に、アルゴリズムを配置するグループを指定できます。グループがすでに存在する場合はそこにアルゴリズムが追加されます。存在しない場合は、グループが作成されます。以下の例では、グループの名前は My group です:
##My Group=group
入力¶
All input data and parameters have to be specified. There are several types of inputs:
vector:
##Layer = vector
vector field:
##F = Field Layer
(where Layer is the name of an input vector layer the field belongs to)raster:
##r = raster
table:
##t = table
number:
##Num = number
string:
##Str = string
boolean:
##Bol = boolean
elements in a dropdown menu. The items must be separated with semicolons
;
:##type=selection point;lines;point+lines
出力¶
入力のように、各出力は、スクリプトの先頭で定義する必要があります。
vector:
##output= output vector
raster:
##output= output raster
table:
##output= output table
plots:
##output_plots_to_html
(##showplots in earlier versions)To show R output in the Result Viewer, put
>
in front of the command whose output you would like to show.
Syntax Summary for QGIS R scripts¶
A number of input and output parameter types are offered.
Input parameter types¶
パラメーター |
構文の例 |
返すオブジェクト |
---|---|---|
vector |
Layer = vector |
sf object (or SpatialDataFrame object, if ##load_vector_using_rgdal is specified) |
vector point |
Layer = vector point |
sf object (or SpatialDataFrame object, if ##load_vector_using_rgdal is specified) |
vector line |
Layer = vector line |
sf object (or SpatialDataFrame object, if ##load_vector_using_rgdal is specified) |
vector polygon |
Layer = vector polygon |
sf object (or SpatialPolygonsDataFrame object, if ##load_vector_using_rgdal is used) |
multiple vector |
Layer = multiple vector |
sf object (or SpatialDataFrame objects if ##load_vector_using_rgdal is specified) |
表 |
Layer = table |
csvからのデータフレーム変換、 |
field |
Field = Field Layer |
選択されたフィールドの名前、例えば |
raster |
Layer = raster |
RasterBrickオブジェクト、 |
multiple raster |
Layer = multiple raster |
RasterBrickオブジェクト、 |
number |
N = number |
選択された整数または浮動小数点数 |
string |
S = string |
ボックスに追加された文字列 |
longstring |
LS = longstring |
文字列がボックスに追加され、通常の文字列より長くなる可能性があります |
selection |
S = selection first;second;third |
ドロップダウンメニューで選択した選択項目の文字列 |
crs |
C = crs |
string of the resulting CRS chosen, in the format: |
extent |
E = extent |
|
point |
P = point |
地図をクリックすると点の座標が得られます |
file |
F = file |
選択されたファイルのパス、例えば「/home/matteo/file.txt」 |
folder |
F = folder |
選択されたフォルダのパス、例えば「/home/matteo/Downloads」 |
A parameter can be OPTIONAL, meaning that it can be ignored.
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
Output parameter types¶
パラメーター |
構文の例 |
---|---|
vector |
Output = output vector |
raster |
Output = output raster |
表 |
Output = output table |
file |
Output = output file |
注釈
You can save plots as png
from the Processing Result Viewer, or you can choose to
save the plot directly from the algorithm interface.
スクリプト本体¶
The script body follows R syntax and the Log panel can help you if there is something wrong with your script.
Remember that you have to load all additional libraries in the script:
library(sp)
ベクター出力の例¶
入力レイヤーの範囲からランダムな点を作成するオンラインコレクションからのアルゴリズムを見てみましょう:
##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)
Explanation (per line in the script):
ポイントパターン分析
は、アルゴリズムのグループLayer
は入力 ベクター レイヤーSize
is a numerical parameter with a default value of 10Output
はアルゴリズムによって作成される ベクター レイヤー、library(sp)
loads the sp libraryspatpoly = as(Layer, "Spatial")
translate to an sp objectCall the
spsample
function of thesp
library and run it using the input defined above (Layer
andSize
)Create a SpatialPointsDataFrame object using the
SpatialPointsDataFrame
functionCreate the output vector layer using the
st_as_sf
function
That's it! Just run the algorithm with a vector layer you have in the QGIS Legend, choose the number of random point. The resulting layer will be added to your map.
ラスター出力の例¶
次のスクリプトでは、「automap」Rパッケージの「autoKrige」関数を使用して入力ポイントベクタレイヤの指定されたフィールドから補間値のラスタマップを作成するために、基本的な通常のクリギングを実行します。最初にクリギングモデルを計算し、次にラスタを作成します。ラスターはラスタRパッケージの raster
関数で作成されます:
##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
By using ##load_vector_using_rgdal
, the input vector layer
will be made available as a SpatialDataFrame
objects,
so we avoid having to translate it from an sf
object.
テーブル出力の例¶
出力がテーブルファイル(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
3行目は入力に ベクターフィールド を指定し、4行目は出力テーブルであるべきであるアルゴリズムを伝えます。
最後の行は、スクリプトで作成された Stat
オブジェクトを取得し、 csv
テーブルに変換します。
コンソール出力の例¶
We can use the previous example and instead of creating a table, print the result in the 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
The script is exactly the same as the one above except for two edits:
no output specified (the fourth line has been removed)
the last line begins with
>
, telling Processing to make the object available through the result viewer
プロットと例¶
To create plots, you have to use the ##output_plots_to_html
parameter as in the following script:
##Basic statistics=group
##Layer=vector
##Field=Field Layer
##output_plots_to_html
####output_plots_to_html
qqnorm(Layer[[Field]])
qqline(Layer[[Field]])
The script uses a field (Field
) of a vector layer (Layer
) as
input, and creates a QQ Plot (to test the normality of the
distribution).
The plot is automatically added to the Processing Result Viewer.