Il ne semble pas y avoir de moyen de trouver directement le calque parent d'un objet d'entité ou s'il est sélectionné à partir d'une méthode de la classe QgsFeature.
Une approche similaire à vlayer.selectedFeatures()
consiste à tester si le feat.id()
est vlayer.selectedFeaturesIds()
. Les QgsFeatureIds ne sont pas des valeurs uniques par rapport aux autres couches vectorielles, uniquement dans leur propre couche.
Alternativement, vous pouvez commencer par vlayer.selectedFeatures()
et parcourir ces fonctionnalités, au lieu de toutes les fonctionnalités du fournisseur.
Une autre approche consiste à rassembler initialement des ensembles (ou des listes) d'ID d'entités sélectionnés et non sélectionnés pour une couche vectorielle donnée:
# 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
Je n'arrive pas à trouver un seul appel pour récupérer une référence à toutes les fonctionnalités (ou identifiants) pour une couche vectorielle (c'est-à-dire que je dois encore utiliser QgsVectorLayer.select()
et itérer avec QgsVectorLayer.nextFeature()
).
Modifier : le code mis à jour pour refléter QgsVectorLaer peut gérer l'appel sélectionné (pas besoin d'obtenir directement le fournisseur), et ne gâche pas les fonctionnalités sélectionnées dans le canevas de carte, qui nécessiterait setSelectedFeatures()
une mise à jour.
Edit 2 : après avoir créé des ensembles d'ID d'entité, vous pouvez les parcourir et les utiliser QgsVectorLayer.featureAtId(featid)
pour accéder à l'entité.