PythonコンソールからQGIS補間プラグイン関数(TINメソッド)(ラスター->補間)を呼び出したいです。
QGIS API内または処理アルゴリズムリスト内に対応する関数が見つかりません。SAGA三角形分割アルゴリズムを見つけました。これは正常に機能しますが、5〜10倍遅く、私の場合は速度が重要です。
それを実行する方法はありますか?
PythonコンソールからQGIS補間プラグイン関数(TINメソッド)(ラスター->補間)を呼び出したいです。
QGIS API内または処理アルゴリズムリスト内に対応する関数が見つかりません。SAGA三角形分割アルゴリズムを見つけました。これは正常に機能しますが、5〜10倍遅く、私の場合は速度が重要です。
それを実行する方法はありますか?
回答:
次の質問で完全なソリューションを提供できました。
QGISのPythonコンソールから補間ラスターを計算する方法は?
興味を引くように思われるため、ここでも答えを再投稿します。
pyqgis上のドキュメントは非常に自明ではないですが、私は(適切に関連する補間クラスを呼び出す方法を考え出しQgsInterpolator
、QgsTINInterpolator
、QgsIDWInterpolator
、QgsGridFileWriter
のpythonから)。スクリプトのすべてのステップを非常に詳細に説明します。
コアと解析モジュールをインポートし、レイヤータブでマウスクリックして選択することにより、補間に必要なベクターレイヤーを取得します。
import qgis.core
import qgis.analysis
layer = qgis.utils.iface.activeLayer()
必要なパラメーターを使用して補間クラスを準備します。LayerData構造体の初期化のための正確なパラメーターは、QGIS APIドキュメント(searchterm:QgsInterpolator)にあります。
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
z座標を使用せず、補間属性として最初の使用可能なフィールド(インデックス= 0)を取得し、入力タイプとしてPOINTSを使用していることに注意してください。
補間エンジンを選択します。ここでは、TIN補間法(QgsTINInterpolator
)とIDW 補間法()を選択できますQgsIDWInterpolator
。私はQgsTINInterpolator
自分のコードを取り入れました。
tin_interpolator = QgsTINInterpolator([layer_data])
のPythonリストをlayer_data
補間エンジンに渡す必要があることに注意してください!これにより、複数のlayer_dataシナリオを追加することもできます。
補間出力のエクスポートに必要なパラメーターをセットアップします(のドキュメントを参照QgsGridFileWriter
)。これらには、補間GUIと同様の情報(ファイルパス、範囲、解像度、列と行の数)が含まれます。
export_path ="C:/SomeFolder/output.asc"
rect = layer.extent()
res = 10
ncol = int( ( rect.xMaximum() - rect.xMinimum() ) / res )
nrows = int( (rect.yMaximum() - rect.yMinimum() ) / res)
output = QgsGridFileWriter(tin_interpolator,export_path,rect,ncol, nrows,res,res)
output.writeFile(True)
iface.addRasterLayer(export_path, "interpolation_output")
QgsGridFileWriter
ASCIIグリッド(.asc
)のみを書き込むため、出力ラスターのファイル拡張子に注意してください。writeFile()
メソッドを呼び出すことにより、データがディスクに書き込まれます。エクスポート後、グリッドファイルをラスタとしてキャンバスに追加できます。
import qgis.analysis
import qgis.core
layer = qgis.utils.iface.activeLayer()
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
tin_interpolator = QgsTINInterpolator([layer_data])
export_path = "E:/GIS_Workbench/script_output/test.asc"
rect = layer.extent()
res = 10
ncol = int( ( rect.xMaximum() - rect.xMinimum() ) / res )
nrows = int( (rect.yMaximum() - rect.yMinimum() ) / res)
output = QgsGridFileWriter(tin_interpolator,export_path,rect,ncol,nrows,res,res)
output.writeFile(True)
QGIS-APIは現在、バージョン3.0に書き換えられ、使用される補間-クラスがから移動していることに留意してくださいqgis.analysis
にqgis.core
!これは、このスクリプトの機能に大きな影響を与えるため、バージョン3.0用に書き直す必要があります!
プラグインマネージャーを使用してRaster Interpolationプラグインをインストールしている場合、これを行うことができます。
from rasterinterpolation.core.rasterinterpolator import RasterInterpolator
rastLayer = iface.activeLayer()
interpolator = RasterInterpolator(rastLayer,0,1)
a= interpolator.linear(QgsPoint(10.662629, 76.225421))
print a
注:値を出力したという事実以外に、上記のコードが何をするのか本当にわかりません。しかし、それはおそらく使用法を理解するのに役立つでしょう。
from rasterinterpolation import rasterinterpolation
(でも呼び出す方法または)を呼び出すためにどのモジュールわからなく。