Tengo un problema / pregunta con respecto a python y QGIS. ¿Es posible obtener los datos de una característica seleccionada en QGIS usando python, y si es así, cómo?
En mi ejemplo, tengo una capa que muestra algunas parcelas para la planificación urbana. Si ahora selecciono una de las parcelas, quiero obtener los datos para exactamente esta parcela. Estos datos deben leerse mediante un script de Python y luego agregarse a un archivo PDF creado automáticamente. El último paso es fácil, pero no obtuve los datos de esta función seleccionada.
Es posible obtener datos de la capa activa, pero ¿también es posible obtener los datos de una característica seleccionada de esta capa?
Espero que me pueda ayudar. Saludos
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 lasQGIS
versiones>= 2.0
ahora usa la función enQgsFeature.attributes()
lugar deQgsFeature.attributeMap()
. Las dos funciones no son exactamente las mismas:attributes()
ahora devuelve una lista , mientras que la anteriorattributeMap()
devolvió un diccionario . Tómese un momento para navegar por la documentación de la API paraQgsFeature.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):
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 uncounty
atributo. Para obtener elcounty
valor de una ciudad específica que ha seleccionado (por ejemploHelena, AR
), haga lo siguiente en la consola de Python:Si desea los valores de todos los campos en la tabla de atributos de la ciudad, simplemente usaría:
fuente
Me gustaría agregar algo útil a la respuesta proporcionada por J. Taylor y señalar que la respuesta actual aceptada de 2012 ya no es correcta:
El objeto QgsFeature admite
__geo_interface__
atributos útiles , que devuelve un diccionario de una característica dada. El diccionario está en realidad en un estándar GeoJSON, por lo que se incluyen todos los pares de atributos-valores y la geometría. La característica existe desde hace algún tiempo, descrita por primera vez por Sean Gillies en algún momento de 2012, con un ejemplo de uso aquí . No pude encontrar ninguna información de qué versión de QGIS está disponible y aún no he probado QGIS 3, pero seguramente estaba disponible al menos desde QGIS 2.14.TL; DR:
fuente