QGIS プロセッシング Scriptsで一括処理したい その1
QGIS プロセッシング Scripts
久々更新なのですっかり使い方忘れてます。QGIS プロセッシング Scriptsについては、下記の記事をまずはご参照ください。
QGIS プロセッシング Scriptsを使いたい その1 - waigani's diary
QGIS プロセッシング Scriptsを使いたい その2 - waigani's diary
QGIS プロセッシング Scriptsを使いたい その3 - waigani's diary
QGIS プロセッシング Scriptsを使いたい その4 - waigani's diary
フォルダ内のファイルをががーっと処理したい
フォルダ内にいくつかのshpefileがあるとして、同一の処理を全てのファイルに行うことを考えます。
下記のように、ランダムにポイントが配置されたshapefileが、それぞれの領域は重ならずに4ファイルあるとします。
それぞれのファイルにボロノイ分割を行います。使用する機能としては、メニューの【ベクタ】→【ジオメトリツール】→【ボロノイポリゴン】になります。processingから呼ぶ際の名称としては、'qgis:voronoipolygons'です。
processing scriptsで処理するとして、まず入力は、
- 入力先のフォルダを指定
- ボロノイ図作成に必要なオプションを指定
- 出力先のフォルダを指定
とします。
処理の内容としては、入力値のチェックなどなど省いて必要最小限にして、
- 入力先フォルダから拡張子.shpのファイル名を取得
- ファイル名からパス部分を削除して、出力先フォルダ名と'output_'を頭に付けて出力ファイル名作成
- processingを使って、'qgis:voronoipolygons'を実行
だけ書いてみます。log出力してるのは気にしない。最後の行は、グラフィカルモデラーでつないでいくときのおまじない程度に考えてください。
##[My Scripts]=group
##input_dir=folder
##buffer=number 0.000000
##output_dir=folder
##outputDir=output string
from processing.core.ProcessingLog import ProcessingLog
import os
import glob
ProcessingLog().addToLog(ProcessingLog.LOG_INFO, "input folder :" + input_dir)
ProcessingLog().addToLog(ProcessingLog.LOG_INFO, "output folder :" + output_dir)
files = glob.glob(os.path.join(input_dir, r'*.shp'))
for file in files:
outputFile = os.path.join(output_dir, 'output_'+os.path.basename(file))
processing.runalg('qgis:voronoipolygons', file, buffer, outputFile)
outputDir = output_dir
"voronoi.py"という名称にして、
ユーザのホームディレクトリ\.qgis2\processing\scripts
に置いておきます。qgisを再起動して、プロセッシングツールボックスから追加されたスクリプトを探して実行しましょう。
入力先フォルダ、出力先フォルダを指定して『run』すると、出力先フォルダにshapefileが作成されます。qgisでshapefileを開いてみると、ボロノイ図が作成されていることを確認出来ます。
改良点
バラバラにボロノイ図作っているので隙間開いてますね。読み込んだファイルを1ファイルにしてとか入れましょうか。