Solo quería publicar algunas actualizaciones a la respuesta anterior a la luz de los cambios en la API QGIS Python desde la versión 2.0 .
Como antes, obtendría una lista de características seleccionadas con iface.activeLayer().selectedFeatures()
, sin embargo, en las QGIS
versiones >= 2.0
ahora usa la función en QgsFeature.attributes()
lugar de QgsFeature.attributeMap()
. Las dos funciones no son exactamente las mismas: attributes()
ahora devuelve una lista , mientras que la anterior attributeMap()
devolvió un diccionario . Tómese un momento para navegar por la documentación de la API para QgsFeature.attributes()
, QgsAttributes
, etc para entender cómo se almacenan / acceder a los atributos.
Si está interesado, puede leer sobre algunos de los fundamentos de los cambios de API en este hilo de la lista de correo: [Qgis-developer] nuevas características de selección de api de vector . Brevemente (en palabras del desarrollador de QGIS Martin Dobias):
Acceso a atributos: ya no existe f.attributeMap()
, porque los atributos ahora se almacenan en un vector (Python:) en list
lugar de un mapa (Python:) dict
. QgsFeature
La clase emula el objeto contenedor de Python
4 para que pueda acceder a los atributos como si la QgsFeature
instancia fuera una lista o un diccionario, con claves como índices de campo o nombres de campo:
f[0]
... primer atributo
f["type"]
... atributo llamado "tipo"
Todavía es posible obtener todos los atributos: f.attributes()
devuelve una lista de valores.
Entonces, como un ejemplo específico de lo que preguntó cómo hacer (obtener datos para una sola característica que ha seleccionado), suponga que tiene una capa de city
características que contienen y que cada una tiene una lista de atributos, incluido un county
atributo. Para obtener el county
valor de una ciudad específica que ha seleccionado (por ejemplo Helena, AR
), haga lo siguiente en la consola de Python:
city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'
Si desea los valores de todos los campos en la tabla de atributos de la ciudad, simplemente usaría:
cityData = city.attributes()