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
fid27 en mi capa de prueba, su columna de área normal se quedó en197.355mientras el campo virtual pasó a789.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 en0y en el diálogo en1. - 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:

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 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 quieres | Expresión para pegar | Resultado probado en la muestra | Versión errónea habitual (y qué pasa) |
|---|---|---|---|
| Área del edificio en m² (elipsoidal) | $area | 197.35, 110.86, 141.11, 219.71, 318.83 | area($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.22 | Transformar a 'EPSG:3857' (Web Mercator) infla el área un +5,95 % aquí |
| Longitud de calle en metros (elipsoidal) | $length | 616.34, 7.99, 1104.32, 9.14, 72.24 | length($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.29 | Transformar a 'EPSG:3857' infla la longitud de las calles un +3,03 % de mediana |
| Perímetro del edificio en metros | $perimeter | 56.72, 44.97, 48.60, 61.54, 72.69 | perimeter($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.32 | y(centroid($geometry)) devuelve grados (12.97...) cuando la capa está en EPSG:4326 |
| Número de fila o ID de entidad | @row_number o $id | 1, 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 quieres | Expresión para pegar | Resultado probado en la muestra | Versión errónea habitual (y qué pasa) |
|---|---|---|---|
| Clase de tamaño según el área | CASE WHEN $area < 100 THEN 'small' WHEN $area < 250 THEN 'medium' ELSE 'large' END | medium, medium, medium, medium, large | No probado |
| Sustituir plantas NULL por un entero por defecto | coalesce(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 aparte | 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 | mid, 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 quieres | Expresión para pegar | Resultado probado en la muestra | Versión errónea habitual (y qué pasa) |
|---|---|---|---|
| Unir número y calle de forma segura | concat("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 calle | regexp_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ígitos | lpad(to_string("osm_id"), 12, '0') | '000313829229', '000313835091' | No probado |
| Formatear un número para mostrarlo | format_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 fechas | day(age(to_date('2026-11-07'), to_date('2019-03-15'))) | 2794 | age(...) 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 quieres | Expresión para pegar | Resultado probado en la muestra | Versión errónea habitual (y qué pasa) |
|---|---|---|---|
| Contar los edificios que tocan cada distrito | aggregate('buildings', 'count', "osm_id", filter:=intersects($geometry, geometry(@parent))) | 4, 1552, 336, 3141, 79, 402, 1179, 348, 1539, 139 | Olvidar filter:=... da a cada distrito el total de toda la capa (8709) sin error |
| Área total de edificios en ha por distrito | round(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.7 | Suma 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 distrito | array_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 cercana | distance(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.61 | distance($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 edificio | aggregate('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, 7 | array_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).
$areay$lengthusan el elipsoide del proyecto (definido enProject > Properties > General > Measurements). Cuando el elipsoide esWGS 84,$areadevuelve metros cuadrados exactos aunque tu capa y tu proyecto estén en grados (EPSG:4326).- Cuando el elipsoide del proyecto está en
None / Planimetric,$areasobre nuestra capaEPSG:4326tampoco devolvió grados cuadrados. En QGIS 3.44.15 devolvió metros cuadrados un +3,24 % demasiado grandes en los 200 edificios. area($geometry)ylength($geometry)son siempre planimétricos en el SRC propio de la capa. En una capaEPSG:4326,area($geometry)devuelve grados cuadrados (unos0.0000003para una casa), que se redondean a0.0en una columna decimal estándar.- Transformar a Web Mercator (
EPSG:3857) antes dearea()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 84 | Error 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.

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.
| Tarea | Prompt exacto enviado | Tiempo del agente | Resultado 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 s | Correcto. 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 s | Correcto. 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 s | Correcto (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.

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.

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.

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.

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

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:
- Había una entidad seleccionada en el mapa, así que Only update N selected feature(s) estaba marcada y dejó en
NULLtodas las filas no seleccionadas. - Concatenaste texto con
||(por ejemplo"addr:housenumber" || ' ' || "addr:street"), donde un solo valorNULLvuelveNULLtodo el resultado. Usaconcat()en su lugar. - Pusiste comillas dobles alrededor de un valor de texto (
"building" = "yes"), lo que le dice a QGIS que busque una columna llamadayes. Usa comillas simples para los valores ("building" = 'yes'). - Usaste
$xo$yen una capa de polígonos o líneas.$xsolo funciona con puntos; usax(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.
Hazlo en QGIS pidiéndoselo
AI Agent realiza la tarea que describes, en tu propio proyecto de QGIS. Gratis, sin tarjeta.
, abre la tabla de atributos de la capa, haz clic en el icono de Field Calculator (Calculadora de campos, 

