pyqgisで式を使用して機能を選択する方法は?


11

式を使用してpyqgisで機能を選択するにはどうすればよいですか?

QgsExpressionを使用しようとしましたが、selectメソッドはそれを使用しません:

exp = QgsExpression("'ogc_fid' = 482")
cLayer = canvas.currentLayer()
cLayer.select(exp)

それは可能ですか?可能であれば、どうすればいいですか?

回答:


23

次の手順を実行します:

  1. レイヤー参照を取得します。

    cLayer = iface.mapCanvas().currentLayer()

  2. 式からfeatureIteratorを取得します。

    expr = QgsExpression( "\"ogc_fid\"=482" )

    it = cLayer.getFeatures( QgsFeatureRequest( expr ) )

  3. 2.で取得した結果から機能IDのリストを作成します。

    ids = [i.id() for i in it]

  4. 3.で取得したIDを持つ機能を選択します。

    cLayer.setSelectedFeatures( ids )


注:文字列値を使用して式を設定する場合は、次の方法でそのような値に引用符を追加する必要があります。

expr = QgsExpression( " \"name\" = 'my string' " )

文字列値が変数に由来する場合、これを行うことができます:

myVariable = 'my string'
expr = QgsExpression( " \"name\" = '{}' ".format(myVariable) )

どうやって言うの"\"ogc_fid\"=482 AND name=\"hello world\""?ここでは、これはpythonで利用できないと述べています:qgis.org/api/…。この制限を回避する方法をご存知でしょうか?
ジェニアイワノフ

2
フィールド名は二重引用符で囲む必要があり、文字列値は単一引用符で囲む必要があり、数字には引用符は必要ないことに注意してください。あなたの例では:"\"ogc_fid\"=482 AND \"name\"='hello world'"。ところで、コメントに含めたリンクは、静的属性BinaryOperatorTextがPythonバインディングでは利用できないことを実際に示していますが、演算子はQgsExpressionPythonバインディングで使用されている場合でも機能します。
ゲルマンカリージョ

@GermánCarrillo上記のメソッドを使用していますが、既知の値をコピーして貼り付けて検索しても値を返すことができません。列には文字列が含まれているため、を使用しましたexpr = QgsExpression("\"police_ref\" = 'P0580996'")。検索語に引用符を追加しようとしましたが(単一引用符の場合)、違いはありません。私は照会てる属性テーブルを開いて、そこビルダー表現を使用する場合、私は例として使用police_refは非常に最初の行である、ではなくそれ以外の場合は興味深いことに、それは選択をしない
アレックス・

@GermánCarrilloすみません、気にしないでください、私がどう違うかはわかりませんが、今すぐ機能を選択することができます!他の人が読む場合、一重引用符に改行文字は必要ありません
アレックス

3

これはQGIS Pythonコンソールで私のために働いた

layer = qgis.utils.iface.activeLayer()
layer .selectByExpression(" \"ogc_fid\" = '{}' ".format(482))

GIS SEへようこそ。新規ユーザーとして、ツアーに参加してください。既存の(そして受け入れられている)答えははるかに完全です。これはどのように改善されますか?一般に、評判ポイントを獲得する方法は未回答の質問に答えることですが、3年前の質問に対する新しい完全な回答は、前のソリューションの問題に具体的に対処する場合は歓迎されます(その場合、問題は必ず言及されるべきです) 。
ビンス

1

GUIインターフェイスでのみテストする必要があります:「式による選択」。動作する場合は、二重引用符 ""で囲まれたPythonコードに貼り付けることができます。

exp = QgsExpression("ogc_fid=482")

文字列と比較する場合、一重引用符 ''を追加できます。

exp = QgsExpression("ogc_fid='482'")

Pythonでも同じ原理で、二重引用符と一重引用符を区別できます。

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