Não parece haver uma maneira de encontrar diretamente a camada pai de um objeto de recurso ou se ele foi selecionado em um método na classe QgsFeature.
Uma abordagem semelhante para vlayer.selectedFeatures()
é para testar se o feat.id()
é no vlayer.selectedFeaturesIds()
. QgsFeatureIds não são valores exclusivos em comparação com outras camadas de vetor, apenas dentro de sua própria camada.
Como alternativa, você pode começar vlayer.selectedFeatures()
e iterar sobre esses recursos, em vez de todos os recursos do provedor.
Ainda outra abordagem é reunir inicialmente conjuntos (ou listas) de IDs de recursos selecionados e não selecionados para uma determinada camada vetorial:
# 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
Não consigo encontrar uma única chamada para recuperar uma referência a todos os recursos (ou IDs) de uma camada vetorial (ou seja, ainda tenho que usar QgsVectorLayer.select()
e iterar QgsVectorLayer.nextFeature()
).
Editar : código atualizado para refletir QgsVectorLaer pode lidar com chamadas de seleção (não é necessário obter o provedor diretamente) e não atrapalha os recursos selecionados reais na tela do mapa, o que exigiria setSelectedFeatures()
a atualização.
Editar 2 : depois de criar conjuntos de IDs de recursos, você pode iterar sobre eles e usar QgsVectorLayer.featureAtId(featid)
para acessar o recurso.