Es scheint keine Möglichkeit zu geben, die übergeordnete Ebene eines Feature-Objekts direkt zu finden oder ob sie aus einer Methode in der QgsFeature-Klasse ausgewählt wurde.
Ein ähnlicher Ansatz vlayer.selectedFeatures()
besteht darin, zu testen, ob das in feat.id()
ist vlayer.selectedFeaturesIds()
. QgsFeatureIds sind keine eindeutigen Werte im Vergleich zu anderen Vektorebenen, sondern nur innerhalb ihrer eigenen Ebene.
Alternativ können Sie mit vlayer.selectedFeatures()
diesen Funktionen beginnen und diese durchlaufen, anstatt mit allen Funktionen des Anbieters.
Ein weiterer Ansatz besteht darin, zunächst Sätze (oder Listen) ausgewählter und nicht ausgewählter Feature-IDs für eine bestimmte Vektorebene zu erfassen:
# 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
Ich kann anscheinend keinen einzigen Aufruf zum Abrufen eines Verweises auf alle Features (oder IDs) für eine Vektorebene finden (dh muss noch verwendet QgsVectorLayer.select()
und iteriert werden QgsVectorLayer.nextFeature()
).
Bearbeiten : Der aktualisierte Code, der QgsVectorLaer widerspiegelt, kann ausgewählte Anrufe verarbeiten (es ist nicht erforderlich, den Anbieter direkt zu kontaktieren) und bringt die tatsächlich ausgewählten Funktionen im Kartenbereich nicht durcheinander, die setSelectedFeatures()
aktualisiert werden müssten .
Bearbeiten 2 : Nachdem Sie Feature-ID-Sätze erstellt haben, können Sie diese durchlaufen und QgsVectorLayer.featureAtId(featid)
für den Zugriff auf das Feature verwenden.