29.4. 付録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
29.4.1. 入力
すべての入力データとパラメータは指定する必要があります。入力は何種類かあります:
vector:
##Layer = vector
vector field:
##F = Field Layer
(ここで、 Layer は、フィールドが属する入力ベクタレイヤの名前です。)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
29.4.2. 出力
入力のように、各出力は、スクリプトの先頭で定義する必要があります。
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.
29.4.3. Syntax Summary for QGIS R scripts
A number of input and output parameter types are offered.
29.4.3.1. 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」 |
パラメータは OPTIONAL つまり、無視できるようにできます。
入力をオプションとして設定するためには、その入力の 前 に文字列 optional
を追加します、例えば:
##Layer = vector
##Field1 = Field Layer
##Field2 = optional Field Layer
29.4.3.2. 出力パラメータの種類
パラメーター |
構文の例 |
---|---|
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.
29.4.3.3. スクリプト本体
スクリプト本体はR構文に従い、 Log パネルはスクリプトに問題がある場合に役立ちます。
Remember that you have to load all additional libraries in the script:
library(sp)
29.4.4. 例
29.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)
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
それでおしまい!あとはQGIS凡例中にあるベクタレイヤでアルゴリズムを実行し、ランダムなポイントの数を選択するだけです。結果のレイヤが地図に追加されます。
29.4.4.2. ラスター出力の例
次のスクリプトでは、「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.
29.4.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
3行目は入力に ベクターフィールド を指定し、4行目は出力テーブルであるべきであるアルゴリズムを伝えます。
最後の行は、スクリプトで作成された Stat
オブジェクトを取得し、 csv
テーブルに変換します。
29.4.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
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
29.4.4.5. プロットと例
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.