14.4. Trabajar con la tabla de atributos

La tabla de atributos muestra información sobre los elementos de una capa seleccionada. Cada fila en la tabla representa un elemento (con o sin geometría), y cada columna contiene una pieza de información particular acerca de ese elemento. Puede buscar, seleccionar, mover o incluso editar elementos en la tabla.

14.4.1. Prefacio: Tablas espaciales y no espaciales

QGIS permite cargar capas espaciales y no espaciales. Esto actualmente incluye tablas soportadas por OGR y texto delimitado, así como las de los proveedores PostgreSQL, MSSQL, SpatiaLite, DB2 and Oracle. Todas las capas cargadas son listadas en el panel Panel Capas. La interacción con una capa en el mapa es posible si la capa esta habilitada espacialmente.

Las tablas no espaciales se pueden examinar y editar utilizando la vista de tabla de atributos. Además, se pueden utilizar para búsquedas de campo. Por ejemplo, puede usar columnas de una tabla no espacial para definir valores de atributo, o un rango de valores que están permitidos, para agregarlos a una capa vectorial específica durante la digitalización. Eche un vistazo más de cerca al widget de edición en la sección Formulario de propiedades de campo para obtener más información.

14.4.2. Introducción a la interfaz de la tabla de atributos

Para abrir la tabla de atributos de una capa vectorial, active la capa haciendo click en ella en Panel de capas. Luego, desde el menú principal: menuselection: Layer, elija openTable Abrir tabla de atributos. También es posible hacer click con el botón derecho en la capa y elegir openTable Abrir tabla de atributos del menú desplegable, o hacer click en el botón openTable Abrir tabla de atributos en la barra de herramientas Atributos. Si prefiere los atajos, F6 abrirá la tabla de atributos. Shift + F6 abrirá la tabla de atributos filtrada a las entidades seleccionadas y Ctrl + F6 abrirá la tabla de atributos filtrada a las entidades visibles.

Esto abrirá una nueva ventana que muestra los atributos de las entidades de la capa (figure_attributes_table). Según la configuración en Configuración -> Opciones -> Menú de fuentes de datos, la tabla de atributos se abrirá en una ventana acoplada o en una ventana normal. El número total de entidades en la capa y la cantidad de entidades actualmente seleccionadas / filtradas se muestran en el título de la tabla de atributos, así como si la capa está limitada espacialmente.

../../../_images/vectorAttributeTable.png

Figura 14.68 Tabla de atributos de la capa regiones

Los botones de la parte superior de la ventana de la tabla de atributos proporcionan la siguiente funcionalidad:

Tabla 14.1 Herramientas disponibles

Icono

Etiqueta

Propósito

Atajo de teclado predeterminado

toggleEditing

Conmutar el modo de edición

Habilitar funciones de edición

Ctrl+E

multiEdit

Conmutar el modo multiedición

Actualizar múltiples campos de muchos objetos

saveEdits

Guardar ediciones

Guardar las modificaciones actuales

refresh

Recargar la tabla

newTableRow

Añadir objeto espacial

Añadir nuevo objeto sin geometría

|borrarGeometríasSeleccionadas|

Borrar objetos seleccionados

Eliminar los objetos seleccionados de la capa

editCut

Cortar elementos seleccionados al portapapeles

Ctrl+X

copySelected

Copiar elementos seleccionados al portapapeles

Ctrl+C

editPaste

Pegar entidades desde el portapapeles

Insertar nuevas entidades a partir de unas copiadas

Ctrl+V

expressionSelect

Seleccionar objetos usando una expresión

selectAll

Seleccionar todo

Seleccionar todos los objetos de la capa

Ctrl+A

invertSelection

Invertir selección

Invertir la selección actual de la capa

Ctrl+R

deselectActiveLayer

Deseleccionar todo

Deseleccionar todos los objetos de la capa actual

Ctrl+Shift+A

filterMap

Filtrar/Seleccionar entidades usando formulario

Ctrl+F

selectedToTop

Mover la selección arriba del todo

Mover filas seleccionadas a la parte superior de la tabla

panToSelected

Desplazar el mapa a las filas seleccionadas

Ctrl+P

zoomToSelected

Ampliar mapa a las filas seleccionadas

Ctrl+J

newAttribute

Nuevo campo

Añadir un nuevo campo a la fuente de datos

Ctrl+W

deleteAttribute

Borrar campo

Borrar un campo de la fuente de datos

calculateField

Abrir la calculadora de campos

Actualizar campo para muchas entidades a la vez

Ctrl+I

conditionalFormatting

Formato condicional

Habilitar formato de tabla

dock

Acoplar tabla de atributos

Permite acoplar / desacoplar la tabla de atributos

actionRun

Acciones

Enumera las acciones relacionadas con la capa.

Nota

Dependiendo del formato de los datos y la biblioteca OGR construida con su versión de QGIS, es posible que algunas herramientas no estén disponibles.

Debajo de estos botones se encuentra la barra de Cálculo de campo rápido (habilitada solo en modo de edición), que permite aplicar cálculos rápidamente a todas o parte de las entidades de la capa. Esta barra usa lo mismo expresiones que el calculateField Calculadora de campo (ver Editar valores de atributo).

14.4.2.1. Vista tabla vs Vista forma

QGIS ofrece dos modos de vista para manipular fácilmente los datos en la tabla de atributos:

  • La openTable vista de Tabla, muestra valores de múltiples entidades en un modo tabular, cada fila representa una entidad y cada columna un campo.

  • El formView Vista de formulario muestra:ref:identificadores de entidades<maptips>`en un primer panel y muestra solo los atributos del identificador seleccionado en el segundo. Hay un menú desplegable en la parte superior del primer panel donde el «identificador» se puede especificar usando un atributo (:guilabel:`Vista previa de columna) o una Expresión. El menú desplegable también incluye las últimas 10 expresiones para su reutilización. La vista de formulario usa la configuración de campos de capa (ver Formulario de propiedades de campo). Puede navegar a través de los identificadores de funciones con las flechas en la parte inferior del primer panel. Una vez que marcó la entidad en amarillo en la lista, se selecciona en amarillo en el lienzo. Utilice el zoomToSelected en la parte superior de la tabla de atributos para acercar la función. Al hacer click en una entrada de la lista (sin usar los rectángulos), una entidad parpadea en color rojo una vez para que pueda ver dónde se encuentra.

Puede cambiar de un modo a otro haciendo click en el icono correspondiente en la parte inferior derecha del cuadro de diálogo.

También puede especificar el modo Vista Preestablecida al abrir la tabla de atributos en el menú Configuración -> Opciones -> Fuentes de datos. Puede ser «Recordar la última vista», «Vista de tabla» o «Vista de formulario».

../../../_images/attribute_table_views.png

Figura 14.69 Tabla de atributos en la vista de tabla (arriba) vs vista de formulario (abajo)

14.4.2.2. Configurando las columnas

Click derecho en el encabezado de una columna cuando esté en la vista de tabla para tener acceso a las herramientas que le ayudarán a configurar qué se puede mostrar en la tabla de atributos y cómo.

Ocultar y organizar columnas y habilitar acciones

Al hacer click con el botón derecho en el encabezado de una columna, puede optar por ocultarlo de la tabla de atributos. Para cambiar el comportamiento de varias columnas a la vez, mostrar una columna o cambiar el orden de las columnas, elija Organizar columnas …. En el nuevo cuadro de diálogo, puede:

  • marca/desmarca las columnas que desea mostrar u ocultar

  • elementos de arrastrar y soltar para reordenar las columnas en la tabla de atributos. Tenga en cuenta que este cambio es para la representación de la tabla y no altera el orden de los campos en la fuente de datos de la capa.

  • habilite una nueva columna virtual Acciones que muestra en cada fila un cuadro desplegable o una lista de botones de acciones para cada fila, consulte :ref:` actions_menu` para obtener más información sobre las acciones.

Redimensionar el ancho de columnas

El ancho de las columnas puede especificarse via un clic derecho en la cabecera de la columna y seleccionar:

  • Ajustar anchura… para ingresar el valor deseado. De forma predeterminada, el valor actual se muestra en el widget

  • Autodimensionado para cambiar el tamaño del mejor ajuste a la columna.

También se puede cambiar arrastrando el límite a la derecha del encabezado de la columna. El nuevo tamaño de la columna se mantiene para la capa y se restaura en la próxima apertura de la tabla de atributos.

Ordenando columnas

La tabla se puede ordenar por cualquier columna, haciendo click en el encabezado de la columna. Una pequeña flecha indica el orden de clasificación (apuntar hacia abajo significa valores descendentes desde la fila superior hacia abajo, señalar hacia arriba significa valores ascendentes desde la fila superior hacia abajo). También puede elegir ordenar las filas con la opción ordenar del menú contextual del encabezado de la columna y escribir una expresión, p. Ej. para ordenar la fila usando varias columnas puede escribir concat (col0, col1).

En la vista de formulario, el identificador de características se puede ordenar mediante la opción sort Ordenar por expresión de vista previa.

Truco

** Clasificación basada en columnas de diferentes tipos **

Tratar de ordenar una tabla de atributos basada en columnas de cadenas y tipos numéricos puede dar lugar a resultados inesperados debido a que la expresión concat("USE", "ID") devuelve valores de cadena (es decir, 'Borough105' <'Borough6'). Puede solucionar esto usando, por ejemplo, concat("USE", lpad ("ID", 3, 0)) que devuelve 'Borough105'> 'Borough006'.

14.4.2.3. Formateo de celdas de tabla usando condiciones

La configuración de formato condicional se puede usar para resaltar en la tabla de atributos las entidades en las que es posible que desee poner un enfoque particular, utilizando condiciones personalizadas en las entidades:

  • geometría (por ejemplo, identificación de entidades de múltiples partes, áreas pequeñas o en una extensión de mapa definida …);

  • o valor de campo (por ejemplo, comparar valores con un umbral, identificar celdas vacías …).

Puede habilitar el panel de formato condicional haciendo click en conditionalFormatting en la parte superior derecha de la ventana de atributos en la vista de tabla (no disponible en la vista de formulario).

El nuevo panel permite al usuario agregar nuevas reglas para formatear la representación de radioButtonOnField o radioButtonOffFull row. Agregar nueva regla abre un formulario para definir:

  • el nombre de la regla;

  • una condición que utiliza cualquiera de las funciones constructor de expresiones;

  • el formato: se puede elegir de una lista de formatos predefinidos o crearse en función de propiedades como:

    • colores de fondo y texto;

    • uso de icono;

    • negrita, cursiva, subrayado o tachado;

    • tipo de letra.

../../../_images/attribute_table_conditional_formating.png

Figura 14.70 Formateo Condicional de una tabla de atributos

14.4.3. Interactuar con entidades en una tabla de atributos

14.4.3.1. Seleccionando objetos espaciales

En la vista de tabla, cada fila de la tabla de atributos muestra los atributos de una entidad única en la capa. Al seleccionar una fila, se selecciona la entidad e igualmente, al seleccionar una entidad en el lienzo del mapa (en el caso de una capa con geometría habilitada) se selecciona la fila en la tabla de atributos. Si se cambia el conjunto de entidades seleccionadas en el lienzo del mapa (o tabla de atributos), la selección también se actualiza en la tabla de atributos (o lienzo del mapa) en consecuencia.

Los registros se pueden seleccionar haciendo clic en el número de registros del lado izquierdo del registro. Múltiples registros se pueden marcar al mantener la tecla Ctrl. Una selección continua se puede hacer al mantener la tecla Shift y haciendo clic en varios encabezados de registros del lado izquierdo del registro. Todos los registros entre la posición actual del cursos y el registro donde se hace clic son seleccionados. Mover la posición del cursos en la tabla de atributos, al hacer clic en una celda de la tabla, no cambia el registro seleccionado. Cambiar la selección en el lienzo principal no mueve la posición del cursos en la tabla de atributos.

En la vista de formulario de la tabla de atributos, las características se identifican por defecto en el panel izquierdo por el valor de su campo mostrado (ver Propiedades a mostrar). Este identificador se puede reemplazar usando la lista desplegable en la parte superior del panel, ya sea seleccionando un campo existente o usando una expresión personalizada. También puede optar por ordenar la lista de funciones en el menú desplegable.

Haga click en un valor en el panel de la izquierda para mostrar los atributos de la entidad en el de la derecha. Para seleccionar una entidad, debe hacer click dentro del símbolo cuadrado a la izquierda del identificador. Por defecto, el símbolo se vuelve amarillo. Al igual que en la vista de tabla, puede realizar la selección de múltiples funciones utilizando las combinaciones de teclado expuestas anteriormente.

Más allá de seleccionar entidades con el ratón, puede realizar una selección automática basada en el atributo de la característica usando herramientas disponibles en la barra de herramientas de la tabla de atributos, como (ver sección selección_automática y la siguiente para más información y caso de uso):

  • expressionSelect Seleccionar por expresión…

  • formSelect Seleccionar entidades por valor…

  • deselectActiveLayer Deseleccionar todas las entidades de la capa

  • selectAll Seleccionar todas las entidades

  • invertSelection Invertir selección de entidades.

También es posible seleccionar funciones usando el Filtrar y seleccionar entidades mediante formularios.

14.4.3.2. Filtrando entidades

Una vez que haya seleccionado entidades en la tabla de atributos, es posible que desee mostrar solo estos registros en la tabla. Esto se puede hacer fácilmente usando el elemento Mostrar entidades seleccionadas de la lista desplegable en la parte inferior izquierda del cuadro de diálogo de la tabla de atributos. Esta lista ofrece los siguientes filtros:

  • Mostrar todas las entidades

  • Mostrar entidades seleccionadas

  • Mostrar entidades visibles en el mapa

  • Mostrar Entidades editadas y nuevas

  • Filtro de campo - permite al usuario filtrar según el valor de un campo: elija una columna de una lista, escriba un valor y presione :kbd:` Enter` para filtrar. Entonces, solo las entidades coincidentes se muestran en la tabla de atributos.

  • Filtro avanzado (Expresión) - Abre el cuadro de diálogo del generador de expresiones. Dentro de él, puede crear expresiones complejas para hacer coincidir las filas de la tabla. Por ejemplo, puede filtrar la tabla utilizando más de un campo. Cuando se aplica, la expresión de filtro se mostrará en la parte inferior del formulario.

También es posible filtrar entidades usando formularios.

Nota

El filtrado de registros fuera de la tabla de atributos no filtra entidades fuera de la capa; simplemente se ocultan momentáneamente de la tabla y se puede acceder a ellos desde el lienzo del mapa o quitando el filtro. Para los filtros que ocultan entidades de la capa, use Constructor de consultas.

Truco

** Actualizar el filtrado de la fuente de datos con ** `` Mostrar entidades visibles en el mapa``

Cuando, por razones de rendimiento, las entidades que se muestran en la tabla de atributos están limitadas espacialmente a la extensión del lienzo en su apertura (ver Opciones de origen de datos para obtener instrucciones), seleccionando Mostrar entidades visibles en el mapa en un La nueva extensión de lienzo actualiza la restricción espacial.

14.4.3.3. Filtrar y seleccionar entidades mediante formularios

Haciendo clic en filterMap Filtrar / Seleccionar entidades usando el formulario o presionando :kbd:` Ctrl + F` hará que el cuadro de diálogo de la tabla de atributos cambie a la vista del formulario y reemplace cada widget con su variante de búsqueda.

A partir de este punto, la funcionalidad de esta herramienta es similar a la descrita en Seleccionar objetos por valor, donde se pueden encontrar descripciones de todos los operadores y modos de selección.

../../../_images/tableFilteredForm.png

Figura 14.71 Tabla de atributos filtrada por el formulario de filtro

Al seleccionar / filtrar entidades de la tabla de atributos, hay un botón Filtrar entidades que permite definir y refinar filtros. Su uso activa la opción Filtro avanzado (Expresión) y muestra la expresión de filtro correspondiente en un widget de texto editable en la parte inferior del formulario.

Si ya hay entidades filtradas, puede refinar el filtro usando la lista desplegable junto al botón Filtrar entidades. Las opciones son:

  • Filtrar dentro de («AND»)

  • Extender filtro («OR»)

Para borrar el filtro, selecciona la opción Mostrar todas las entidades del menú desplegable inferior izquierdo, o borre la expresión y haz click en :guilabel:` Aplicar` o presiona Enter.

14.4.4. Usar acción en entidades

Los usuarios tienen varias posibilidades para manipular la entidad con el menú contextual como:

  • Seleccionar todas (Ctrl+A) las entidades;

  • Copiar el contenido de una celda en el portapapeles con Copiar contenido de celda;

  • Zoom a entidad sin tener que seleccionarlo de antemano;

  • Navegar a entidad sin tener que seleccionarla de antemano;

  • Destacar entidad, para resaltarla en el lienzo de mapa;

  • Abrir formulario: cambia la tabla de atributos a la vista de formulario con un enfoque en la entidad en la que se hizo click.

../../../_images/copyCellContent.png

Figura 14.72 Botón de copiar contenido de celda

Si deseas utilizar datos de atributos en programas externos (como Excel, LibreOffice, QGIS o una aplicación web personalizada), seleccione una o más fila(s) y utilice el botón de comando copySelected Copiar filas seleccionadas al portapapeles o presionar Ctrl + C.

En el menú Configuración -> Opciones -> Fuentes de datos puede definir el formato para pegar con :guilabel:` Copiar entidades como` lista desplegable:

  • Texto plano, sin geometría.

  • Texto plano, geometría WKT

  • GeoJSON

También puede mostrar una lista de acciones en este menú contextual. Esto se habilita en la pestaña Propiedades de capa -> Acciones. Consulte Propiedades de acciones para obtener más información sobre las acciones.

14.4.4.1. Guardando entidades seleccionadas como nueva capa

Las entidades seleccionadas se pueden guardar como cualquier formato vectorial compatible con OGR y también se pueden transformar en otro sistema de referencia de coordenadas (CRS). En el menú contextual de la capa, desde el panel Capas, haga click en :menuselection:` Exportar -> Guardar entidades seleccionadas como … ` para definir el nombre del conjunto de datos de salida, su formato y CRS ( ver sección Creando nuevas capas desde una capa existente). Notarás que checkbox :menuselection:»Guardar solo las entidades seleccionadas» está marcado. También es posible especificar las opciones de creación de OGR dentro del diálogo.

14.4.5. Editar valores de atributo

Editar valores de atributos se puede hacer mediante:

  • escribiendo el nuevo valor directamente en la celda, ya sea que la tabla de atributos esté en la vista de tabla o formulario. Por tanto, los cambios se realizan celda por celda, entidad por entidad;

  • usando la calculadora de campos: actualiza de una vez un campo que ya puede existir o que se creará, pero para múltiples entidades. Se puede utilizar para crear campos virtuales;

  • usando el campo rápido barra de cálculo: igual que el anterior pero solo para el campo existente;

  • o usando el modo multiedición : actualiza de una vez múltiples campos para múltiples entidades.

14.4.5.1. Usando la Calculadora de Campos

El botón calculateField Calculadora de campos en la tabla de atributos permite hacer cálculos sobre la base de valores de atributos existentes o funciones definidas, por ejemplo, para calcular la longitud o el área de entidades geométricas. Los resultados se pueden utilizar para actualizar un campo existente o escribir en un nuevo campo (que puede ser uno virtual).

La calculadora de campo está disponible en cualquier capa que admita la edición. Al hacer clic en el icono de la calculadora de campo, se abre el cuadro de diálogo (ver Figura 14.73). Si la capa no está en modo de edición, se muestra una advertencia y el uso de la calculadora de campo hará que la capa se ponga en modo de edición antes de realizar el cálculo.

Basado en el diálogo Constructor de expresiones, el cuadro de diálogo de la calculadora de campo ofrece una interfaz completa para definir una expresión y aplicarla a un campo existente o recién creado. Para utilizar el cuadro de diálogo de la calculadora de campo, debe seleccionar si desea:

  1. aplicar cálculo en toda la capa o solo en entidades seleccionadas

  2. crear un nuevo campo para el cálculo o actualizar uno existente.

../../../_images/fieldcalculator.png

Figura 14.73 Calculadora de Campos

Si optas por agregar un nuevo campo, debe ingresar un nombre de campo, un tipo de campo (entero, real, fecha o cadena) y, si es necesario, la longitud total del campo y la precisión del campo. Por ejemplo, si elige una longitud de campo de 10 y una precisión de campo de 3, significa que tiene 7 dígitos antes del punto y 3 dígitos para la parte decimal.

Un breve ejemplo ilustra cómo funciona la calculadora de campo cuando se usa la pestaña Expresión. Queremos calcular la longitud en km de la capa ferrocarriles del conjunto de datos de muestra de QGIS:

  1. Carga el archivo de forma railroads.shp en QGIS y pulsa openTable Abrir tabla de atributos.

  2. Click en toggleEditing conmutar el modo edición y abre el diálogo calculateField Calculadora de campos.

  3. Selecciona la casilla de verificación checkbox Crear un campo nuevo para guardar los cálculos en un nuevo campo.

  4. Establece Nombre del campo de salida como length_km

  5. Selecciona Número decimal (real) como Tipo de campo de salida

  6. Ajusta la longitud del campo de salida a 10``y la :guilabel:`Precisión` a ``3

  7. Doble click en $length en el grupo Geometría para agregar la longitud de la geometría al cuadro de expresión de la calculadora de campo.

  8. Completa la expresión escribiendo / 1000 en el cuadro de expresión de la calculadora de campo y click en Aceptar.

  9. Puede ahora encontrar un nuevo campo :guilabel:`length_km`en la tabla de atributos.

14.4.5.2. Creando un campo Virtual

Un campo virtual es un campo basado en una expresión calculada sobre la marcha, lo que significa que su valor se actualiza automáticamente tan pronto como cambia un parámetro subyacente. La expresión se establece una vez; ya no es necesario volver a calcular el campo cada vez que cambian los valores subyacentes. Por ejemplo, es posible que desee utilizar un campo virtual si necesita que se evalúe el área a medida que digitaliza entidades o para calcular automáticamente una duración entre fechas que pueden cambiar (por ejemplo, usando la función now()).

Nota

Uso de Campos Virtuales

  • Los campos virtuales no son permanentes en los atributos de capa, lo que significa que solo se guardan y están disponibles en el archivo de proyecto que se han creado.

  • Un campo se puede configurar como virtual solo en su creación. Los campos virtuales están marcados con un fondo violeta en la pestaña de campos del cuadro de diálogo de propiedades de capa para distinguirlos de los campos físicos o unidos normales. Su expresión se puede editar más tarde presionando el botón de expresión en la columna Comentario. Se abrirá una ventana del editor de expresiones para ajustar la expresión del campo virtual.

14.4.5.3. Usando la Barra de cálculo de campo rápido

Si bien la calculadora de campo siempre está disponible, la barra de cálculo de campo rápido en la parte superior de la tabla de atributos solo es visible si la capa está en modo de edición. Gracias al motor de expresión, ofrece un acceso más rápido para editar un campo ya existente:

  1. Seleccione el campo a actualizar en la lista desplegable.

  2. Llene el cuadro de texto con un valor, una expresión que escriba o cree directamente usando el botón expression expresión.

  3. Haga click en el botón Actualizar todo, Actualizar seleccionado o Actualizar filtrado según sus necesidades.

../../../_images/fieldcalculatorbar.png

Figura 14.74 Barra de cálculo de campo rápido

14.4.5.4. Editando múltiples campos

A diferencia de las herramientas anteriores, el modo de edición múltiple permite editar simultáneamente varios atributos de diferentes entidades. Cuando se cambia la capa para editar, se puede acceder a las capacidades de edición múltiple:

  • usando el botón multiEdit Conmutar modo multiedición desde la barra de herramientas dentro del cuadro de diálogo de la tabla de atributos;

  • o seleccionando el menú Editar ► multiEdit Modificar atributos de entidades seleccionadas.

Nota

A diferencia de la herramienta de la tabla de atributos, presionando el botón Editar ► Modificar Atributos de Entidades seleccionadas le proporciona un diálogo modal para completar los cambios de atributos. Por lo tanto, se requiere la selección de entidades antes de la ejecución.

Con el objetivo de editar múltiples campos a la vez:

  1. Selecciona las entidades que quieras editar.

  2. Desde la barra de herramientas de la tabla de atributos, click en el botón multiEdit. Esto conmutará el diálogo a su vista de formulario. La selección de entidades también se puede realizar en este paso.

  3. En el lado derecho de la tabla de atributos, se muestran los campos (y valores) de las entidades seleccionadas. Aparecen nuevos widgets junto a cada campo que permiten mostrar el estado actual de edición múltiple:

    • multiEditMixedValues El campo contiene diferentes valores para las entidades seleccionadas. Se muestra vacío y cada entidad mantendrá su valor original. Puede restablecer el valor del campo desde la lista desplegable del widget.

    • multiEditSameValues Todas las entidades seleccionadas tienen el mismo valor para este campo y se mantendrá el valor que se muestra en el formulario.

    • multiEditChangedValues El campo ha sido editado y el valor ingresado se aplicará a todas las entidades seleccionadas. Aparece un mensaje en la parte superior del cuadro de diálogo que lo invita a aplicar o restablecer su modificación.

    Hacer click en cualquiera de estos widgets le permite establecer el valor actual del campo o restablecer el valor original, lo que significa que puede revertir los cambios campo por campo.

    ../../../_images/attribute_multiedit.png

    Figura 14.75 Editando campos de múltiples entidades

  4. Haz cambios en los campos que quieras.

  5. Click en Aplicar cambios en el texto del mensaje superior o cualquier otra función en el panel izquierdo.

Los cambios se aplicarán a ** todas las entidades seleccionadas **. Si no se selecciona ninguna función, toda la tabla se actualiza con sus cambios. Las modificaciones se realizan como un solo comando de edición. Así que presionando undo Deshacer revertirá los cambios de atributo para todas las entidades seleccionadas a la vez.

Nota

El modo de edición múltiple solo está disponible para formularios autogenerados y de arrastrar y soltar (ver Personalizando un formulario para sus datos); no es compatible con formularios de interfaz de usuario personalizados.

14.4.6. Creando una o muchas de muchas relaciones

Las relaciones son una técnica que se utiliza a menudo en las bases de datos. El concepto es que las entidades (filas) de diferentes capas (tablas) pueden interactuar entre ellas.

14.4.6.1. Introduciendo relaciones 1-N

Como ejemplo, tiene una capa con todas las regiones de Alaska (polígono) que proporciona algunos atributos sobre su nombre y tipo de región y una identificación única (que actúa como clave principal).

Luego, obtiene otra capa de puntos o tabla con información sobre los aeropuertos que se encuentran en las regiones y también desea realizar un seguimiento de estos. Si desea agregarlos a la capa de regiones, debe crear una relación de uno a muchos utilizando claves externas, porque hay varios aeropuertos en la mayoría de las regiones.

../../../_images/relations1.png

Figura 14.76 Región de Alaska con aeropuertos

Capas en relaciones 1-N

QGIS no hace ninguna diferencia entre una tabla y una capa vectorial. Básicamente, una capa vectorial es una tabla con una geometría. Entonces puede agregar su tabla como una capa vectorial. Para demostrar la relación 1-n, puede cargar el archivo de forma regions y el archivo de forma airports que tiene un campo de clave externa (fk_region) en las regiones de la capa. Esto significa que cada aeropuerto pertenece exactamente a una región, mientras que cada región puede tener cualquier número de aeropuertos (una relación típica de uno a muchos).

Claves externas en relaciones 1-N

Además de los atributos ya existentes en la tabla de atributos de los aeropuertos, necesitará otro campo fk_region que actúa como una clave externa (si tiene una base de datos, probablemente querrá definir una restricción sobre ella).

Este campo fk_region siempre contendrá un id de una región. Puede verse como un indicador de la región a la que pertenece. Y puede diseñar un formulario de edición personalizado para editar y QGIS se encarga de la configuración. Funciona con diferentes proveedores (por lo que también puede usarlo con archivos shape y csv) y todo lo que tiene que hacer es decirle a QGIS las relaciones entre sus tablas.

Definir relaciones 1-N

La primera cosa que vamos a hacer es informar a QGIS de las relaciones entre las capas. Esto se hace en Proyecto ► Propiedades…. Abre la pestaña Relaciones y haz click en signPlus Agregar Relación.

  • Name se utilizará como título. Debe ser una cadena legible por humanos, que describa para qué se utiliza la relación. Solo llamaremos a airport_relation en este caso.

  • Capa de Referencia (Parental) también considerada como capa padre, es la única con la clave primaria, a la que se señala, así que aquí la capa es regions. Debe definir la clave primaria de la capa a la que se hace referencia, así que es ID.

  • Capa Referenciada (Hija) también considerada como capa hija, es la única con la clave externa en ella. En nuestro caso, es la capa airports. Para esta capa, debe agregar un campo de referencia que apunte a la otra capa, por lo que es fk_region.

    Nota

    A veces, necesita más de un campo para identificar de forma exclusiva las entidades en una capa. Crear una relación con dicha capa requiere una clave compuesta, es decir, más de un par de campos coincidentes. Utilice el botón |signPlus | Agregar nuevo par de campos como parte de una clave externa compuesta para agregar tantos pares como sea necesario.

  • Id se utilizará para fines internos y debe ser único. Puede que lo necesite para construir formularios personalizados. Si lo deja vacío, se generará uno para usted, pero puede asignar uno usted mismo para obtener uno que sea más fácil de manejar.

  • ** Fuerza de la relación ** establece la fuerza de la relación entre la capa principal y la secundaria. El tipo predeterminado :guilabel: Asociación significa que la capa principal está * simplemente * vinculada a la secundaria, mientras que el tipo :guilabel:` Composición` le permite duplicar también las entidades secundarias al duplicar las principales.

../../../_images/relations2.png

Figura 14.77 Agregar una relación entre las capas regions y airports

En la pestaña Relaciones, puede también presionar el botón signPlus Descubrir relación para obtener las relaciones disponibles de los proveedores de las capas cargadas. Esto es posible para capas almacenadas en proveedores de datos como PostgreSQL o SpatiaLite.

Formularios para relaciones 1-N

Ahora que QGIS conoce la relación, se utilizará para mejorar el formulario generado. Como no hemos cambiado el método de formulario predeterminado (autogenerado) simplemente se añadirá un nuevo control a nuestro formulario. Así que vamos a seleccionar la capa Regiones en la leyenda y a utilizar la herramienta de identificación. Dependiendo de la configuración, el formulario se puede abrir directamente o se tendrá que abrir desde el diálogo de identificación, dentro de las acciones.

../../../_images/relations3.png

Figura 14.78 Regiones de diálogo de identificación con relación a aeropuertos

Como puede ver, los aeropuertos asignados a esta región en particular se muestran en una tabla. Y también hay algunos botones disponibles. Repasemos en breve:

  • El botón toggleEditing es para alternar el modo de edición. Tenga en cuenta que cambia el modo de edición de la capa de aeropuerto, aunque estamos en la forma de entidad de una entidad de la capa de región. Pero la tabla representa entidades de la capa del aeropuerto.

  • El saveEdits botón es para guardar todas las ediciones.

  • El botón newTableRow agregará un nuevo registro a la tabla de atributos de la capa airport. Y asignará el nuevo aeropuerto a la región actual de forma predeterminada.

  • El capturePoint es el mismo que newTableRow pero le permite digitalizar la geometría del aeropuerto en el lienzo del mapa de antemano. Tenga en cuenta que el icono cambiará según el tipo de geometría.

  • El botón duplicateFeature te permite copiar una o mas entidades secundarias.

  • El botón deleteSelectedFeatures borrará el aeropuerto seleccionado permanentemente.

  • El símbolo link abrirá un nuevo diálogo en el que se puede seleccionar cualquier aeropuerto existente que luego serán asignados a la región actual. Esto puede ser útil si ha creado el aeropuerto en la región equivocada por accidente.

  • El símbolo unlink desvinculará el aeropuerto seleccionado de la región actual, dejándolos sin asignar (la clave externa se establece en NULL) de manera efectiva.

  • Con el botón zoomToSelected puede acercar el mapa a las entidades secundarias seleccionadas.

  • Los dos botones formView y openTable a la derecha, cambia entre la vista de tabla y la vista de formulario, donde la última le permite ver todos los aeropuertos en su forma respectiva.

En el ejemplo anterior, la capa de referencia tiene geometrías (por lo que no es solo una tabla alfanumérica), por lo que los pasos anteriores crearán una entrada en la tabla de atributos de capa que no tiene una característica geométrica correspondiente. Para agregar la geometría:

  1. Elige openTable Abrir Tabla de Atributos para la capa de referencia.

  2. Selecciona el registro que se ha agregado previamente dentro de la forma de entidad de la capa referenciada.

  3. Usa la herramienta de digitalización addPart Añadir parte para adjuntar una geometría al registro de la tabla de atributos seleccionado.

Si trabajas en la tabla del aeropuerto, el widget Relation Reference se configura automáticamente para el campo fk_region (el que se usa para crear la relación), consulta Relation Reference widget.

En el formulario del aeropuerto verás el formView en el lado derecho del campo fk_region: si haces click en el botón, se abrirá el formulario de la capa de la región. Este widget te permite abrir fácil y rápidamente los formularios de las funciones principales vinculadas.

../../../_images/relations4.png

Figura 14.79 Diálogo de identificación de aeropuerto con relación a las regiones

El widget Relation Reference también tiene una opción para incrustar la forma de la capa principal dentro de la secundaria. Está disponible en el menú :menuselection: Propiedades -> Formulario de atributos de la capa del aeropuerto: seleccione el campo` fk_region` y marca la opción Mostrar formulario incrustado.

Si observas el cuadro de diálogo de entidades ahora, verás que el formulario de la región está incrustado dentro del formulario de aeropuertos e incluso tendrás un cuadro combinado, que te permite asignar el aeropuerto actual a otra región.

../../../_images/relations5.png

Además, si cambias el modo de edición de la capa del aeropuerto, el campo fk_region también tiene una función de autocompletar: mientras escribes, verás todos los valores del campo `` id “” de la capa de la región. Aquí es posible digitalizar un polígono para la capa de región usando el botón signPlus si elegiste la opción Permitir agregar nuevas entidades en la Propiedades -> Formulario de atributos de la capa del aeropuerto.

La capa secundaria también se puede utilizar en la herramienta Seleccionar objetos por valor para seleccionar entidades de la capa principal según los atributos de sus hijos.

En Figura 14.80, se seleccionan todas las regiones donde la altitud media de los aeropuertos es superior a 500 metros sobre el nivel del mar.

Encontrarás que hay muchas funciones de agregación diferentes disponibles en el formulario.

../../../_images/relation_select_by_value.png

Figura 14.80 Seleccionar entidades principales con valores secundarios

14.4.6.2. Introducción de relaciones de muchos a muchos (N-M)

Las relaciones N-M son relaciones de muchos a muchos entre dos tablas. Por ejemplo, las capas de airports y airlines: un aeropuerto recibe varias compañías aéreas y una compañía aérea vuela a varios aeropuertos.

Este código SQL crea las tres tablas que necesitamos para una relación N-M en un esquema PostgreSQL / PostGIS llamado * ubicaciones . Puedes ejecutar el código usando :menuselection:`Base de Datos -> Administrador de Bases de datos…` para PostGIS o herramientas externas como `pgAdmin <https://www.pgadmin.org>`_. La tabla de aeropuertos almacena la capa de ``airports`` y la tabla de aerolíneas almacena la capa de ``airlines``. En ambas tablas se utilizan pocos campos para mayor claridad. La parte *complicada es la tabla Airports_airlines. Lo necesitamos para enumerar todas las aerolíneas de todos los aeropuertos (o viceversa). Este tipo de tabla se conoce como tabla dinámica. Las restricciones en esta tabla obligan a que un aeropuerto se pueda asociar con una aerolínea solo si ambos ya existen en sus capas.

CREATE SCHEMA locations;

CREATE TABLE locations.airports
(
   id serial NOT NULL,
   geom geometry(Point, 4326) NOT NULL,
   airport_name text NOT NULL,
   CONSTRAINT airports_pkey PRIMARY KEY (id)
);

CREATE INDEX airports_geom_idx ON locations.airports USING gist (geom);

CREATE TABLE locations.airlines
(
   id serial NOT NULL,
   geom geometry(Point, 4326) NOT NULL,
   airline_name text NOT NULL,
   CONSTRAINT airlines_pkey PRIMARY KEY (id)
);

CREATE INDEX airlines_geom_idx ON locations.airlines USING gist (geom);

CREATE TABLE locations.airports_airlines
(
   id serial NOT NULL,
   airport_fk integer NOT NULL,
   airline_fk integer NOT NULL,
   CONSTRAINT airports_airlines_pkey PRIMARY KEY (id),
   CONSTRAINT airports_airlines_airport_fk_fkey FOREIGN KEY (airport_fk)
      REFERENCES locations.airports (id)
      ON DELETE CASCADE
      ON UPDATE CASCADE
      DEFERRABLE INITIALLY DEFERRED,
   CONSTRAINT airports_airlines_airline_fk_fkey FOREIGN KEY (airline_fk)
      REFERENCES locations.airlines (id)
      ON DELETE CASCADE
      ON UPDATE CASCADE
      DEFERRABLE INITIALLY DEFERRED
 );

En lugar de PostgreSQL, también puedes utilizar GeoPackage. En este caso, las tres tablas se pueden crear manualmente usando Base de datos -> Administrador de Bases de datos…. En GeoPackage no hay esquemas, por lo que el prefijo locations no es necesario.

Las restricciones de clave externa en la tabla `` Airports_airlines`` no se pueden crear usando Tabla -> Crear Tabla… o Tabla -> Editar Tabla… por lo que deben crearse usando Base de datos -> Ventana SQL…. GeoPackage no admite declaraciones * ADD CONSTRAINT *, por lo que la tabla Airports_airlines debe crearse en dos pasos:

  1. Configura la tabla solo con el campo `` id “” usando Tabla -> Crear tabla …

  2. Usando Base de Datos ► Ventana SQL…, escribe y ejecuta este código SQL:

    ALTER TABLE airports_airlines
       ADD COLUMN airport_fk INTEGER
       REFERENCES airports (id)
       ON DELETE CASCADE
       ON UPDATE CASCADE
       DEFERRABLE INITIALLY DEFERRED;
    
    ALTER TABLE airports_airlines
       ADD COLUMN airline_fk INTEGER
       REFERENCES airlines (id)
       ON DELETE CASCADE
       ON UPDATE CASCADE
       DEFERRABLE INITIALLY DEFERRED;
    

Luego, en QGIS, debe configurar dos una-a-muchas relaciones como se explicó anteriormente:

  • una relación entre la tabla de airlines y la tabla dinámica;

  • y una segunda entre la tabla airports y la tabla dinámica.

Una forma más fácil de hacerlo (solo para PostgreSQL) es usando Descubrir Relaciones en :menuselection:` Proyecto -> Propiedades -> Relacione`. QGIS leerá automáticamente todas las relaciones en su base de datos y solo tiene que seleccionar las dos que necesita. Recuerde cargar primero las tres tablas en el proyecto QGIS.

../../../_images/relations6.png

Figura 14.81 Relaciones y descubrimiento automático

En caso de que desee eliminar un `` airport`` o una airline, QGIS no eliminará los registros asociados en la tabla Airports_airlines. Esta tarea la realizará la base de datos si especificamos las * restricciones * correctas en la creación de la tabla dinámica como en el ejemplo actual.

Nota

** Combinando relación N-M con grupo de transacciones automáticas **

Debes habilitar el modo de transacción en Propiedades del proyecto -> Fuentes de datos -> cuando trabajes en dicho contexto. QGIS debería poder agregar o actualizar fila(s) en todas las tablas (airlines, airports y las tablas dinámicas).

Finalmente tenemos que seleccionar el cardinal correcto en Propiedades de capa -> Formulario de atributos para las capas airports y airlines. Para el primero debemos elegir la opción airlines(id) y para el segundo la opción airports(id).

../../../_images/relations7.png

Figura 14.82 Establecer cardinalidad de relación

Ahora puede asociar un airport con una airline (o una airline con un airport ) usando Agregar función secundaria o :guilabel:` Vincular función secundaria existente` en los subformularios. Se insertará automáticamente un registro en la tabla Airports_airlines.

../../../_images/relations8.png

Figura 14.83 Relación N-M entre aeropuertos y aerolíneas

Nota

Uso de cardinalidad ** relación muchos a uno **

A veces, no es deseable ocultar la tabla dinámica en una relación N-M. Principalmente porque hay atributos en la relación que solo pueden tener valores cuando se establece una relación. Si sus tablas son capas (tienen un campo de geometría) podría ser interesante activar la opción En la identificación del mapa (:menuselection:` Propiedades de capa -> Formulario de atributos -> Widgets disponibles -> Campos`) para los campos de clave externa en la tabla dinámica.

Nota

** Clave principal de la tabla dinámica **

Evita el uso de varios campos en la clave principal en una tabla dinámica. QGIS asume una única clave primaria, por lo que una restricción como `` restricción de la clave primaria de la clave de airports_airlines_pkey (airport_fk, airline_fk)`` no funcionará.