Función Aggregate en QGIS 3.8

03 de Agosto del 2019
Mauricio Márquez Goa – Julio 2019 – Especialista en Sistemas de Información Geográfica

Las expresiones de QGIS tiene una función extraordinaria que puede hacer uniones espaciales sobre la marcha. Esto permite múltiples usos de gran interés.

Un uso de este tipo es permitir una edición de datos rápida y precisa. Por ejemplo, cuando se está digitalizando y se desea rellenar automáticamente un campo en función de su relación con otra capa.

Para ejemplificar esta característica utilizaré las capas de parcelas, radios censales, barrios, comunas y calles del portal de Buenos Aires Data de la Capital Autónoma de Buenos Aires (CABA).

Primer Ejemplo:

Rellenar automáticamente los campos de la capa “areas_relevamiento” desde las capas de parcelas, radios_censales, barrios y comunas.

CABA está dividida en 15 comunas y 48 barrios superpuestos. En lugar de ingresar los datos del barrio, comuna, cantidad de parcelas y población por radio censal manualmente se configurarán los campos cuyas propiedades se completarán automáticamente. Primero debemos abrir las propiedades de la capa “areas_relevamiento” y en la pestaña Formulario de atributos, seleccione el campo que desea sea rellenado automáticamente y procedemos a indicar la expresión usando la función aggregate con el valor a determinar.

La expresión para el campo comunas será la siguiente:


            aggregate                                           --función aggregate
            ('comunas',                                         --nombre de la capa
            'concatenate',                                      --tipo de agregación
            "comunas_t",                                        --campo con valor de agregación
            intersects($geometry,geometry(@parent)),            --expresión de calculo
            ', ' ,                                              --concatenador
            "comunas")                                          --ordenación de la concatenación
        

Esta expresión significa que queremos consultar la capa comunas y recuperar el valor del campo comunas. El agregado se calculará utilizando solo las características que pasan los criterios de filtro definidos en el parámetro de filtro. Aquí estamos definiendo un filtro espacial para obtener solo la entidad que intersecta el polígono que acabamos de digitalizar. La expresión geometry(@parent) se refiere a la entidad digitalizada “areas_relevamiento” y $geometry se refiere a la geometría de las entidades de la capa de intersección “comunas”. Se debe marcar el recuadro de “Aplicar valor predeterminado al actualizar”.

Repetiremos el proceso el campo barrios:


            aggregate                                           --función aggregate
            ('barrios',                                         --nombre de la capa
            'concatenate',                                      --tipo de agregación
            "barrio",                                           --campo con valor de agregación
            intersects($geometry,geometry(@parent)),            --expresión de calculo
            ', ' ,                                              --concatenador
            "comunas")                                          --ordenación de la concatenación
        

Esta expresión significa que queremos consultar la capa barrios y recuperar el valor del campo barrio. Aquí estamos definiendo un filtro espacial para obtener solo la entidad que intersecta el polígono que acabamos de digitalizar. Marcamos el recuadro de “Aplicar valor predeterminado al actualizar”.

De nuevo se repite el proceso para el campo cant_parce:


            aggregate                                           --función aggregate
            ('parcelas',                                        --nombre de la capa
            'count',                                            --tipo de agregación
            "id",                                               --campo con valor de agregación
            intersects($geometry,geometry(@parent)),            --expresión de calculo
            ', ')                                               --concatenador
        

Esta expresión significa que queremos consultar la capa parcelas y recuperar el valor de la cantidad de geometrías presentes mediante el campo id. Aquí estamos definiendo un filtro espacial para obtener solo las entidades que intersectan el polígono que acabamos de digitalizar. Marcamos el recuadro de “Aplicar valor predeterminado al actualizar”.

Por último, repetimos el proceso para el campo poblacion:


            aggregate                                           --función aggregate
            ('radios_censales',                                 --nombre de la capa
            'sum',                                              --tipo de agregación
            "tot_pob",                                          --campo con valor de agregación
            intersects($geometry,geometry(@parent)),            --expresión de calculo
            ', ')                                               --concatenador
        

Esta expresión significa que queremos consultar la capa radios_censales y recuperar la sumatoria de los valores presentes en el campo tot_pob. Aquí estamos definiendo un filtro espacial para obtener solo las entidades que intersectan el polígono que acabamos de digitalizar. Marcamos el recuadro de “Aplicar valor predeterminado al actualizar”.

Como puede observarse al finalizar la edición del poligono se generan automáticamente los valores para los campos poblacion, cant_parce, barrios y comunas a partir de configuración de completado automático.

Segundo Ejemplo:

Definición de Calle cercana frente a parcela digitalizada mediante restricción de nombre y cálculo de área de parcela.

Con la capa de calles será de utilidad obtener del nombre de la calle enfrente en lugar de escribirlo manualmente y muchísimo mejor que el usuario pueda elegir el nombre desde las calles cercanas.

En las propiedades para la capa de parcelas_digitalizadas y cambie a la pestaña Formularios de atributos. Seleccione el campo de calle_frente y elija el Tipo de Control Relación de valores. Podemos configurar este campo para buscar los nombres del atributo de calle en la capa de calles. El truco es ingresar una expresión de filtro espacial para seleccionar los caminos que están cerca de la geometría digitalizada. Con la siguiente expresión puedes obtener el valor del campo:


            intersects($geometry, buffer(@current_geometry, 0.0005))
        

Adicionalmente se puede calcular el área de parcela digitalizada. Para ello al igual que en el primer ejemplo en la pestaña Formulario de atributos, seleccione el campo área para que sea rellenado automáticamente indicando la expresión $area, esta se refiere al área a la entidad digitalizada “parcelas_digitalizadas”. Marcamos el recuadro de “Aplicar valor predeterminado al actualizar”.

Ahora, a medida que digitalice las parcelas, los nombres de las calles cercanas se rellenarán en el cuadro desplegable y se presentarán al usuario, de igual manera se autocompletará el área de la entidad digitalizada. Hay duplicados debido a que varios segmentos de línea de la misma calle están presentes dentro de la distancia de búsqueda.

Para obtener mayor información puede leer la función aggregate en la documentación del QGIS

Si desea acceder a la información con la que fue desarrollado este ejemplo y probarla podrá descargarla desde aquí: Cartografía de BADATA para demostración función aggregate en QGIS 3.8 Obviamente que cualquier sugerencia, comentario, crítica es bienvenida.

Actualización jueves 25 julio 2019: Me escribe un amigo desde España y me consulta:

  • “¿cómo puede probar la cartografía?”

R: Al abrir el enlace Cartografía de BADATA para demostración función aggregate en QGIS 3.8 deben ir al menú de descarga en la parte superior derecha y hacer click en descarga directa. Luego descomprimen el archivo descargado en cualquier ubicación de su ordenador y abrir el proyecto aggregate_qgis.qgz con el QGIS 3.8

Posteado por bchuquichanca

Lo más compartido

Geomarketing y el nuevo enfoque a los clientes
Geomarketing y el nuevo enfoque a los clientes
El saber de la teledetección
El saber de la teledetección
Conociendo Global Mapper
Conociendo Global Mapper
Conoce más sobre Python relacionado a GIS
Conoce más sobre Python relacionado a GIS

También puede interesarte estos cursos