Похоже, нет способа напрямую найти родительский слой объекта объекта или выбрать его из метода в классе QgsFeature.
Похожий подход vlayer.selectedFeatures()
заключается в том, чтобы проверить, есть ли feat.id()
в vlayer.selectedFeaturesIds()
. QgsFeatureIds не являются уникальными значениями по сравнению с другими векторными слоями, только внутри их собственного слоя.
В качестве альтернативы вы можете начать с vlayer.selectedFeatures()
этих функций и выполнять итерацию по ним, а не по всем функциям поставщика.
Еще один подход заключается в первоначальном сборе наборов (или списков) выбранных и невыбранных идентификаторов объектов для данного векторного слоя:
# 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
Кажется, я не могу найти ни одного вызова для получения ссылки на все объекты (или идентификаторы) для векторного слоя (то есть все еще должен использовать QgsVectorLayer.select()
и повторять с QgsVectorLayer.nextFeature()
).
Редактировать : обновленный код, отражающий QgsVectorLaer, может обрабатывать вызов select (не нужно напрямую связываться с провайдером) и не портит фактические выбранные функции на холсте карты, которые потребуются setSelectedFeatures()
для обновления.
Редактирование 2 : после создания наборов идентификаторов объектов вы можете выполнять итерации по ним и использовать QgsVectorLayer.featureAtId(featid)
для доступа к этой функции.