Non sembra esserci un modo per trovare direttamente il livello padre di un oggetto funzione o se è selezionato da un metodo nella classe QgsFeature.
Un approccio simile vlayer.selectedFeatures()
è testare se feat.id()
è presente vlayer.selectedFeaturesIds()
. QgsFeatureIds non sono valori univoci rispetto ad altri livelli vettoriali, ma solo all'interno del proprio livello.
In alternativa, è possibile iniziare vlayer.selectedFeatures()
e scorrere su tali funzionalità, anziché su tutte le funzionalità del provider.
Ancora un altro approccio è quello di raccogliere inizialmente insiemi (o elenchi) di ID di funzionalità selezionati e non selezionati per un dato livello vettoriale:
# 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
Non riesco a trovare una singola chiamata per recuperare un riferimento a tutte le funzionalità (o ID) per un livello vettoriale (cioè devo ancora usare QgsVectorLayer.select()
e iterare con QgsVectorLayer.nextFeature()
).
Modifica : il codice aggiornato per riflettere QgsVectorLaer può gestire la chiamata selezionata (non è necessario ottenere direttamente il provider) e non confonde le effettive funzioni selezionate nell'area della mappa, che richiederebbe setSelectedFeatures()
l'aggiornamento.
Modifica 2 : dopo aver creato i set di ID funzionalità, è possibile scorrere su di essi e utilizzare QgsVectorLayer.featureAtId(featid)
per accedere alla funzione.