У меня есть проблема / вопрос, касающийся Python и QGIS. Можно ли получить данные одной выбранной функции в QGIS, используя python, и если да, то как?
В моем примере у меня есть слой, который показывает некоторые участки для городского планирования. Если я сейчас выберу одну из посылок, я хочу получить данные именно для этой посылки. Эти данные должны быть считаны скриптом Python, а затем добавлены в автоматически созданный файл PDF. Последний шаг прост, но я не получил данные из этой выбранной функции.
Можно получить данные из активного слоя, но возможно ли также получить данные из одного выбранного элемента этого слоя?
Надеюсь, ты сможешь мне помочь. С уважением
Я просто хотел опубликовать некоторые обновления к предыдущему ответу в свете изменений в API QGIS Python, начиная с версии 2.0 .
Как и раньше, вы получите список выбранных функций с
iface.activeLayer().selectedFeatures()
, однако вQGIS
версиях>= 2.0
вы теперь используете функциюQgsFeature.attributes()
вместоQgsFeature.attributeMap()
. Две функции не совсем одинаковы:attributes()
теперь возвращает список , тогда как стараяattributeMap()
вернула словарь . Потратьте немного времени на просмотр документации по APIQgsFeature.attributes()
иQgsAttributes
т. Д., Чтобы понять, как хранятся / доступны атрибуты.Если вам интересно, вы можете прочитать о некоторых причинах изменений API в этой ветке списка рассылки: [Qgis-developer] новые возможности выбора векторных API-интерфейсов . Коротко (по словам разработчика QGIS Мартина Добиаса):
Итак, в качестве примера того, что конкретно вы спросили, как сделать (получить данные для одной выбранной вами функции), предположим, что у вас есть слой, содержащий
city
объекты, у каждого из которых есть список атрибутов, включаяcounty
атрибут. Чтобы получитьcounty
значение для определенного города, который вы выбрали (скажемHelena, AR
), выполните следующие действия в консоли Python:Если вы хотите получить значения всех полей в таблице атрибутов города, то вы просто должны использовать:
источник
Я хотел бы добавить что-то полезное к ответу, предоставленному Дж. Тейлором, и указать, что текущий принятый ответ от 2012 года больше не является правильным:
Объект QgsFeature поддерживает полезный
__geo_interface__
атрибут, который возвращает словарь от заданной функции. Словарь фактически соответствует стандарту GeoJSON, поэтому вы получаете все пары атрибут-значение и геометрию. Эта функция существует уже некоторое время, впервые описанная Шоном Джиллисом в 2012 году, с примером использования здесь . Я не смог найти никакой информации, из какой версии QGIS она доступна, и я еще не пробовал QGIS 3, но, несомненно, был доступен по крайней мере из QGIS 2.14.TL; DR:
источник