QGIS プロセッシング Scriptsを使いたい その3
指定したフィールドのみ残したベクトルファイルの作成
簡単なスクリプトをもう1つ。
行っている処理としては、
- 入力としてベクトルファイルを受け取る(inputに入力ファイル名が入る)
- 入力ベクトルレイヤから、残したいフィールド名を1つだけ受け取る(fieldNameに入る)
- processing.getobject()でファイル名→QgsVectorLayer
- 残したいフィールドの定義だけ抜き出し、出力ファイルに設定するたまにQgsFieldsを用意
- 残したいフィールド以外は、名前をリストに入れておく、後で削除用に使用
- processingのVectorWriterクラスを利用してベクトルファイル作成
- 入力ベクトルレイヤの図形要素に順次アクセス
- 要らないフィールドは削除した状態で、出力ベクトルファイルへ追加
というものです。
from qgis.core import * from PyQt4.QtCore import * from PyQt4.QtGui import * from processing.core.VectorWriter import VectorWriter ##[Test scripts]=group ##input=vector ##fieldName=field input ##output=output vector vectorLayer = processing.getobject(input) provider = vectorLayer.dataProvider() fields = provider.fields() newFields = QgsFields() newFields.append(fields.field(fieldName)) deleteFields = [] for field in fields: if field.name() != fieldName: deleteFields.append(field.name()) writer = VectorWriter(output, provider.encoding(), newFields, provider.geometryType(), vectorLayer.crs()) features = vectorLayer.getFeatures() for feature in features: for deleteField in deleteFields: feature.deleteAttribute(provider.fieldNameIndex(deleteField)) writer.addFeature(feature) del writer
追記 2014.7.24
QGIS2.4では、processing.getobject()がprocessing.getObject()になっているので注意!!
processingで用意されているクラス
ラスタファイルを作成するのに使用したRasterWriter、ベクトルファイルを作成するのに使用したVectorWriterはprocessingで用意されたクラスになります。
QGISインストールディレクトリ/python/plugins/processing/core
以下に様々なファイルがありますので覗いてみましょう。
RasterWriterが入っているRasterWriter.py、VectorWriterが入っているVectorWriter.pyともに短いソースですので内容を確認してみることをお勧めします。引数として何を渡していたかも、すぐにわかると思います。