Eu tenho um problema / pergunta sobre python e QGIS. É possível obter os dados de um recurso selecionado no QGIS usando python? Em caso afirmativo, como?
No meu exemplo, tenho uma camada que mostra algumas parcelas para o planejamento urbano. Se agora eu selecionar uma das parcelas, quero obter os dados exatamente dessa parcela. Esses dados devem ser lidos por um script python e depois adicionados a um arquivo PDF criado automaticamente. O último passo é fácil, mas não obtive os dados desse recurso selecionado.
É possível obter dados da camada ativa, mas também é possível obter os dados de um recurso selecionado dessa camada?
Espero que possa me ajudar. Saudações
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, nasQGIS
versões>= 2.0
agora você usa a função emQgsFeature.attributes()
vez deQgsFeature.attributeMap()
. As duas funções não são exatamente as mesmas:attributes()
agora retorna uma lista , enquanto as antigasattributeMap()
retornaram um dicionário . Tome um momento para navegar na documentação da API paraQgsFeature.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):
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 umcounty
atributo. Para obter ocounty
valor para uma cidade específica que você selecionou (por exemploHelena, AR
), faça o seguinte no console do Python:Se você deseja os valores de todos os campos na tabela de atributos da cidade, basta usar:
fonte
Gostaria de adicionar algo útil à resposta fornecida por J. Taylor e apontar que a resposta atual aceita de 2012 não está mais correta:
O objeto QgsFeature suporta
__geo_interface__
atributo útil , que retorna um dicionário de um determinado recurso. O dicionário está na verdade em um padrão GeoJSON, para que você inclua todos os pares de atributo-valor e geometria. O recurso já existe há algum tempo, descrito pela primeira vez por Sean Gillies em 2012, com um exemplo de uso aqui . Não consegui encontrar nenhuma informação de qual versão do QGIS está disponível e ainda não testei o QGIS 3, mas certamente estava disponível pelo menos no QGIS 2.14.TL; DR:
fonte