No parece haber una manera de encontrar directamente la capa primaria de un objeto de entidad o si está seleccionada de un método en la clase QgsFeature.
Un enfoque similar a vlayer.selectedFeatures()
es probar si feat.id()
está dentro vlayer.selectedFeaturesIds()
. QgsFeatureIds no son valores únicos en comparación con otras capas vectoriales, solo dentro de su propia capa.
Alternativamente, puede comenzar vlayer.selectedFeatures()
e iterar sobre esas características, en lugar de todas las características del proveedor.
Otro enfoque es reunir inicialmente conjuntos (o listas) de identificadores de entidad seleccionados y no seleccionados para una capa vectorial dada:
# 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
Parece que no puedo encontrar una sola llamada para recuperar una referencia a todas las características (o identificadores) para una capa vectorial (es decir, todavía tengo que usar QgsVectorLayer.select()
e iterar con QgsVectorLayer.nextFeature()
).
Editar : el código actualizado para reflejar QgsVectorLaer puede manejar llamadas de selección (no es necesario obtener el proveedor directamente), y no estropea las funciones seleccionadas reales en el lienzo del mapa, lo que requeriría setSelectedFeatures()
una actualización.
Edición 2 : después de crear conjuntos de ID de características, puede iterar sobre ellos y usarlos QgsVectorLayer.featureAtId(featid)
para acceder a la característica.