31.4. 付録D:QGIS Rスクリプト構文
Matteo Ghettaの寄稿 - Scuola Superiore Sant'Anna による資金提供
プロセシングでRスクリプトを書くのは、特殊な構文のため、少しコツがいります。
プロセシングのRスクリプトは、まず 入力 と 出力 を定義し、それぞれの前に二重のハッシュ文字(##
)を付けます。
入力の前に、アルゴリズムを配置するグループを指定できます。グループがすでに存在する場合はそこにアルゴリズムが追加されます。存在しない場合は、グループが作成されます。以下の例では、グループの名前は 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
(以前の版では##showplots)R の出力を 結果ビューアー に表示するには、出力を表示したいコマンドの前に
>
を置きます。
31.4.3. QGIS Rスクリプトの構文の概要
たくさんの入出力パラメータ型が用意されています。
31.4.3.1. 入力パラメータの型
パラメータ |
構文の例 |
返すオブジェクト |
---|---|---|
vector |
Layer = vector |
sfオブジェクト(または、##load_vector_using_rgdalが指定されたときはSpatialDataFrameオブジェクト) |
vector point |
Layer = vector point |
sfオブジェクト(または、##load_vector_using_rgdalが指定されたときはSpatialDataFrameオブジェクト) |
vector line |
Layer = vector line |
sfオブジェクト(または、##load_vector_using_rgdalが指定されたときはSpatialDataFrameオブジェクト) |
vector polygon |
Layer = vector polygon |
sfオブジェクト(または、##load_vector_using_rgdalが指定されたときはSpatialPolygonsDataFrameオブジェクト) |
multiple vector |
Layer = multiple vector |
sfオブジェクト(または、##load_vector_using_rgdalが指定されたときはSpatialDataFrameオブジェクト) |
table |
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 |
結果として選ばれたCRSの文字列。形式は |
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
31.4.3.2. 出力パラメータの種類
パラメータ |
構文の例 |
---|---|
vector |
Output = output vector |
raster |
Output = output raster |
table |
Output = output table |
file |
Output = output file |
注釈
プロセシング結果ビューア からプロットを png
として保存することも、アルゴリズムインターフェースから直接プロットを保存することもできます。
31.4.3.3. スクリプト本体
スクリプト本体はR構文に従い、 Log パネルはスクリプトに問題がある場合に役立ちます。
スクリプトですべての追加ライブラリを読み込む必要があることを 覚えてください:
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
は入力 ベクタ レイヤSize
は、numerical(数値) パラメタであり、デフォルト値は10Output
はアルゴリズムによって作成される ベクタ レイヤlibrary(sp)
は、sp ライブラリを読み込むspatpoly = as(Layer, "Spatial")
は、spオブジェクトに翻訳するsp
ライブラリのspsample
関数を呼び出し、上で定義した入力(Layer
とSize
)を使って実行するSpatialPointsDataFrame
関数を使って SpatialPointsDataFrame オブジェクトを生成するst_as_sf
関数を使って出力ベクタレイヤを生成する
それでおしまい!あとはQGIS凡例中にあるベクタレイヤでアルゴリズムを実行し、ランダムなポイントの数を選択するだけです。結果のレイヤが地図に追加されます。
31.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
##load_vector_using_rgdal
を使うと、入力ベクタレイヤは SpatialDataFrame
オブジェクトとして使用できるようになり、sf
オブジェクトから変換する必要がなくなります。
31.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
テーブルに変換します。
31.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
スクリプトは、2つの編集を除いて、上のものとまったく同じです:
出力は指定されていません(4行目は取り除かれています)
最後の行は
>
で始まるので、プロセシングに結果ビューアからオブジェクトを利用できるようにするよう指示しています
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]])
このスクリプトは、ベクタレイヤ(Layer
)のフィールド(Field
)を入力として使用し、*QQプロット*(分布の正規性をテストする)を作成します。
プロットは自動的にプロセシング 結果ビューア に追加されます。