機能オブジェクトの親レイヤーを直接検索する方法や、QgsFeatureクラスのメソッドから選択されるかどうかはありません。
同様のアプローチvlayer.selectedFeatures()
は、feat.id()
がにあるかどうかをテストすることですvlayer.selectedFeaturesIds()
。QgsFeatureIdsは他のベクターレイヤーと比較して一意の値ではなく、独自のレイヤー内のみです。
または、vlayer.selectedFeatures()
プロバイダーのすべての機能の代わりに、これらの機能から始めて反復することもできます。
さらに別のアプローチは、特定のベクターレイヤーの選択されたフィーチャIDと選択されていないフィーチャIDのセット(またはリスト)を最初に収集することです。
# previous relevant code
set_selids = set(vlayer.selectedFeaturesIds())
feat = QgsFeature()
vlayer.select([], QgsRectangle(), False)
set_allids = set()
while vlayer.nextFeature(feat):
set_allids.add(feat.id())
set_notselids = set_allids - set_selids
print set_allids
print set_selids
print set_notselids
ベクターレイヤーのすべての機能(またはID)への参照を取得するための単一の呼び出しを見つけることができないようです(つまり、を使用QgsVectorLayer.select()
して反復する必要がありますQgsVectorLayer.nextFeature()
)。
編集:QgsVectorLaerを反映するように更新されたコードは、選択呼び出しを処理でき(プロバイダーを直接取得する必要はありません)、setSelectedFeatures()
更新が必要なマップキャンバスで実際に選択された機能を台無しにしません。
編集2:機能IDセットを構築した後、それらを反復処理し、を使用QgsVectorLayer.featureAtId(featid)
して機能にアクセスできます。