回答:
次の手順を実行します:
レイヤー参照を取得します。
cLayer = iface.mapCanvas().currentLayer()
式からfeatureIteratorを取得します。
expr = QgsExpression( "\"ogc_fid\"=482" )
it = cLayer.getFeatures( QgsFeatureRequest( expr ) )
2.で取得した結果から機能IDのリストを作成します。
ids = [i.id() for i in it]
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'"
。ところで、コメントに含めたリンクは、静的属性BinaryOperatorText
がPythonバインディングでは利用できないことを実際に示していますが、演算子はQgsExpression
Pythonバインディングで使用されている場合でも機能します。
expr = QgsExpression("\"police_ref\" = 'P0580996'")
。検索語に引用符を追加しようとしましたが(単一引用符の場合)、違いはありません。私は照会てる属性テーブルを開いて、そこビルダー表現を使用する場合、私は例として使用police_refは非常に最初の行である、ではなくそれ以外の場合は興味深いことに、それは選択をしない
これはQGIS Pythonコンソールで私のために働いた
layer = qgis.utils.iface.activeLayer()
layer .selectByExpression(" \"ogc_fid\" = '{}' ".format(482))
"\"ogc_fid\"=482 AND name=\"hello world\""
?ここでは、これはpythonで利用できないと述べています:qgis.org/api/…。この制限を回避する方法をご存知でしょうか?