Je voulais juste publier quelques mises à jour de la réponse précédente à la lumière des modifications apportées à l'API QGIS Python depuis la version 2.0 .
Comme auparavant, vous obtiendrez une liste des fonctionnalités sélectionnées avec iface.activeLayer().selectedFeatures()
, mais dans les QGIS
versions, >= 2.0
vous utilisez maintenant la fonction à la QgsFeature.attributes()
place de QgsFeature.attributeMap()
. Les deux fonctions ne sont pas exactement les mêmes: attributes()
renvoie maintenant une liste , alors que l'ancienne attributeMap()
renvoyait un dictionnaire . Prenez un moment pour parcourir la documentation de l' API pour QgsFeature.attributes()
, QgsAttributes
, etc pour comprendre comment les attributs sont stockés / accessibles.
Si vous êtes intéressé, vous pouvez lire certaines des raisons derrière les changements d'API sur ce fil de liste de diffusion: [Qgis-developer] nouvelles fonctionnalités de sélection de l'API vectorielle . En bref (selon les mots du développeur QGIS Martin Dobias):
Accès aux attributs: il n'y en a f.attributeMap()
plus, car les attributs sont désormais stockés dans un vecteur (Python:) list
au lieu d'une carte (Python:) dict
. QgsFeature
La classe émule l'objet conteneur Python
4 afin que vous puissiez accéder aux attributs comme si l' QgsFeature
instance était une liste ou un dictionnaire, les clés étant soit des index de champ, soit des noms de champ:
f[0]
... premier attribut
f["type"]
... attribut nommé "type"
Il est toujours possible d'obtenir tous les attributs: f.attributes()
retourne une liste de valeurs.
Donc, à titre d'exemple de ce que vous avez demandé comment faire (obtenir des données pour une seule entité que vous avez sélectionnée), supposons que vous disposiez d'une couche d' city
entités contenant chacune une liste d'attributs, y compris un county
attribut. Pour obtenir la county
valeur d'une ville spécifique que vous avez sélectionnée (par exemple Helena, AR
), procédez comme suit dans la console Python:
city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'
Si vous voulez les valeurs de tous les champs de la table attributaire de la ville, vous utiliserez simplement:
cityData = city.attributes()