重要
翻訳は あなたが参加できる コミュニティの取り組みです。このページは現在 98.48% 翻訳されています。
26.2. 付録D:QGIS Rスクリプト構文
Contributed by Matteo Ghetta - funded by Scuola Superiore Sant'Anna
プロセシングでRスクリプトを書くのは、特殊な構文のため、少しコツがいります。
プロセシングのRスクリプトは、まず 入力 と 出力 を定義し、それぞれの前に二重のハッシュ文字(##)を付けます。
Before the inputs, the group to place the algorithm in can be specified. If the group already exists, the algorithm will be added to it, if not, the group will be created. In the example below, the name of the group is My group:
##My Group=group
26.2.1. 入力
すべての入力データとパラメータは指定する必要があります。入力は何種類かあります:
ベクタ:
##Layer = vectorベクタのフィールド:
##F = Field Layer(ここで Layer はフィールドが属する入力ベクタレイヤの名前です)ラスタ:
##r = raster表:
##t = table数値:
##Num = number文字列:
##Str = stringブール値:
##Bol = booleanドロップダウンメニューの要素。項目はセミコロン
;で区切らなければなりません:##type=selection point;lines;point+lines
26.2.2. 出力
入力と同じように、各出力は、スクリプトの先頭で定義する必要があります。
ベクタ:
##output= output vectorラスタ:
##output= output raster表:
##output= output tableプロット:
##output_plots_to_html(以前の版では##showplots)R の出力を 結果ビューアー に表示するには、出力を表示したいコマンドの前に
>を置きます。
26.2.3. QGIS Rスクリプトの構文の概要
たくさんの入出力パラメータ型が用意されています。
26.2.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
26.2.3.2. 出力パラメータの型
パラメーター |
構文の例 |
|---|---|
vector |
Output = output vector |
raster |
Output = output raster |
table |
Output = output table |
file |
Output = output file |
注釈
プロセシング結果ビューア からプロットを png として保存することも、アルゴリズムインターフェースから直接プロットを保存することもできます。
26.2.3.3. スクリプト本体
スクリプト本体はR構文に従い、 Log パネルはスクリプトに問題がある場合に役立ちます。
スクリプトですべての追加ライブラリを読み込む必要があることを 覚えてください:
library(sp)
26.2.4. 例
26.2.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凡例中にあるベクタレイヤでアルゴリズムを実行し、ランダムなポイントの数を選択するだけです。結果のレイヤが地図に追加されます。
26.2.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 オブジェクトから変換する必要がなくなります。
26.2.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 テーブルに変換します。
26.2.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行目は取り除かれています)
最後の行は
>で始まるので、プロセシングに結果ビューアからオブジェクトを利用できるようにするよう指示しています
26.2.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プロット*(分布の正規性をテストする)を作成します。
プロットは自動的にプロセシング 結果ビューア に追加されます。