PyQGISでレイヤー範囲を取得しますか?


10

r.neighborsラスタ用のグラスアルゴリズムを使用して処理スクリプトを記述しようとしています。このアルゴリズムにGuiを使用する場合、GRASSレイヤーの範囲フィールドを空白のままにして、最小範囲を使用できます。逆に、Pythonコンソールで使用すると、このような「デフォルト」値を入力する方法がわかりません。ここに画像の説明を入力してください

私は上を見https://docs.qgis.org/2.2/en/docs/user_manual/processing/console.htmlある程度パラメータのための4つの座標入力に必須であると考えられること。使用してみましたiface.mapCanvas().extent()が、返されたオブジェクトはパラメーターとして受け入れられず、座標を取得する方法が見つかりません。

xmin, ymin, xmax, ymaxPyQGISのレイヤーを取得してアルゴリズムに入力する方法はありますか?私はそれを完全に間違っていますか?


あなたの答えをありがとう、私も私の側でこの解決策を見つけました...実際には、gis.stackexchange.com / questions / 213428 / …でも同じように答えられましたが、括弧 extentが欠けているため、機能しませんでした。 。
クレメント

回答:


12

答えは私が最近書いた投稿にほぼ完全に含まれています。

エクステントは、次のコードでQgsRectangle()オブジェクトとして返されます。

layer = iface.activeLayer() # load the layer as you want
ext = layer.extent()

現在のレイヤーの頂点の座標を取得するには、次のコードを実行します。

xmin = ext.xMinimum()
xmax = ext.xMaximum()
ymin = ext.yMinimum()
ymax = ext.yMaximum()
coords = "%f,%f,%f,%f" %(xmin, xmax, ymin, ymax) # this is a string that stores the coordinates

最後に、r.neighborsPythonコンソールからモジュールを使用するために次のコードを実行できます。

processing.runalg("grass7:r.neighbors",layer,0,3,False,False,"",coords,0,None)

5

あなたはちょうど一歩先に進む必要がある正しい軌道に乗っていました。QgsRectangleQGISドキュメントを参照してください

基本的には、次のことを行います。

  • 現在のレイヤーを取得する

    layer = iface.activeLayer()
  • QgsRectangleオブジェクトである範囲を取得します

    ex = layer.extent()
  • そしてそこに値を抽出します:

    xmax = ex.xMaximum()
    ymax = ex.yMaximum()
    xmin = ex.xMinimum()
    ymin = ex.yMinimum()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.