Я просто хотел опубликовать некоторые обновления к предыдущему ответу в свете изменений в API QGIS Python, начиная с версии 2.0 .
Как и раньше, вы получите список выбранных функций с iface.activeLayer().selectedFeatures()
, однако в QGIS
версиях >= 2.0
вы теперь используете функцию QgsFeature.attributes()
вместо QgsFeature.attributeMap()
. Две функции не совсем одинаковы: attributes()
теперь возвращает список , тогда как старая attributeMap()
вернула словарь . Потратьте немного времени на просмотр документации по API QgsFeature.attributes()
и QgsAttributes
т. Д., Чтобы понять, как хранятся / доступны атрибуты.
Если вам интересно, вы можете прочитать о некоторых причинах изменений API в этой ветке списка рассылки: [Qgis-developer] новые возможности выбора векторных API-интерфейсов . Коротко (по словам разработчика QGIS Мартина Добиаса):
Доступ к атрибутам: больше f.attributeMap()
нет, потому что атрибуты теперь хранятся в векторе (Python:) list
вместо карты (Python:) dict
. QgsFeature
Класс эмулирует объект-контейнер Python
4, поэтому вы можете обращаться к атрибутам, как если бы QgsFeature
экземпляр был списком или словарем, а ключами были либо индексы полей, либо имена полей:
f[0]
... первый атрибут
f["type"]
... атрибут с именем "тип"
Все еще возможно получить все атрибуты: f.attributes()
возвращает список значений.
Итак, в качестве примера того, что конкретно вы спросили, как сделать (получить данные для одной выбранной вами функции), предположим, что у вас есть слой, содержащий city
объекты, у каждого из которых есть список атрибутов, включая county
атрибут. Чтобы получить county
значение для определенного города, который вы выбрали (скажем Helena, AR
), выполните следующие действия в консоли Python:
city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'
Если вы хотите получить значения всех полей в таблице атрибутов города, то вы просто должны использовать:
cityData = city.attributes()