Eu só queria postar algumas atualizações na resposta anterior à luz das alterações na API Python do QGIS desde a versão 2.0 .
Como antes, você obteria uma lista dos recursos selecionados iface.activeLayer().selectedFeatures()
, no entanto, nas QGIS
versões >= 2.0
agora você usa a função em QgsFeature.attributes()
vez de QgsFeature.attributeMap()
. As duas funções não são exatamente as mesmas: attributes()
agora retorna uma lista , enquanto as antigas attributeMap()
retornaram um dicionário . Tome um momento para navegar na documentação da API para QgsFeature.attributes()
, QgsAttributes
, etc entender como atributos são armazenados / acessado.
Se você estiver interessado, pode ler sobre algumas das razões por trás das alterações da API neste segmento de lista de discussão: [Qgis-developer] novos recursos de seleção de API de vetor . Resumidamente (nas palavras do desenvolvedor do QGIS, Martin Dobias):
Acesso a atributos: não existe f.attributeMap()
mais, porque os atributos agora estão armazenados em um vetor (Python :) em list
vez de em um mapa (Python :) dict
. QgsFeature
A classe emula o objeto de contêiner python
4 para que você possa acessar atributos como se a QgsFeature
instância fosse uma lista ou dicionário, com chaves sendo índices ou nomes de campos:
f[0]
... primeiro atributo
f["type"]
... atributo chamado "type"
Ainda é possível obter todos os atributos: f.attributes()
retorna uma lista de valores.
Portanto, como um exemplo específico do que você perguntou como fazer (obtenha dados para um único recurso selecionado), suponha que você tenha uma camada de city
recursos contendo cada um com uma lista de atributos, incluindo um county
atributo. Para obter o county
valor para uma cidade específica que você selecionou (por exemplo Helena, AR
), faça o seguinte no console do Python:
city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'
Se você deseja os valores de todos os campos na tabela de atributos da cidade, basta usar:
cityData = city.attributes()