LoginSignup
3
0

More than 1 year has passed since last update.

R on Q

Posted at

FOSS4G Advent Calendar 2022 14日目。 QGIS の Processing R Provider プラグインのご紹介です。

すみません。
この記事は書きかけです。

R (R 言語)とは

R とは統計解析用の言語です。一見するとググラビリティの低い名前の言語ですが、アルファベット1文字はかえって他の影響が少ないのか、 Google 検索であれば特に問題なく R 言語と認識してくれます。

R では、平均などをとるために使われる数値の一次元配列(ベクトル)はもちろん、複数の情報を管理できる表形式のデータフレームなどのデータ構造を利用することができます。また( GIS 系のライブラリを使うことで)データフレームの中に位置情報も含めることができるため、 GIS データも取り扱うこともできます。

高度な統計分析用途でももちろん有用ですが、 GIS データに対して、属性や空間関係で結合したりや集計するなども容易に行うことができます。このへんの処理は QGIS でも可能ですが、 R も結構得意です。

Processing R Provider

とはいえ、入力や中間出力されたデータの内容を地図上で確認しながら処理方針を定めていったり、既存の GIS 機能と組み合わせたいなどで QGIS を使いたいケースは往々にしてあるでしょう。

Processing R Provider プラグインは、 R で記述した処理を、 QGIS のプロセシングツールの処理メニューの中に簡便に追加することができるプラグインです。追加した処理は通常のプロセシングメニューとしてやグラフィカルモデラーで利用することができます。

プラグイン作者は North Road 社で、メンテナは QGIS のコア開発にも携わっている Nyall Dawson 氏です。

インストール

R のインストール

Processing R Provider でスクリプトを動かすエンジンとして R 本体が必要となります。下記より R をダウンロードしてインストールしてください。

Windows

MacOS

プラグインのインストール

プラグインのインストールは、いつものとおり QGIS の「プラグインの管理とインストール」から Processing R Provider を探してインストールすることができます。

image.png

ここでプロセシングツールボックスが次のような表示になっていれば成功です。上部の R アイコンが表示されない場合は、 QGIS を再起動することで表示されるようになります。

image.png

プラグインの環境設定

次に QGIS 側で R の設定を行う必要があります。

[設定] → [オプション] → [プロセシング] → [プロバイダ] → [R] より R folderUse 64 bit Version を適切な値にします。 Windows の場合、 R folder は通常 C:\Program Files\R\R-x.y.z など、 bin フォルダなどの親フォルダを指定します。

なお R 自身の 32 bit のサポートは R 4.1.x までなので、いま新たに R をインストールした人は 64 bit 版しかインストールされていないはずです。ですので Use 64 bit Version にチェックをつけるようにしてください。

image.png

使い方

使ってみる

数値型の属性をもつベクタデータを用意して、プロセシングツールボックスにある [R] → [Example Scripts] → [Min_Max] を起動してみます。

ここで次のようなダイアログがでたら環境設定が間違えている可能性があります。 :-(

image.png

起動できると次のようなプロセシングツールでよくあるウィンドウが表示されます。このサンプルは対象のレイヤの、特定の属性について最小値と最大値を求めるツールです。

image.png

必要なライブラリのインストール

初回起動時には R で GIS データを扱うために必要なライブラリをインストールするため、時間がかかります。手元で新しい環境を作って試してみると10分くらいかかりました。

スクリプトの書式

先ほどの処理の元となったスクリプトが以下となります。

##Example scripts=group
##Min_Max=name
##Layer=vector
##Field=Field Layer
##Min=output number
##Max=output number
##Summary=output string

Min <- min(Layer[[Field]])
Max <- max(Layer[[Field]])
Summary <- paste(Min, "to", Max, sep = " ")

## からはじまる行はメタデータや入出力の内容を宣言するもので、それ以降が本処理です。 Processing R Provider を使うと、宣言に応じて自動的にプロセシングツール用のダイアログで起動してくれます。

Python 用のプロセシングツール用のインタフェースなどは用意されており、 Python でも新たにメニューを追加することができます。ただ、そのために必要な記述は若干面倒です。

基本文法

文法は、以下のとおり左辺に変数名、右辺にそのタイプを記載します。

variable_name=variable_type [default_value/from_variable]

メタデータ

##Example scripts=group
##Min_Max=name

上記は Example scripts というグループ(フォルダ)内の Min_Max という名前のツールであることを宣言しています。

入力

##Layer=vector

Layer という名前で、ベクタ形式の入力レイヤを使用することを宣言しています。

##Field=Field Layer

Field という名前で、先ほど選択した Layer レイヤの属性を使用することを宣言しています。

出力

##Min=output number
##Max=output number
##Summary=output string

右辺に output キーワードがあるため、これらは出力として返される変数であることを意味しています。今回のサンプルはそれぞれ numberstring だったためプロセシングツールのログ欄に文字として出力されます。

もちろん出力結果をレイヤ形式で指定することもできます。

その他

そのほか、

サンプル

プロセシングツールの理念的には、処理の単位は細かく用意し、組み合わせて目的を達成する方が正義だとは思いますが、ここでは目的を達する処理をひとまとめにしたスクリプトを書いてみます。

最頻( KDE )

  • ポリゴンレイヤ A
    • 種別を表す Type 属性
  • 点レイヤ B
    • 種別を表す Type 属性
    • 数値形式の Value 属性

上記のようなふたつのレイヤがあったとき、ポリゴン A の内部に存在する点 B の集計を行う。ただし、種別 Type が一致するものを集計の対象とし、集計方法は最頻とする。

といった処理を行いたいとします。

QGIS のプロセシングツールでやるとしたら、条件で集計対象を指定するためにまず「属性でレイヤ分割」で分割したのち、分割された属性ごとにそれぞれを「空間結合(集計つき)」し、「ベクタレイヤのマージ」でまとめるとかでしょうか? 属性の取り得る値が固定されていればまだいいですが、不定であれば難しそうです。

すみません。
今週末には仕上げたいと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0