Wydaje się, że nie ma sposobu bezpośredniego znalezienia warstwy rodzicielskiej obiektu cechy lub tego, czy jest on wybrany z metody w klasie QgsFeature.
Podobnym podejściem vlayer.selectedFeatures()
jest sprawdzenie, czy feat.id()
jest w vlayer.selectedFeaturesIds()
. QgsFeatureIds nie są unikatowymi wartościami w porównaniu z innymi warstwami wektorowymi, tylko w obrębie własnej warstwy.
Alternatywnie możesz zacząć od vlayer.selectedFeatures()
tych funkcji i iterować je zamiast wszystkich funkcji dostawcy.
Jeszcze innym podejściem jest początkowe zebranie zestawów (lub list) wybranych i niewybranych identyfikatorów funkcji dla danej warstwy wektorowej:
# 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
Nie mogę znaleźć pojedynczego wezwania do pobrania odwołania do wszystkich funkcji (lub identyfikatorów) dla warstwy wektorowej (tj. Nadal muszę używać QgsVectorLayer.select()
i iterować QgsVectorLayer.nextFeature()
).
Edycja : zaktualizowany kod, aby odzwierciedlić QgsVectorLaer może obsługiwać wybrane połączenia (nie trzeba bezpośrednio kontaktować się z dostawcą) i nie psuje faktycznych wybranych funkcji w obszarze roboczym mapy, które wymagałyby setSelectedFeatures()
aktualizacji.
Edycja 2 : po zbudowaniu zestawów identyfikatorów funkcji możesz iterować nad nimi i QgsVectorLayer.featureAtId(featid)
uzyskiwać dostęp do funkcji.