QGISで自動化!Pythonコンソールの使い方
この記事でわかること
- QGISにおけるPythonの使い方
- QGISでの処理の自動化
こんな人におすすめ
- QGISで、画面上で繰り返しの操作をするのが辛くなってきた方
- 複数の解析処理をまとめて行いたい方
はじめに
この記事では、QGISの「Pythonコンソール」機能について解説し、対話型コンソールとコードエディタを使ったPythonコードの実行方法を紹介します。動画でもご紹介していますので、詳しい操作方法などはぜひ動画をご覧ください。
Pythonコンソールとは
QGISのプラグイン開発等で使われるPythonを、対話型コンソールとコードエディタから実行できる機能です。プラグインを開発する規模ではない自動化や、Python用の QGIS API「PyQGIS」の挙動を確認する時などに有用です。
対話型コンソールの使い方
ではまず初めに、Pythonコンソールを開いてみましょう。メニューバーより、「プラグイン」→「Pythonコンソール」の順でクリックします。
すると、QGISの画面の下部にPythonコンソールのパネルが表示されます。
入力領域(7のエリア)にPythonコマンドを入力すると、出力領域(8のエリア)に結果が出力されCUIのように対話的にコマンドが実行できます。出力が増え、可読性が低下した場合は出力領域のクリア(1のボタン)が可能です。また、コンソールは「オプション」からテーマを変更して見た目を変えることもできます。
各機能の説明は、以下の表のとおりです。
No. | 機能 | 説明 |
---|---|---|
1 | コンソールをクリア | Pythonコンソールに表示されている全てのテキストや出力を削除します。 |
2 | コマンドの実行 | 入力したPythonコードを実行します。 |
3 | エディタの表示 | QGISの組み込みエディタを表示します。 |
4 | オプション | Pythonコンソールの設定画面を開きます。 |
5 | ヘルプ | PythonコンソールやPyQGISに関連するヘルプドキュメントを表示します。 |
6 | コードエディタをドッキング | コードエディタをQGISのメインウィンドウにドッキング(固定)します。 |
7 | 出力領域 | Pythonコンソールにおける出力(実行結果やエラーメッセージなど)が表示される部分を指します。 |
8 | 入力領域 | Pythonコンソールにコードを入力するための領域です。 |
エディタの使い方
エディタではPythonスクリプトを実装して、実行や保存することができます。 QGISプラグイン開発においても実装予定の処理を試したい場合にも役に立ちます。特に、エディタとコンソールのスコープは同一のため、エディタで実装した関数の引数を変えて対話的に検証することも可能です。
各機能の説明は、以下の表のとおりです。
No. | 機能 | 説明 |
---|---|---|
1 | 開く | 既存のPythonスクリプトファイルをエディタに読み込みます。 |
2 | 外部エディタで開く | 選択したスクリプトファイルを外部のテキストエディタで開きます。 |
3 | 保存 | 現在エディタに表示されているスクリプトを保存します。 |
4 | 名前を付けて保存 | エディタ内のスクリプトを実行します。 |
5 | 実行 | エディタ内のスクリプトを実行します。 |
6 | 切り取り | 選択したテキストを切り取ります。 |
7 | コピー | 選択したテキストをコピーします。 |
8 | 貼り付け | クリップボードに保存されたテキストをエディタに貼り付けます。 |
9 | テキスト検索 | エディタ内のテキストを検索します。特定の単語やコードの一部を探す際に便利です。 |
10 | コメントを切り替え | 選択した行をコメントアウトまたはコメント解除します。 |
11 | コードを再整形 | コードのフォーマットを整えます。 |
12 | オブジェクトインスペクタ | スクリプト内のオブジェクトや変数をインスペクト(調査)するためのツールです。 |
13 | エディタ | エディタ自体を指します。ここでコードを入力・編集します。スクリプトの作成や修正はこのエディタ上で行います。 |
Pythonのサンプルコード
では、ここからPythonを使って簡単なレイヤの操作を行ってみます。使用するデータは、国土数値情報の湖沼データです。ダウンロードしてQGISに追加しましょう。
追加した湖沼レイヤに対して、レイヤのフィーチャー数と、式で選択したフィーチャーにフォーカスしてみます。下記のコードをエディタに入力して「実行」をクリックします。
#レイヤ名を指定して湖沼レイヤを取得
layer = QgsProject.instance().mapLayersByName('W09-05-g_Lake')[0]
#フィーチャーの数を出力
print(layer.featureCount())
#W09_001フィールドの値がさっぽろ湖を選択
layer.selectByExpression('"W09_001"=\'さっぽろ湖\'')
#選択したフィーチャーの1番目を変数に格納
selected_feature = layer.selectedFeatures()[0]
#キャンバスを変数に格納
canvas = iface.mapCanvas()
#選択したフィーチャーにフォーカス
canvas.setExtent(selected_feature.geometry().boundingBox())
#キャンバスの描画を更新
canvas.refresh()
すると、マップキャンバスでは「さっぽろ湖」にフォーカスされ、出力領域には湖沼レイヤの地物数として「556」が出力されていることがわかります。
おわりに
今回はPythonコンソールの操作方法について簡単に解説しました。簡単にコードの実行が可能でレイヤやキャンバスなどの操作できるため、非常に有用でお勧めしたい機能でした。ぜひ使ってみてください。