Я просто хотів опублікувати деякі оновлення попередньої відповіді у світлі змін у API QGIS Python з версії 2.0 .
Як і раніше, ви отримаєте список вибраних функцій iface.activeLayer().selectedFeatures()
, однак у QGIS
версіях >= 2.0
ви зараз використовуєте функцію QgsFeature.attributes()
замість QgsFeature.attributeMap()
. Дві функції не зовсім однакові: attributes()
тепер повертає список , тоді як стара attributeMap()
повертає словник . Знайдіть хвилину, щоб переглянути документацію API для QgsFeature.attributes()
, QgsAttributes
і т.д., щоб зрозуміти, як атрибути зберігаються / доступні.
Якщо вам цікаво, ви можете ознайомитись з деякими обґрунтуваннями змін API в цьому потоці списку розсилки: [Qgis-developer] new vector api select options . Коротко (зі слів розробника QGIS Мартіна Добіаса):
Доступ до атрибутів: більше f.attributeMap()
немає, тому що атрибути тепер зберігаються у векторі (Python:) list
замість карти (Python:) dict
. QgsFeature
клас емулює об'єкт контейнера python
4, щоб ви могли отримати доступ до атрибутів, як якщоби QgsFeature
екземпляр був списком або словником, при цьому ключі є або індексами поля, або іменами полів:
f[0]
... перший атрибут
f["type"]
... атрибут з назвою "type"
Ще можна отримати всі атрибути: f.attributes()
повертає список значень.
Отже, як приклад конкретно того, що ви запитували, як це зробити (отримати дані для однієї вибраної вами функції), припустимо, у вас був шар містять city
функції, у кожному з яких є список атрибутів, включаючи county
атрибут. Щоб отримати county
значення для вибраного міста (скажімо Helena, AR
), виконайте наступне на консолі Python:
city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'
Якщо ви хочете, щоб значення всіх полів у таблиці атрибутів міста були використані:
cityData = city.attributes()