Saltar al contenido
AI Agent
QGIS
Tutorial

Calculadora de campos de QGIS: 24 expresiones probadas y sus trampas

Publicado el

Para calcular una columna en QGIS, abre la tabla de atributos de la capa, haz clic en el icono de Field Calculator (Calculadora de campos, Ctrl+I), elige un campo nuevo o existente, escribe una expresión y haz clic en OK. Esa parte es rápida. Lo difícil llega cuando la expresión se ejecuta sin error y escribe NULL, grados cuadrados o la clase equivocada.

El 7 de noviembre de 2026 ejecuté 24 expresiones de la calculadora de campos sobre capas reales de OpenStreetMap de Indiranagar y los distritos vecinos de Bengaluru, India (8709 edificios, 854 calles, 35 escuelas, 37 paradas de autobús, 10 distritos), y al lado ejecuté la versión errónea habitual de cada una. Abajo tienes el recetario con los valores exactos obtenidos, las trampas silenciosas medidas contra una referencia elipsoidal y lo que pasó cuando le pasé las tres más difíciles a un agente de IA dentro de QGIS.

¿Qué es la calculadora de campos de QGIS?

La calculadora de campos de QGIS es la herramienta integrada que crea o actualiza columnas de la tabla de atributos con expresiones de QGIS. Puede calcular valores de geometría como área, longitud y coordenadas, reescribir texto, clasificar filas con CASE WHEN y traer conteos o distancias de otras capas de tu proyecto.

En realidad QGIS te da cuatro sitios donde ejecutar las mismas expresiones, y elegir el equivocado es la primera forma de perder trabajo:

  • El diálogo Field Calculator (Ctrl+I): edita la capa directamente. Puedes crear una columna nueva o sobrescribir una existente, en todas las entidades o solo en las seleccionadas. Los cambios se quedan en el búfer de edición hasta que guardas la edición.
  • Un campo virtual (casilla dentro del diálogo): calcula la expresión al vuelo cada vez que abres la tabla o dibujas el mapa. Cuando dupliqué la huella del edificio fid 27 en mi capa de prueba, su columna de área normal se quedó en 197.355 mientras el campo virtual pasó a 789.418. El problema es que un campo virtual vive en tu archivo de proyecto .qgs, no en el GeoPackage ni en el Shapefile. Abre el archivo en un proyecto nuevo y la columna desaparece.
  • La herramienta de Processing "Field calculator" (native:fieldcalculator): escribe una capa de salida nueva y deja intacta la original. Úsala en modelos o cuando no quieras editar directamente. Cuidado con @row_number, que aquí empieza en 0 y en el diálogo en 1.
  • La barra de cálculo rápido en la parte superior de la tabla de atributos: actualiza una columna existente sin abrir el diálogo completo, útil para una línea rápida cuando ya estás en modo edición.

Cómo calcular un campo paso a paso

Abre el Field Calculator

Haz clic derecho en tu capa y elige Open Attribute Table, luego haz clic en el icono del ábaco de la barra de herramientas de la tabla de atributos. Con la capa seleccionada en el panel Capas, Ctrl+I abre el Field Calculator directamente.

Revisa la selección y los ajustes del campo

Si hay entidades seleccionadas en el mapa, Only update N selected feature(s) viene marcada por defecto. Desmárcala si quieres calcular toda la capa. Elige Create a new field (o Update existing field), define el Output field name y elige el Output field type (Decimal number (real) para áreas y longitudes con decimales, Integer para conteos enteros, Text (string) para etiquetas y clases).

Escribe la expresión y revisa la vista previa

Escribe tu expresión en el editor de la izquierda, o busca en la lista de funciones del centro y haz doble clic para insertarla. Revisa siempre la línea Preview bajo el editor antes de hacer clic en OK. Si muestra un error, NULL o un número tipo 0.0000003, corrige la expresión antes de escribirla en 8000 filas.

Haz clic en OK y guarda la edición

Haz clic en OK. Si la capa no estaba en modo edición, QGIS avisa de que lo activará automáticamente. Cuando termine el cálculo, haz clic en el icono del disquete Save Edits de la barra de herramientas de la tabla de atributos para que la columna se escriba en disco.

Este es el diálogo sobre la capa de calles, listo para escribir una clase de vía:

El diálogo Field Calculator de QGIS sobre la capa de calles de Bengaluru, con Only update 39 selected features marcada, un nuevo campo de texto llamado road_rank, una expresión CASE WHEN que clasifica las vías primary y secondary como arterial, y la vista previa mostrando arterial.
El diálogo Field Calculator en QGIS 3.44. Fíjate en la casilla de arriba a la izquierda: como había 39 calles seleccionadas en el lienzo, solo se calcularán esas 39 filas.

Cuando no sepas el nombre de una función, usa el cuadro de búsqueda encima de la columna central. Filtra el árbol de funciones y abre la documentación a la derecha, con el orden de los parámetros y ejemplos.

El constructor de expresiones del Field Calculator de QGIS sobre la capa de distritos, buscando overlay_contains en la lista de funciones, con el panel derecho mostrando la sintaxis y los argumentos de overlay_contains y la vista previa devolviendo 18.
Búsqueda de overlay_contains en la lista de funciones. La vista previa de abajo muestra 18 escuelas dentro del distrito seleccionado antes de ejecutar el cálculo.

El recetario de expresiones probadas

Cada expresión de abajo se ejecutó en QGIS 3.44.15 el 7 de noviembre de 2026 sobre nuestras capas de OpenStreetMap de Bengaluru (guardadas en EPSG:4326, elipsoide del proyecto WGS 84). Si necesitas datos de prueba de tu zona, nuestra guía sobre cómo descargar datos de OpenStreetMap en QGIS explica cómo obtener edificios, calles y puntos de forma limpia.

Los resultados de muestra de edificios vienen de los edificios fid 27, 28, 30, 60 y 62 (que tienen dirección y número de plantas) y fid 1, 2 y 3 (que no tienen ninguno de los dos).

Área, longitud, perímetro y coordenadas

Lo que quieresExpresión para pegarResultado probado en la muestraVersión errónea habitual (y qué pasa)
Área del edificio en m² (elipsoidal)$area197.35, 110.86, 141.11, 219.71, 318.83area($geometry) devuelve 0.0 (unos 3e-7 grados cuadrados), sin error
Área del edificio en m² (proyectada en UTM 43N)area(transform($geometry, 'EPSG:4326', 'EPSG:32643'))197.60, 110.99, 141.29, 219.98, 319.22Transformar a 'EPSG:3857' (Web Mercator) infla el área un +5,95 % aquí
Longitud de calle en metros (elipsoidal)$length616.34, 7.99, 1104.32, 9.14, 72.24length($geometry) devuelve 0.005681, 0.000074 (grados), sin error
Longitud de calle en metros (proyectada en UTM 43N)length(transform($geometry, 'EPSG:4326', 'EPSG:32643'))616.72, 7.99, 1105.01, 9.14, 72.29Transformar a 'EPSG:3857' infla la longitud de las calles un +3,03 % de mediana
Perímetro del edificio en metros$perimeter56.72, 44.97, 48.60, 61.54, 72.69perimeter($geometry) devuelve grados en una capa EPSG:4326
X del centroide del polígono (Este en metros)x(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643')))786714.46, 786437.79, 786237.28$x sobre un polígono devuelve NULL sin error; x_at($geometry, 0) devuelve el primer vértice (77.642744), no el centro
Y del centroide del polígono (Norte en metros)y(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643')))1435359.45, 1435116.32, 1436699.32y(centroid($geometry)) devuelve grados (12.97...) cuando la capa está en EPSG:4326
Número de fila o ID de entidad@row_number o $id1, 2, 3, 4 (diálogo) o 27 para $id en fid 27@row_number empieza en 1 en el diálogo, pero en 0 en native:fieldcalculator de Processing

Si escribes $area en un campo de salida Integer en lugar de Decimal number (real) (probado con el Field calculator de Processing), QGIS redondea al entero más cercano (197.35 pasa a 197, 110.86 pasa a 111) en vez de truncar.

Clases condicionales (CASE WHEN y gestión de NULL)

Lo que quieresExpresión para pegarResultado probado en la muestraVersión errónea habitual (y qué pasa)
Clase de tamaño según el áreaCASE WHEN $area < 100 THEN 'small' WHEN $area < 250 THEN 'medium' ELSE 'large' ENDmedium, medium, medium, medium, largeNo probado
Sustituir plantas NULL por un entero por defectocoalesce(to_int("building:levels"), 1)4, 4, 2, 4, 3 (y 1 donde las plantas son NULL)"building:levels" + 'a' devuelve '4a' porque las etiquetas de OSM se guardan como texto
Clase de altura con los NULL aparteCASE WHEN to_int("building:levels") IS NULL THEN 'unknown' WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' ENDmid, mid, low, mid, mid (y unknown para fid 1)Omitir WHEN ... IS NULL manda todas las filas vacías a ELSE y etiqueta 7636 edificios sin datos como 'high'

Limpieza de texto, formato y fechas

Lo que quieresExpresión para pegarResultado probado en la muestraVersión errónea habitual (y qué pasa)
Unir número y calle de forma seguraconcat("addr:housenumber", ' ', "addr:street")'594 12th Main Road', '83/4 13th Main Road' (' ' si ambos son NULL)"addr:housenumber" || ' ' || "addr:street" devuelve NULL si cualquiera de las columnas es NULL
Quitar el sufijo (Road, Main, Cross) del nombre de la calleregexp_replace("name", '\\s+(Road|Main|Cross)$', '')'Chinmaya Mission Hospital', '13th Main', '12th Main'Con una sola barra invertida \s+ falla con Invalid regular expression '?+(Road|Main|Cross)$'
Rellenar un ID con ceros hasta 12 dígitoslpad(to_string("osm_id"), 12, '0')'000313829229', '000313835091'No probado
Formatear un número para mostrarloformat_number($area, 1)'197,4', '110,9' ('3 958,7' para 3958.7 en un Mac con coma decimal)La salida es texto que sigue la configuración regional del sistema (coma decimal y espacio fino de no separación), así que después no puedes hacer cálculos con ella
Días entre dos fechasday(age(to_date('2026-11-07'), to_date('2019-03-15')))2794age(...) solo devuelve un objeto QgsInterval; to_date('07/11/2026') falla salvo que pases 'dd/MM/yyyy' como segundo argumento

Vigila también la longitud del campo de salida al escribir texto en un GeoPackage o un Shapefile. Cuando ejecuté concat("addr:housenumber", ' ', "addr:street") en un campo de texto de longitud 40 en Processing, todo el proceso se abortó sin salida porque una calle (" 80 Feet Road(Sir C.V. Raman Hospital Road)") tenía 43 caracteres.

Conteos, sumas y distancia al más cercano entre capas

Estas expresiones permiten que una capa consulte otra capa de tu proyecto sin hacer una unión espacial en QGIS aparte.

Lo que quieresExpresión para pegarResultado probado en la muestraVersión errónea habitual (y qué pasa)
Contar los edificios que tocan cada distritoaggregate('buildings', 'count', "osm_id", filter:=intersects($geometry, geometry(@parent)))4, 1552, 336, 3141, 79, 402, 1179, 348, 1539, 139Olvidar filter:=... da a cada distrito el total de toda la capa (8709) sin error
Área total de edificios en ha por distritoround(aggregate('buildings', 'sum', $area, filter:=intersects($geometry, geometry(@parent))) / 10000, 3)0.565, 20.292, 5.605, 59.116, 1.037, 14.094, 16.646, 7.991, 21.39, 1.7Suma huellas completas que tocan el límite del distrito, así que los edificios del borde cuentan en los dos distritos
Contar las escuelas dentro de cada distritoarray_length(overlay_contains('schools', "osm_id"))0, 2, 3, 18, 0, 0, 7, 3, 2, 0 (suma: 35)overlay_contains('schools') sin segundo argumento devuelve true o false, no un conteo
Distancia en metros a la parada de autobús más cercanadistance(transform($geometry, 'EPSG:4326', 'EPSG:32643'), transform(array_first(overlay_nearest('bus_stops', $geometry)), 'EPSG:4326', 'EPSG:32643'))125.17, 49.39, 199.59, 158.39, 187.97, 74.67, 123.00, 226.61distance($geometry, array_first(overlay_nearest('bus_stops', $geometry))) devuelve 0.001142 (grados)
Contar las paradas de autobús a menos de 300 m de un edificioaggregate('bus_stops', 'count', "osm_id", filter:=distance(transform($geometry, 'EPSG:4326', 'EPSG:32643'), transform(geometry(@parent), 'EPSG:4326', 'EPSG:32643')) <= 300)1, 1, 4, 2, 2, 6, 7, 7array_length(overlay_nearest('bus_stops', $id, max_distance:=300, limit:=-1)) devuelve 37 (todas las paradas) porque 300 se lee como 300 grados

Cinco trampas de la calculadora de campos que fallan sin error

Leí 70 comentarios de ayuda bajo tutoriales de QGIS en YouTube: 48 eran preguntas reales sobre cómo escribir una expresión, y 8 de ellas trataban de una expresión no válida, que devuelve NULL o que no selecciona nada. El caso peor es el que nadie pregunta, porque la expresión se ejecuta y escribe números creíbles. Estas son las cinco trampas que medimos en nuestros datos de Bengaluru.

1. $area frente a area($geometry), y qué hace el elipsoide del proyecto

$area y area($geometry) no hacen el mismo cálculo, y al menos un tutorial de 2026 dice que $area devuelve grados cuadrados en un SRC geográfico. No fue así en ninguno de los dos ajustes de proyecto que probamos. El 7 de noviembre de 2026 medimos ambos, además de transform(), en los primeros 200 edificios y 200 calles de nuestras capas EPSG:4326 de Bengaluru, contra una referencia elipsoidal WGS 84 (QgsDistanceArea).

  • $area y $length usan el elipsoide del proyecto (definido en Project > Properties > General > Measurements). Cuando el elipsoide es WGS 84, $area devuelve metros cuadrados exactos aunque tu capa y tu proyecto estén en grados (EPSG:4326).
  • Cuando el elipsoide del proyecto está en None / Planimetric, $area sobre nuestra capa EPSG:4326 tampoco devolvió grados cuadrados. En QGIS 3.44.15 devolvió metros cuadrados un +3,24 % demasiado grandes en los 200 edificios.
  • area($geometry) y length($geometry) son siempre planimétricos en el SRC propio de la capa. En una capa EPSG:4326, area($geometry) devuelve grados cuadrados (unos 0.0000003 para una casa), que se redondean a 0.0 en una columna decimal estándar.
  • Transformar a Web Mercator (EPSG:3857) antes de area() infla cada edificio un +5,95 % incluso en la latitud de Bengaluru (13° N), e infla la longitud de las calles un +3,03 %. Transformar a la zona UTM local (EPSG:32643) se queda a menos de +0,12 % del área elipsoidal.
Expresión sobre capas EPSG:4326 (n = 200 edificios, 200 calles)Error mediano frente al elipsoide WGS 84Error máximo
$area (elipsoide del proyecto WGS 84)0.00%0.00%
$area (elipsoide del proyecto None)+3.24%+3.25%
$perimeter (elipsoide del proyecto None)+1.72%+2.25%
$length en calles (elipsoide del proyecto None)+1.31%+2.61%
area($geometry)-100.00% (grados cuadrados)-100.00%
length($geometry) en calles-100.00% (grados)-100.00%
area(transform($geometry, 'EPSG:4326', 'EPSG:32643'))+0.12%+0.12%
length(transform($geometry, 'EPSG:4326', 'EPSG:32643')) en calles+0.06%+0.06%
area(transform($geometry, 'EPSG:4326', 'EPSG:3857'))+5.95%+5.96%
length(transform($geometry, 'EPSG:4326', 'EPSG:3857')) en calles+3.03%+3.26%

Si no tienes claro por qué EPSG:4326, EPSG:3857 y las zonas UTM se comportan de forma tan distinta, lee nuestra explicación sobre qué es un SRC en QGIS.

2. overlay_nearest lee max_distance en unidades de la capa, no en metros

La función overlay_nearest es rápida porque usa un índice espacial, y tiene un parámetro max_distance muy práctico. Pero max_distance siempre se mide en las unidades de coordenadas de la capa.

Cuando nuestros edificios y paradas de autobús están en EPSG:4326 (grados) y escribes array_length(overlay_nearest('bus_stops', $id, max_distance:=300, limit:=-1)), QGIS busca paradas a menos de 300 grados. Eso cubre toda la Tierra, así que todos los edificios reciben 37 (las 37 paradas de la capa). Probar max_distance:=0.003 para 300 metros tampoco funciona bien, porque un grado de longitud y un grado de latitud no miden lo mismo en metros: en el edificio fid 62, 0.003 devolvió 8 paradas en lugar de las 7 reales. O reproyectas antes las dos capas a UTM, o usas el patrón aggregate(..., filter:=distance(transform(...))) de la última fila de la tabla espacial de arriba.

3. Las filas NULL caen directamente en la rama ELSE de CASE WHEN

En nuestros datos de Bengaluru, solo 1073 de los 8709 edificios (12,3 %) tienen la etiqueta building:levels. Los otros 7636 son NULL.

Si escribes CASE WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END, las dos comparaciones <= dan desconocido en una fila NULL, y la fila cae en ELSE. Acabas clasificando 7636 edificios sin datos como rascacielos sin un solo aviso. Pon siempre WHEN "field" IS NULL THEN 'unknown' como primera rama (o quita ELSE para que las filas sin coincidencia sigan en NULL) cuando tus datos tengan huecos.

4. "Only update selected features" deja el resto de la columna en NULL

En cuanto hay aunque sea una entidad seleccionada en el lienzo, el Field Calculator marca Only update N selected feature(s) automáticamente.

Cuando seleccioné las 39 calles primary de Bengaluru y ejecuté CASE WHEN "highway" IN ('primary', 'secondary') THEN 'arterial' ELSE 'local' END en un campo nuevo road_rank, QGIS escribió 'arterial' en esas 39 filas y dejó las otras 815 calles (incluidas las 28 calles secondary que mi expresión nombraba de forma explícita) en NULL.

La tabla de atributos de QGIS de la capa de calles tras ejecutar el Field Calculator con 39 calles primary seleccionadas: las filas primary muestran road_rank como arterial, mientras que las filas secondary y residential muestran NULL, y row_n muestra 1, 2, 3 de @row_number.
Como había 39 calles primary seleccionadas al abrir el diálogo, las 28 calles secondary y las 787 calles locales salieron en NULL aunque la expresión CASE las tenía en cuenta.

5. Comillas dobles frente a comillas simples (por qué "building" = "yes" devuelve NULL)

En las expresiones de QGIS, las comillas dobles " " indican un nombre de campo y las comillas simples ' ' indican un valor de texto.

Si escribes "building" = "yes", QGIS busca una columna llamada building y la compara con otra columna llamada yes. Como no existe ninguna columna llamada yes, la expresión da NULL (y el analizador QgsExpression que hay debajo informa Field 'yes' not found). Del mismo modo, si el nombre de una columna contiene dos puntos, como building:levels de OpenStreetMap, quitar las comillas dobles falla con syntax error, unexpected Unknown_CHARACTER. Hacer doble clic en los nombres de campo de la lista Fields and Values inserta siempre las comillas correctas.

Sin pelearse con la sintaxis: los mismos cálculos con un agente de IA

Escribir $area a mano es rápido. Escribir un aggregate() anidado con dos llamadas a transform(), una referencia a la geometría @parent y un filtro de distancia es donde la gente acaba en Stack Exchange.

Nosotros desarrollamos AI Agent, un panel de chat que se acopla dentro de QGIS, así que esta sección trata de nuestra propia herramienta. Como funciona dentro de tu proyecto de QGIS abierto, revisa los nombres de tus capas, los tipos de campo, el SRC y los valores únicos antes de ejecutar por ti el Field Calculator o las herramientas de Processing.

El 7 de noviembre de 2026 le di a AI Agent (v1.9.4, esfuerzo Medium, permisos Balanced) los tres cálculos de varios pasos de nuestro plan de pruebas, una frase por chat, sobre las mismas cinco capas de Bengaluru en EPSG:4326.

TareaPrompt exacto enviadoTiempo del agenteResultado frente a nuestra comprobación independiente
A. Conteo por proximidad"Add a field called bus_stops_300m to the buildings layer with the number of bus stops within 300 metres of each building."39 sCorrecto. Campo entero creado, los 8709 edificios rellenados, 0 diferencias frente a nuestro conteo de huella a parada en EPSG:32643 (rango de 0 a 8).
B. Clasificación + estilo"Class the buildings into low (1 or 2 levels), mid (3 or 4) and high (5 or more) from the building:levels field, store the class in a new field called height_class, and style the buildings by that class."18 sCorrecto. 563 low, 442 mid, 68 high (los 1073 coinciden con nuestra regla). Las 7636 filas sin plantas se mantuvieron en NULL y se representaron como una cuarta categoría gris "Unknown levels".
C. Escuelas y área de edificios por distrito"For each ward, add the number of schools and the total building area in hectares."37 sCorrecto (con una diferencia de método). school_count coincidió en 10/10 distritos (total 35). building_ha coincidió con las áreas de huella recortadas en 10/10 distritos (total 148,25 ha).

En la tarea A, el agente no cayó en la trampa de los 300 grados de overlay_nearest. Su registro de herramientas muestra que revisó las dos capas, comprobó el SRC, hizo el cálculo en unidades métricas a partir de las huellas de los edificios (no de los centroides, que habrían cambiado la respuesta en 667 edificios) y verificó los valores mínimo y máximo antes de responder.

El panel de AI Agent en QGIS tras añadir el campo bus_stops_300m a 8709 edificios de Bengaluru, con conteos de 0 a 8 sin valores vacíos y la nota de que las distancias son en línea recta desde cada huella de edificio hasta las 37 paradas.
Tarea A en AI Agent: 39 segundos para calcular el conteo de paradas a 300 m en 8709 edificios de un proyecto EPSG:4326 sin caer en la trampa de los grados.

En la tarea B, primero revisó los valores únicos de building:levels, vio que 7636 de los 8709 edificios no tenían número de plantas, dejó esas filas en NULL en height_class en lugar de dejarlas caer en high, y aplicó un estilo categorizado de 4 clases en el mapa.

El panel de AI Agent y el panel Capas de QGIS con el campo height_class categorizado en low, mid, high y Unknown levels, y la respuesta con 563 edificios low, 442 mid, 68 high y 7636 desconocidos.
Tarea B: el agente revisó primero la columna, mantuvo los 7636 edificios sin datos fuera de la rama ELSE y representó los cuatro grupos.

Mirar el mapa renderizado deja claro por qué comprobar los NULL importa en datos de OpenStreetMap: los edificios grises son el 87,7 % que no tiene la etiqueta building:levels.

Mapa de QGIS renderizado del centro de Indiranagar, Bengaluru, con los edificios en amarillo claro para low, naranja para mid, rojo oscuro para high y gris para plantas desconocidas, con las calles y puntos negros para las paradas de autobús superpuestos.
Centro de Indiranagar con estilo por height_class: 563 low (amarillo), 442 mid (naranja), 68 high (rojo) y 7636 sin etiqueta de plantas en OSM (gris).

En la tarea C, las cifras de building_ha del agente diferían un poco de la fila de hectáreas por distrito de nuestro recetario: New Thippasandra dio 20.151 ha en lugar de 20.292 ha (-0,69 %), Jeevan Bhimanagar -0.14% e Indiranagar -0.06%. Cuando comprobé por qué, resultó que el agente había usado un método geométrico más estricto que mi filtro intersects(): recortó los polígonos de los edificios en los límites de los distritos antes de sumar sus áreas, para que los edificios a caballo entre dos distritos no contaran dos veces, y lo indicó en su respuesta. Sí dejó la capa de distritos en modo edición con cambios sin guardar, y me avisó en la respuesta de que la edición aún no estaba guardada.

El panel de AI Agent en QGIS con school_count y building_ha para cada uno de los 10 distritos de Bengaluru, indicando que las huellas se recortaron a los límites de los distritos y que la edición aún no está guardada.
Tarea C: el agente recortó los edificios a caballo entre distritos antes de sumar hectáreas, e indicó que la edición de la capa seguía sin guardar.

Esta es la tabla de atributos resultante de la capa de distritos tras guardar esa edición:

La tabla de atributos de QGIS de los 10 distritos de Bengaluru con la nueva columna entera school_count y la columna decimal building_ha junto a nombres de distritos como Domlur, Indiranagar, New Thippasandra y Ulsoor.
Los 10 distritos con school_count (total 35) y building_ha (total 148,25 ha) añadidos.

Tres tareas son una muestra pequeña (n = 3), y di prompts claros que nombraban los campos y los límites de las clases, así que tómalo como una demostración y no como un benchmark. Para fórmulas simples como $area o concat(), el diálogo Field Calculator es más rápido que escribir un mensaje en el chat. Donde un agente se gana su sitio es cuando necesitas agregados entre capas, transformaciones de SRC o cadenas de Processing de varios pasos, o cuando de otro modo escribirías un script de PyQGIS. También puedes comparar otros asistentes en nuestra página de IA para QGIS.

Cómo lo medimos. Todas las pruebas se hicieron el 7 de noviembre de 2026 en QGIS 3.44.15-Solothurn en macOS con datos de OpenStreetMap de Indiranagar, Bengaluru (rectángulo envolvente 12.968, 77.634, 12.986, 77.656, ODbL) en el SRC de proyecto EPSG:4326. Cada expresión del recetario se verificó contra un cálculo independiente en Python o con QgsDistanceArea sobre los mismos ID de entidad. Los errores de área y longitud se midieron en los primeros 200 edificios y 200 calles por fid contra QgsDistanceArea con el elipsoide WGS 84 (EPSG:7030). AI Agent 1.9.4 funcionó con esfuerzo Medium y permisos Balanced, en un chat nuevo por tarea. Nuestros recuentos de preguntas de YouTube salen de 70 comentarios de ayuda en 59 vídeos, filtrados de un corpus de 25 276 comentarios.

Preguntas frecuentes

¿Por qué mi cálculo de $area sale mal o devuelve 0 en QGIS?

Primero comprueba si escribiste area($geometry) en lugar de $area. En una capa guardada en grados (EPSG:4326), area($geometry) devuelve grados cuadrados (unos 0.0000003 para una casa), que se redondean a 0.0 en un campo decimal. Usa $area con el elipsoide del proyecto en WGS 84 en Project > Properties > General > Measurements, o reproyecta la geometría dentro de la expresión con area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) usando tu zona UTM local. Evita EPSG:3857 (Web Mercator), que infló las áreas de los edificios un +5,95 % incluso a 13° N en nuestra prueba.

¿Cómo escribo una condición IF o CASE en la calculadora de campos de QGIS?

Para dos resultados, usa if(condition, value_if_true, value_if_false), por ejemplo if($area < 100, 'small', 'large'). Para tres o más clases, usa CASE WHEN ... THEN ... ELSE ... END:

CASE WHEN to_int("building:levels") IS NULL THEN 'unknown' WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END

Pon la comprobación IS NULL primero. Si no, todas las filas con un valor vacío caen en ELSE.

¿Por qué la calculadora de campos devolvió NULL en todas o casi todas mis filas?

Cuatro causas habituales:

  1. Había una entidad seleccionada en el mapa, así que Only update N selected feature(s) estaba marcada y dejó en NULL todas las filas no seleccionadas.
  2. Concatenaste texto con || (por ejemplo "addr:housenumber" || ' ' || "addr:street"), donde un solo valor NULL vuelve NULL todo el resultado. Usa concat() en su lugar.
  3. Pusiste comillas dobles alrededor de un valor de texto ("building" = "yes"), lo que le dice a QGIS que busque una columna llamada yes. Usa comillas simples para los valores ("building" = 'yes').
  4. Usaste $x o $y en una capa de polígonos o líneas. $x solo funciona con puntos; usa x(centroid($geometry)) para polígonos.

¿Cómo calculo el área en hectáreas en la calculadora de campos de QGIS?

Pon el Output field type en Decimal number (real), la Precision en 2 o 3, e introduce $area / 10000 (suponiendo que las unidades de área del proyecto son metros cuadrados y que el elipsoide del proyecto está definido en Project > Properties > General). Para redondear el propio valor guardado a 3 decimales, usa round($area / 10000, 3).

¿Cómo actualizo solo las entidades seleccionadas en la calculadora de campos?

Selecciona primero las entidades en el lienzo o en la tabla de atributos y luego abre el Field Calculator (Ctrl+I). La casilla Only update N selected feature(s) de arriba a la izquierda se marcará automáticamente. Elige Update existing field, escoge la columna en el desplegable, introduce tu expresión y haz clic en OK.

Prueba AI Agent gratis

Hazlo en QGIS pidiéndoselo

AI Agent realiza la tarea que describes, en tu propio proyecto de QGIS. Gratis, sin tarjeta.

Prueba AI Agent gratis
Escrito porYvann Barbot
·24 min read