• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar al pie de página
logo web Geoinnova

Geoinnova

Consultoría y Formación en SIG y Medio Ambiente

  • Geoinnova
    • Asociación
    • Equipo
    • Visor de proyectos Geoinnova
    • Geolibrería
    • Alianzas Estratégicas
  • Consultoría
    • Consultoría y Desarrollo en Sistemas de Información Geográfica
    • Consultora Ambiental
    • Turismo sostenible
    • Planificación urbana y ordenación del territorio
    • Planes Urbanos de Actuación Municipal – PUAM
    • Geomarketing
  • Servicios
    • Planero Web
    • QElectricGIS
    • Plugins
  • Formación
    • Todos los cursos
    • Webinars
    • Máster GIS
    • Cursos de ArcGIS
    • Cursos de QGIS
    • Cursos de Teledetección
    • Cursos de Medioambiente
  • Medio Ambiente
    • Consultora Ambiental
    • Estudios ambientales para proyectos de energías renovables
    • Estudios de Impacto e Integración Paisajística
    • Evaluación Ambiental Estratégica de planes y programas
    • Estudio de Impacto Ambiental para proyectos
    • Cálculo huella de carbono
    • Educación Ambiental
    • Cursos de Medioambiente
  • Coworking
  • Blog
    • SIG
    • Medio Ambiente
    • Teledetección
    • Programación y Desarrollo SIG
    • Corporativo
  • Contacto
    • Soporte de Clientes – Tickets
SIG

Usos de la función aggregate en QGIS

26/04/2021 9 comentarios

La función aggregate()  es quizás una de las expresiones más potentes que podemos usar en QGIS. Esta función es usada para devolver un valor agregado usando objetos espaciales de otra capa.

Su sintaxis es algo compleja si no la hemos usado antes. De forma simplificada, los parámetros que requiere son los siguientes:

aggregate('nombre la capa o su id', 
'tipo de agregación: suma, recuento...', 
'expresión o nombre de campo a agregar', 
'filtro opcional de la expresión')

En la documentación oficial de QGIS puedes consultar todas sus opciones.

Contenidos mostrar
Ejemplo de uso de la función QGIS aggregate
Uso de datos estadísticos en la función aggregate
Filtros por atributos para la función avanzada de QGIS aggregate
Agregaciones basadas en operaciones espaciales
Uso de agregaciones en campos dinámicos de QGIS
Usar la función aggregate como valor por defecto en QGIS para nuevos elementos
Conclusión

Ejemplo de uso de la función QGIS aggregate

Para mostrar el potencial de la función vamos a realizar una capa poligonal que representa los edificios o  construcciones de la ciudad de Huelva. Los datos proceden de servicio de Catastro Inspire descargada con el complemento Spanish Inspire Catastral Downloader.

Edificaciones y barrios de Huelva
Edificaciones y barrios de Huelva (Fuentes: Catastro Inspire y DERA- IECA)

Cualquiera de las siguientes expresiones sería válida para obtener el valor agregado con el total de construcciones de la capa.

aggregate('construcciones','count','')
aggregate('construcciones','count', "fid")
aggregate(layer:='construcciones',aggregate:='count',
expression:="fid") 
Función de agregación de recuento (count) en QGIS
Función de agregación de recuento (count) en QGIS

¿Necesitas ayuda?

Desde el Área de Sistemas de Información Geográfica y Desarrollo de Geoinnova, podemos ofrecer consultoría a entidades y empresas que necesiten implantar funciones complejas como aggregate o desarrollar flujos de trabajo orientados a sacarle el máximo partido a QGIS a nivel corporativo.

Uso de datos estadísticos en la función aggregate

El listado de opciones de la función es muy variado incluyendo cálculos estadísticos (recuento, máximo, mínimo, desviación estándar…), datos concatenados o matrices de datos (arrays).

Consultaremos el campo que almacena la superficie declara (value) en metros cuadrados para ver código con información estadística.

 aggregate('construcciones','max', "value")
 aggregate('construcciones','mean', "value") 

Ya que la capa contiene el total de unidades dentro del edificio clasificadas como viviendas, usamos la opción sum para su consulta.

aggregate('construcciones','sum', "num_viviendas"))

Filtros por atributos para la función avanzada de QGIS aggregate

Con los filtros podemos hacer más complejas las expresiones anteriormente vistas. Volvemos a finarnos en la expresión anterior para recuento de construcciones, pero en esta ocasión, la modificaremos para obtener solo de aquellas cuyo uso predominante es el residencial.

 aggregate('construcciones','count', "fid",
"uso_predominante" like '1_residential')
 aggregate(layer:='construcciones',aggregate:='count',
expression:="fid", filter:="uso_predominante" like '1_residential') 

Y ahora, jugando con el atributo de la superficie, queremos ver solo aquellas construcciones residenciales con área mayor a 10000 metros cuadrados.

aggregate(layer:='construcciones',aggregate:='count',
expression:="fid", 
filter:="uso_predominante" like '1_residential' and "value" > 10000 )
Función de agregación con filtro por atributos
Función de agregación con filtro por atributos

Agregaciones basadas en operaciones espaciales

Al igual que hemos definido filtros basados en atributos, podemos añadir en la consulta criterios espaciales.

En nuestro proyecto contamos con una capa poligonal con la delimitación barrios de los barrios onubenses del DERA. Gráficamente la capa de barrios no cubre todas las construcciones. Esto nos puede servir para ver un ejemplo de filtro espacial. Necesitamos saber por ejemplo cuántas construcciones intersectan con la capa de barrios.

aggregate(layer:='buildings',
aggregate:='count',expression:=$id,
filter:=intersects( $geometry, geometry(@parent) ) )
Función de agregación con filtro espacial
Función de agregación con filtro espacial

Uso de agregaciones en campos dinámicos de QGIS

Si añadimos un nuevo campo a la capa de barrios, y actualizamos sus datos usando la expresión anterior, podríamos ir enriqueciendo la capa con  nueva información relacionada.

Actualización de campos usando expresiones de agregación
Actualización de campos usando expresiones de agregación

¿Qué ocurriría si actualizáramos la capa construcciones con nuevas edificaciones? Con el ejemplo que hemos vistos la información estaría desactualizada y deberíamos volver a actualizarla aplicando de nuevo la expresión.

Una alternativa a este tema consiste en el uso de la expresión en un campo virtual. En la captura se puede apreciar cómo sacamos partido a los campos calculados en un etiquetado complejo de barrios que se actualiza cuando modificamos el uso de las edificaciones.

paulagarcia@oikosmsp.com

Usar la función aggregate como valor por defecto en QGIS para nuevos elementos

Vamos a terminar esta serie de ejemplos con otra posibilidad de manejo de la función aggregate. Podemos integrar una expresión para que sea usada como valor por defecto cuando creemos nuevos elementos.

Supongamos que gestionamos una capa de obras en vía pública (saneamiento, fibra, arreglo de acerado…) Queremos que al dibujar el tramo de la obra se almacene por defecto los datos de todos las calles afectadas a una distancia de 10 metros.

Ejemplo de QGIS aplicado a obras lineales

Nuestra función de agregación será la siguiente:

aggregate(layer:='viales',aggregate:='concatenate',
expression:=to_string("id_vial"),
filter:=intersects($geometry, buffer(geometry(@parent),10)) ,
concatenator:=',')

La opción de la función será ‘concatenate’ que usaremos para guardar todos los códigos de vías separados por como que intersecten con un buffer de 10 metros de la obra.

Añadiremos la función como valor por defecto en el control del formulario del campo correspondiente.

Ejemplo de uso de función aggregate como valor predeterminado en QGIS
Ejemplo de uso de función aggregate como valor predeterminado en QGIS

Gracias a esta configuración, cada vez que creemos o actualicemos un tramo de obra se salvarán en la tabla todos los códigos de vías afectados.

Función aggregate con opción concatenate como valor predeterminado en un control de formulario de QGIS

Conclusión

Con estos sencillos ejemplos hemos querido mostrar algunos opciones de la aplicación de la función avanzada de QGIS aggregate. 

Si estáis interesados en profundizar más en el uso profesional de expresiones con QGIS podéis consultar el temario de nuestro curso de QGIS Avanzado.

Etiquetas: expresiones, qgis

Apúntate a nuestra newsletter semanal

Consentimiento*
*
Este campo es un campo de validación y debe quedar sin cambios.

Información legal

Cumplimos el RGPD (Reglamenteo General de Protección de Datos) y esta en la primera información que debes saber. Responsable: Asociación Geoinnova. Finalidad: Apuntarte en nuestra base de datos para poder enviarte nuestra newsletter y cualquier otra información de interes. Legitimidad: Nos das tu consentimiento para comunicarnos contigo. Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir tus datos. Para una información más ampliada entra a nuestra política de privacidad.

Artículos relacionados

Depuración de datos con expresiones de QGIS. Un ejemplo para direcciones postales
19/05/2022
Integración de R y QGIS 3.X con Processing R Provider
11/05/2022
Cursos SIG y MA Asociación Geoinnova
Agenda de cursos para Mayo de 2022
02/05/2022

Patricio Soriano

Geógrafo “Full-stack” y desarrollador web especializado en Tecnologías de Información Geográfica. Vinculado con la labor de consultoría, ha realizado diversos proyectos sobre análisis urbanístico, planes de vivienda y gestión patrimonial, así como la puesta en marcha de Sistemas de Información Geográfica corporativos para la administración pública. Dentro de los trabajos como desarrollador se encuentran el diseño de varias aplicaciones webmapping y desarrollos para QGIS (Spanish Inspire Catastral Downloader, CDAU Downloader o qgis2mapea). Autor del blog www.sigdeletras.com y organizador de Geoinquietos Córdoba. Actualmente se encuentra incorporado al equipo de desarrollo de Geoinnova en aplicaciones Open Source. Como docente lleva impartiendo cursos profesionales de SIG desde 2007 para diferentes entidades y en diferentes modalidades (tanto presencial como online). Especializándose en los últimos años en cursos de QGIS a distintos niveles.

Interacciones con los lectores

Comentarios

  1. javier dice

    11/01/2022 a las 08:57

    Hola. Gracias por tu articulo.
    Sabría como calcular la suma de las áreas de polígonos dentro de polígonos más grandes de otra capa?
    La función de unir atributos por localización (resumen) no me funciona correctamente puesto que me arroja datos erróneos y con la función de agregados no consigo hacer que esa suma de polígonos menores aparezca en la tabla de atributos de los polígonos con mayor tamaño. Un saludo.

    Responder
    • Patricio Soriano dice

      11/01/2022 a las 11:52

      Saludos Javier,

      Es complicado hacerse una composición de lugar de un planteamiento a partir una breve descripción. Con esto quizás la opción que te podamos plantear no sea la correcta.
      ¿Porqué no asignar el código del área superior a las áreas menores y a partir de ahí realizar los cálculos? Esto supone al menos tener estas dos capas.
      Te recomiendo también pasarte por el grupo de usuarios de QGIS España. Allí podrás exponer con más detalle tu consulta. Compartimos el enlace Grupo Telegram QGIS España

      Responder
  2. DCB dice

    03/05/2021 a las 17:03

    Buen articulo. Aclara muy bien las premisas básicas con las que se construye la función aggregate

    Responder
    • Patricio Soriano dice

      04/05/2021 a las 07:59

      Nos alegra que te haya sido de utilidad. Las posibilidades son sin duda enormes.

      Responder
  3. Juan dice

    28/04/2021 a las 14:46

    En respuesta del lector desagradable, siento decirle que esto es una entrada de blog, no una clase maestra, si quisiera aprender en profundidad para eso te enlazan al curso de QGIS avanzado. En general, asi funciona el marketing en internet (nadie te va a regalar nada). A pesar de ello, aporta muy buenos ejemplos para aplicarlos con la función aggregate, lo cual es de mucho agradecer.
    Saludos

    Responder
  4. Un lector dice

    27/04/2021 a las 06:26

    Buenos días:

    Siento ser desagradable y comentar lo que sigue, pero es la sensación que me queda tras la lectura del Artículo.

    No es lo mismo un profesor que un maestro. Un profesor enseña; un maestro hace fácil lo difícil. Ud. ha hecho lo primero: ha enseñado lo que sabe, pero no ha conseguido, desde mi humilde punto de vista, transmitir sus conocimientos para que el lector aprenda.

    En estos casos suelo poner el ejemplo del profesor de Arte ingles Gombrich. El manual de Historia del Arte parece escrito por ángeles (hace fácil lo difícil); en ese caso Gombrich hace de maestro. Aunque si toma ud. otros manuales del mismo profesor, verá que puede hace de árido profesor.

    Volviendo a lo nuestro, hecho en falta en el Artículo una redacción más de maestro que de profesor.

    Atentamente,

    Responder
    • Patricio Soriano dice

      27/04/2021 a las 06:53

      Saludos,

      Cualquier opinión que nos ayude a mejorar nuestros contenidos son bienvenidas. Tendremos en cuenta sus comentarios para próximas publicaciones.

      Gracias.

      Responder
    • Otro lector dice

      27/04/2021 a las 09:10

      Buenos días.

      Me gustaría participar en esta opinión que ud. profiere, dado que pienso debería de aclararse un punto importante al respecto…

      Ud. se apoya en la transmisión de conocimientos para justificar la diferencia entre maestros y profesores. Si nos ceñimos única y exclusivamente a este punto, me gustaría comentarle que para que toda transmisión (de conocimientos o de cualquier otra cosa) sea efectiva, debe de existir un emisor, un receptor y un medio de transmisión.

      Teniendo en cuenta que la duda o la crítica se hace sobre el emisor y entiendo que por ende sobre el medio de transmisión (en este caso el lenguaje utilizado, su forma de uso en un contexto concreto y por otro lado, el uso de un artículo de un blog), deja al margen de ella la valoración de la capacidad del receptor para recibir correctamente el mensaje transmitido.

      Entonces, habría que preguntarse por un lado si este blog es un medio válido para llevar a cabo la actividad de un maestro (tal y como ud. lo entiende) y si de los receptores de dicho blog, tienen la capacidad/aptitud de entender correctamente los contenidos del artículo.

      Hay que contar, que tal y como podemos ver, el contenido de este artículo es de tipo técnico, especialista y de un nivel avanzado… luego el lector final, deberá de disponer de dicha cualificación para asimilar el contenido adecuadamente, dado que no es un artículo generalista, que esté al alcance de cualquier persona.

      A modo de conclusión, tras exponer lo anterior, pienso que evidentemente los blogs no son medios aptos para llevar a cabo la actividad de maestro tal y como ud. sugiere y que además, dependerá de la cualificación y aptitud del receptor para conseguir que se produzca una adecuada transmisión de conocimientos.

      Valga aclarar también, que no es responsabilidad del emisor que el receptor carezca de estas aptitudes y cualificaciones previas, al igual que no es responsabilidad del receptor que el emisor carezca de las habilidades suficiente para poder llevar a cabo una transferencia de conocimiento con garantías de éxito (que entiendo que es de lo que ud. se queja).

      Dicho esto, creo que ud. se equivoca al afirmar con tal rotundidad que el artículo no consigue el objetivo marcado por culpa del emisor (redactor del artículo), dado que si lo valoramos adecuadamente, existen ciertas dudas sobre la capacidad del resto de los elementos intrínsecos a toda comunicación, el medio sobre el que está publicado y el propio receptor.

      Con ánimo de construir y no de ofender a nadie.

      Un saludo

      Responder
      • Un lector dice

        28/04/2021 a las 13:08

        Buenos días:

        Deduzco por su forma de escribir, que es Ud. bastante más joven que yo. Consecuentemente no ha alcanzado, aún, la edad para comprender, en su justo término, el significado de lo que dice afirmo yo contundentemente. ¡Por supuesto, porque estoy de vuelta de muchas cosas! Cuando uno llega a una cierta edad, se desembaraza de todo lo accesorio y se queda con lo esencial. Y por la edad se sabe cuándo un texto es bueno o malo para aprender. Y todo lo que Ud. a desgranado y desarrollado acertadamente, es todo lo que yo he dejado de lado, como accesorio, por edad, a la hora de responder.

        Y no cuestiono al autor ni su capacidad profesional, si no la forma en que lo ha escrito. Es más, si no me hubiera gustado, no lo hubiera leído tal vez. Por eso mismo digo que “hecho en falta en el Artículo una redacción más de maestro que de profesor”. ¿Quizá porque intuyo que es capaz de ello?

        En cuanto al blog, como formato, en mi modesta opinión, es uno de esos escasos espacios de Internet aún poco contaminados. Y aquí sí que puedo estar errando por la edad, pero me sigue atrayendo con interés. Es más, soy un habitual de ellos.

        Para finalizar le pondré otro ejemplo parecido a Gombrich. En este caso al español Antonio Quilis, Doctor en Filosofía y Letras, especializado en fonética y un monstruo de la fonética judicial. Sus obras de fonética son, en verdad, difíciles de digerir… por decir algo; ahora bien, si toma Ud. lo que escribió, por ejemplo, para los alumnos de UNED y pensar que hablamos de la misma persona se hace duro.

        Así que, intuyo –repito– que el autor del Artículo del que tratamos es capaz de desmenuzar la información para el general de los lectores. Si no lo creyera, no me habría molestado en responder. Como ve, son diferentes enfoques sobre la misma cuestión,

        Atentemente,

        Responder

¿Quieres comentarnos algo? Adelante! Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Footer

Menú Legal

  • Aviso Legal
  • Política de privacidad
  • Política de cookies
  • Términos y condiciones

Otras páginas de interes

  • Promociones y descuentos en formación

Contacto

Calle Luis Morondo Urra nº 8 Bajo A
31006 Pamplona (Navarra)
info@geoinnova.org
+34 948 117 137

Horario de atención

Lunes a Viernes - 09:00 a 14:00 y de 16:00 a 19:00.
Fines de semana y Festivos - Exclusivamente por mail.
Horario de Verano (01 de julio al 30 de agosto): De lunes a viernes de 8 a 15h.
Entidad adherida a Confianza Online Certificado de inscripción en el Registro de huella de carbono, compensación y proyectos de absorción

© 2022 · Desarrollada por Juan María Arenas - OikosMSP

Gestionar el Consentimiento de las Cookies
Desde Geoinnova utilizamos cookies propias y de terceros para fines técnicos, analíticos y de marketing, para con ello poder ofrecerte una mejor experiencia de usuario.
Funcional Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos. El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos anónimos. Sin una requerimiento, el cumplimiento voluntario por parte de su proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarlo.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en un sitio web o en varios sitios web con fines de marketing similares.
Administrar opciones Gestionar los servicios Gestionar proveedores Leer más sobre estos propósitos
Preferencias
{title} {title} {title}