En QGIS, muchas operaciones solo deben aplicarse a una parte de los datos: un conjunto específico de entidades seleccionadas por el usuario.
En este artículo veremos cómo un plugin QGIS puede detectar, comprobar y procesar únicamente las entidades seleccionadas, sin correr el riesgo de modificar toda la capa por error.
El objetivo es doble: hacer los tratamientos más seguros y respetar la intención del usuario, manteniendo un código sencillo y accesible para principiantes.
Modificar una capa QGIS puede parecer arriesgado, especialmente cuando se empieza a desarrollar plugins. La guía Modificar una capa QGIS sin ponerla en peligro explica de forma sencilla cómo utilizar el modo de edición, validar o cancelar cambios y actualizar capas y atributos de manera segura. Comprender estos conceptos te ayudará a proteger tus datos mientras desarrollas plugins realmente útiles.
¿Por qué trabajar únicamente con las entidades seleccionadas?
En QGIS, los usuarios rara vez seleccionan entidades por casualidad.
Una selección suele expresar una intención muy clara:
«Quiero trabajar con estas entidades y no con las demás.»
Un plugin que ignora la selección actual y procesa toda la capa:
- puede producir errores importantes,
- reduce la confianza del usuario,
- se vuelve peligroso de utilizar.
Como regla general, un plugin bien diseñado debe respetar la selección activa.
Cómo gestiona QGIS las selecciones de entidades
En QGIS:
- la selección pertenece a la capa,
- es temporal y puede cambiar en cualquier momento,
- es accesible directamente mediante la API PyQGIS.
En todo momento, una capa vectorial sabe:
- cuántas entidades están seleccionadas,
- qué entidades están seleccionadas.
Esto convierte a la selección en una forma sencilla y fiable de trabajar sobre un subconjunto de datos.
Recuperar la capa activa
En la mayoría de los plugins, el primer paso consiste en recuperar la capa activa.
layer = iface.activeLayer()
La primera regla de seguridad es muy simple:
if not layer:
return
Si no hay una capa activa, no debe ejecutarse ninguna acción.
Comprobar si existen entidades seleccionadas
Antes de iniciar cualquier procesamiento, el plugin debe comprobar que el usuario ha seleccionado algo.
selected_features = layer.selectedFeatures()
if not selected_features:
# no hay entidades seleccionadas
return
En este punto, el plugin ya sabe si debe:
- continuar con el procesamiento,
- o detenerse de forma controlada.
Esta simple comprobación evita muchos errores de uso.
Procesar las entidades seleccionadas
El método selectedFeatures() devuelve una lista de objetos QgsFeature.
Por tanto, es posible recorrerlas fácilmente:
for feature in selected_features:
# procesar cada entidad
Cada entidad contiene:
- sus atributos,
- su geometría,
- su identificador único.
Toda la información necesaria para realizar operaciones específicas sobre los datos seleccionados.
Un ejemplo sencillo: leer un atributo
Una vez obtenidas las entidades seleccionadas, es posible acceder a sus atributos igual que con cualquier otro objeto QgsFeature.
Por ejemplo:
for feature in selected_features:
value = feature[«population»]
En este ejemplo, el plugin lee el valor del campo population para cada entidad seleccionada.
Si el campo no existe, se producirá un error.
Por ello es importante comprobar previamente la estructura de la capa. Un plugin nunca debería asumir que un campo determinado está siempre presente.
Modificar atributos de forma segura
Para modificar entidades seleccionadas, la capa debe estar en modo edición.
Antes de realizar cambios, conviene comprobar si la edición ya está activada.
if not layer.isEditable():
layer.startEditing()
Después se pueden actualizar las entidades seleccionadas:
for feature in selected_features:
feature[«estado»] = «procesado»
layer.updateFeature(feature)
Y finalmente guardar los cambios:
layer.commitChanges()
Un plugin nunca debería modificar datos silenciosamente sin que el usuario lo sepa.
Más adelante veremos cómo solicitar una confirmación antes de validar los cambios.
Selección activa ≠ filtro ≠ capa temporal
QGIS ofrece varias formas de trabajar con un subconjunto de datos.
Aunque visualmente puedan parecer similares, su comportamiento dentro de un plugin es muy diferente.
Comprender estas diferencias es fundamental para desarrollar herramientas fiables.
Selección activa
La selección activa:
- pertenece a la capa,
- se muestra mediante resaltado visual,
- es accesible mediante
selectedFeatures(), - cambia cada vez que el usuario modifica la selección.
Es el mecanismo más seguro y explícito para la mayoría de los plugins.
Filtro de capa
Un filtro:
- oculta las entidades que no cumplen una condición,
- hace que la capa parezca más pequeña,
- afecta a lo que ve el usuario.
Sin embargo, salvo que se tomen precauciones específicas, el plugin puede seguir accediendo a entidades ocultas por el filtro.
Un plugin mal diseñado puede modificar entidades que ni siquiera son visibles en pantalla.
Capa temporal
Una capa temporal:
- suele ser el resultado de un proceso,
- contiene una copia o subconjunto de los datos originales,
- es independiente de la capa de origen,
- puede desaparecer al cerrar el proyecto.
Las capas temporales son muy útiles para pruebas y análisis, pero no siempre son adecuadas para modificar los datos originales.
Lo que debes recordar
Estos tres conceptos son muy diferentes:
- Selección = intención explícita del usuario
- Filtro = vista parcial de los datos
- Capa temporal = copia de trabajo
En la mayoría de los plugins orientados a tareas de negocio, la selección activa es el mejor punto de partida.
¿Qué ocurre si no hay entidades seleccionadas?
Tarde o temprano, todo desarrollador de plugins se enfrenta a la misma situación:
El usuario ejecuta la herramienta sin haber seleccionado ninguna entidad.
¿Qué debe hacer el plugin?
Existen dos enfoques habituales.
Opción 1 – Bloquear la acción
La solución más segura consiste en detener el procesamiento e informar al usuario.
Por ejemplo:
Seleccione al menos una entidad antes de ejecutar esta herramienta.
Este enfoque evita ambigüedades y previene modificaciones accidentales.
En la mayoría de los casos, es la opción más segura.
Opción 2 – Proponer una alternativa
Otra posibilidad consiste en preguntar al usuario qué desea hacer.
Por ejemplo:
No hay entidades seleccionadas. ¿Desea aplicar esta operación a toda la capa?
Este enfoque ofrece más flexibilidad sin quitar el control al usuario.
Lo importante es que el plugin nunca tome esta decisión por su cuenta.
El usuario siempre debe tener la última palabra.
Casos de uso habituales
Trabajar únicamente con entidades seleccionadas es fundamental para numerosas tareas SIG.
Por ejemplo:
- recalcular un atributo sobre un subconjunto de entidades,
- corregir geometrías específicas,
- aplicar reglas de negocio sobre determinados objetos,
- preparar datos antes de una exportación,
- validar registros concretos.
En la práctica, una gran parte de los plugins profesionales deberían funcionar de esta manera.
Los usuarios esperan que la herramienta actúe únicamente sobre los elementos que han seleccionado.
¿Por qué es tan importante?
Respetar la selección activa no es un simple detalle técnico.
Es un principio de diseño.
Una selección representa una acción explícita realizada por el usuario.
Ignorarla suele generar confusión, resultados inesperados y pérdida de confianza en la herramienta.
Por el contrario, un plugin que respeta la selección activa se comporta de forma predecible y profesional.
Puntos clave para recordar
Antes de continuar, recuerda estas ideas fundamentales:
- Una selección representa la intención del usuario.
- Un plugin bien diseñado debe respetar esa intención.
- El código necesario es simple y fácil de entender.
- La seguridad proviene de buenas decisiones de diseño, no de la complejidad del código.
Muchos principiantes creen que desarrollar plugins seguros requiere programación avanzada.
En realidad, la mejor protección suele consistir en unas pocas comprobaciones sencillas realizadas en el momento adecuado.
Lo que has aprendido
Al finalizar este artículo, ya sabes:
- cómo recuperar la capa activa,
- cómo detectar entidades seleccionadas,
- cómo procesar únicamente las entidades seleccionadas,
- cómo modificar entidades seleccionadas de forma segura,
- por qué selección, filtro y capa temporal son conceptos distintos.
Tu plugin ya puede trabajar sobre un subconjunto específico de datos en lugar de procesar toda la capa indiscriminadamente.
Este es un paso importante hacia el desarrollo de plugins QGIS más profesionales y fiables.
¿Y en el próximo artículo?
En el siguiente artículo veremos un tema estrechamente relacionado:
cómo modificar entidades sin poner en riesgo los datos.
Aprenderemos a:
- trabajar de forma segura en modo edición,
- confirmar o cancelar cambios,
- proteger los datos del usuario,
- desarrollar plugins en los que los usuarios puedan confiar.
Un plugin útil no es solo aquel que realiza correctamente una tarea, sino también aquel que protege los datos que modifica.