Здається, не існує способу безпосередньо знайти батьківський шар об’єкта функції або вибрати його з методу класу 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, може обробляти вибраний виклик (не потрібно безпосередньо отримувати провайдера) і не псує фактичні обрані функції на полотні карти, які потребують setSelectedFeatures()
оновлення.
Редагування 2 : після QgsVectorLayer.featureAtId(featid)
складання наборів ідентифікаторів функцій ви можете переглядати їх і використовувати для доступу до функції.