Calcolatore di campi QGIS: 24 espressioni testate e le trappole
Pubblicato il
Per calcolare una colonna in QGIS, apri la tabella degli attributi del layer, clicca l'icona del Field Calculator (Calcolatore di campi, Ctrl+I), scegli un campo nuovo o esistente, scrivi un'espressione e clicca OK. Questa parte è veloce. La parte difficile arriva quando l'espressione gira senza errori e scrive NULL, gradi quadrati o la classe sbagliata.
Il 7 novembre 2026 ho eseguito 24 espressioni del calcolatore di campi su layer OpenStreetMap reali di Indiranagar e dei quartieri vicini a Bengaluru, in India (8.709 edifici, 854 strade, 35 scuole, 37 fermate dell'autobus, 10 circoscrizioni), e accanto a ciascuna ho eseguito la versione sbagliata più comune. Qui sotto trovi il ricettario con i valori esatti in uscita, le trappole silenziose misurate rispetto a un riferimento ellissoidico e cosa è successo quando ho affidato le tre più difficili a un agente IA dentro QGIS.
Che cos'è il Field Calculator di QGIS?
Il Field Calculator di QGIS è lo strumento integrato che crea o aggiorna le colonne della tabella degli attributi usando le espressioni di QGIS. Può calcolare valori geometrici come area, lunghezza e coordinate, riscrivere testo, classificare righe con CASE WHEN e ricavare conteggi o distanze da altri layer del progetto.
In realtà QGIS offre quattro posti dove eseguire le stesse espressioni, e scegliere quello sbagliato è il primo modo per perdere lavoro:
- La finestra del Field Calculator (
Ctrl+I): modifica il layer sul posto. Puoi creare una nuova colonna o sovrascriverne una esistente, su tutte le geometrie o solo su quelle selezionate. Le modifiche restano nel buffer di modifica finché non le salvi. - Un campo virtuale (casella dentro la finestra): calcola l'espressione al volo ogni volta che apri la tabella o disegni la mappa. Quando ho raddoppiato l'impronta dell'edificio
fid27 nel mio layer di test, la sua colonna di area normale è rimasta a197.355mentre il campo virtuale è passato a789.418. Il problema è che un campo virtuale vive nel file di progetto.qgs, non nel GeoPackage o nello Shapefile. Apri il file in un progetto nuovo e la colonna sparisce. - Lo strumento Processing "Field calculator" (
native:fieldcalculator): scrive un layer di output nuovo e lascia intatto il layer originale. Usalo nei modelli o quando non vuoi modificare sul posto. Attenzione a@row_number, che qui parte da0e nella finestra da1. - La barra di calcolo rapido in cima alla tabella degli attributi: aggiorna una colonna esistente senza aprire la finestra completa, utile per una riga veloce quando sei già in modalità modifica.
Come calcolare un campo passo per passo
Apri il Field Calculator
Clicca con il tasto destro sul layer e scegli Open Attribute Table, poi clicca l'icona dell'abaco nella barra degli strumenti della tabella degli attributi. Con il layer selezionato nel pannello Layers, Ctrl+I apre direttamente il Field Calculator.
Controlla la selezione e le impostazioni del campo
Se sulla mappa ci sono geometrie selezionate, Only update N selected feature(s) è spuntata di default. Togli la spunta se vuoi calcolare tutto il layer. Scegli Create a new field (o Update existing field), imposta Output field name e scegli Output field type (Decimal number (real) per aree e lunghezze con decimali, Integer per conteggi interi, Text (string) per etichette e classi).
Scrivi l'espressione e controlla la Preview
Scrivi l'espressione nell'editor a sinistra, oppure cerca nell'elenco delle funzioni al centro e fai doppio clic per inserirla. Controlla sempre la riga Preview sotto l'editor prima di cliccare OK. Se mostra un errore, NULL o un numero tipo 0.0000003, correggi l'espressione prima di scriverla su 8.000 righe.
Clicca OK e salva le modifiche
Clicca OK. Se il layer non era in modalità modifica, QGIS ti avvisa che la attiverà automaticamente. Finito il calcolo, clicca l'icona del floppy Save Edits nella barra degli strumenti della tabella degli attributi, così la colonna viene scritta su disco.
Ecco la finestra sul layer delle strade, pronta a scrivere una classe stradale:

Quando non conosci il nome di una funzione, usa la casella di ricerca sopra la colonna centrale. Filtra l'albero delle funzioni e apre la documentazione a destra, con l'ordine dei parametri e gli esempi.

Il ricettario di espressioni testate
Ogni espressione qui sotto è stata eseguita in QGIS 3.44.15 il 7 novembre 2026 sui nostri layer OpenStreetMap di Bengaluru (salvati in EPSG:4326, ellissoide di progetto WGS 84). Se ti servono dati di test per la tua zona, la nostra guida su come scaricare dati OpenStreetMap in QGIS spiega come ottenere edifici, strade e punti in modo pulito.
I valori di esempio degli edifici vengono dagli edifici fid 27, 28, 30, 60 e 62 (che hanno indirizzo e numero di piani) e fid 1, 2 e 3 (che non hanno né l'uno né l'altro).
Area, lunghezza, perimetro e coordinate
| Cosa vuoi | Espressione da incollare | Risultato testato sul campione | Versione sbagliata comune (e cosa succede) |
|---|---|---|---|
| Area dell'edificio in m² (ellissoidica) | $area | 197.35, 110.86, 141.11, 219.71, 318.83 | area($geometry) restituisce 0.0 (circa 3e-7 gradi quadrati), senza errore |
| Area dell'edificio in m² (proiettata in UTM 43N) | area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | 197.60, 110.99, 141.29, 219.98, 319.22 | Trasformare in 'EPSG:3857' (Web Mercator) gonfia l'area del +5,95% qui |
| Lunghezza della strada in metri (ellissoidica) | $length | 616.34, 7.99, 1104.32, 9.14, 72.24 | length($geometry) restituisce 0.005681, 0.000074 (gradi), senza errore |
| Lunghezza della strada in metri (proiettata in UTM 43N) | length(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | 616.72, 7.99, 1105.01, 9.14, 72.29 | Trasformare in 'EPSG:3857' gonfia la lunghezza delle strade del +3,03% (mediana) |
| Perimetro dell'edificio in metri | $perimeter | 56.72, 44.97, 48.60, 61.54, 72.69 | perimeter($geometry) restituisce gradi su un layer EPSG:4326 |
| X del centroide del poligono (Est in metri) | x(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643'))) | 786714.46, 786437.79, 786237.28 | $x su un poligono restituisce NULL senza errore; x_at($geometry, 0) restituisce il primo vertice (77.642744), non il centro |
| Y del centroide del poligono (Nord in metri) | y(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643'))) | 1435359.45, 1435116.32, 1436699.32 | y(centroid($geometry)) restituisce gradi (12.97...) quando il layer è in EPSG:4326 |
| Numero di riga o ID della geometria | @row_number o $id | 1, 2, 3, 4 (finestra) o 27 per $id su fid 27 | @row_number parte da 1 nella finestra, ma da 0 nel Processing native:fieldcalculator |
Se scrivi $area in un campo di output Integer invece che Decimal number (real) (testato con il Field calculator di Processing), QGIS arrotonda all'intero più vicino (197.35 diventa 197, 110.86 diventa 111) invece di troncare.
Classi condizionali (CASE WHEN e gestione dei NULL)
| Cosa vuoi | Espressione da incollare | Risultato testato sul campione | Versione sbagliata comune (e cosa succede) |
|---|---|---|---|
| Classe dimensionale dall'area | CASE WHEN $area < 100 THEN 'small' WHEN $area < 250 THEN 'medium' ELSE 'large' END | medium, medium, medium, medium, large | Non testato |
| Sostituire i piani NULL con un intero predefinito | coalesce(to_int("building:levels"), 1) | 4, 4, 2, 4, 3 (e 1 dove i piani sono NULL) | "building:levels" + 'a' restituisce '4a' perché i tag OSM sono salvati come stringhe di testo |
| Classe di altezza con i NULL tenuti a parte | 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 (e unknown per fid 1) | Saltare WHEN ... IS NULL manda ogni riga vuota in ELSE, etichettando 7.636 edifici non mappati come 'high' |
Pulizia del testo, formattazione e date
| Cosa vuoi | Espressione da incollare | Risultato testato sul campione | Versione sbagliata comune (e cosa succede) |
|---|---|---|---|
| Unire numero civico e via in modo sicuro | concat("addr:housenumber", ' ', "addr:street") | '594 12th Main Road', '83/4 13th Main Road' (' ' se entrambi NULL) | "addr:housenumber" || ' ' || "addr:street" restituisce NULL se una delle due colonne è NULL |
Togliere il suffisso (Road, Main, Cross) dal nome della strada | regexp_replace("name", '\\s+(Road|Main|Cross)$', '') | 'Chinmaya Mission Hospital', '13th Main', '12th Main' | Una sola barra rovesciata \s+ fallisce con Invalid regular expression '?+(Road|Main|Cross)$' |
| Riempire un ID con zeri fino a 12 cifre | lpad(to_string("osm_id"), 12, '0') | '000313829229', '000313835091' | Non testato |
| Formattare un numero per la visualizzazione | format_number($area, 1) | '197,4', '110,9' ('3 958,7' per 3958.7 su un Mac con locale a virgola) | L'output è testo che segue il locale del sistema operativo (virgola decimale e spazio stretto non separabile), quindi dopo non puoi farci calcoli |
| Giorni tra due date | day(age(to_date('2026-11-07'), to_date('2019-03-15'))) | 2794 | age(...) da solo restituisce un oggetto QgsInterval; to_date('07/11/2026') fallisce se non passi 'dd/MM/yyyy' come secondo argomento |
Fai attenzione anche alla lunghezza del campo di output quando scrivi testo in un GeoPackage o in uno Shapefile. Quando ho eseguito concat("addr:housenumber", ' ', "addr:street") in un campo di testo di lunghezza 40 in Processing, l'intera esecuzione si è interrotta senza output perché una strada (" 80 Feet Road(Sir C.V. Raman Hospital Road)") era lunga 43 caratteri.
Conteggi, somme e distanza minima tra layer
Queste espressioni permettono a un layer di interrogare un altro layer del progetto senza eseguire un join spaziale in QGIS separato.
| Cosa vuoi | Espressione da incollare | Risultato testato sul campione | Versione sbagliata comune (e cosa succede) |
|---|---|---|---|
| Contare gli edifici che toccano ogni circoscrizione | aggregate('buildings', 'count', "osm_id", filter:=intersects($geometry, geometry(@parent))) | 4, 1552, 336, 3141, 79, 402, 1179, 348, 1539, 139 | Dimenticare filter:=... dà a ogni circoscrizione il conteggio totale dell'intero layer (8709), senza errore |
| Area totale degli edifici in ha per circoscrizione | 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 | Somma le impronte intere che toccano il confine, quindi gli edifici di confine vengono contati in entrambe le circoscrizioni |
| Contare le scuole dentro ogni circoscrizione | array_length(overlay_contains('schools', "osm_id")) | 0, 2, 3, 18, 0, 0, 7, 3, 2, 0 (somma: 35) | overlay_contains('schools') senza secondo argomento restituisce true o false, non un conteggio |
| Distanza in metri dalla fermata dell'autobus più vicina | 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))) restituisce 0.001142 (gradi) |
| Contare le fermate dell'autobus entro 300 m da 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)) restituisce 37 (tutte le fermate) perché 300 viene letto come 300 gradi |
Cinque trappole del calcolatore di campi che falliscono senza errore
Ho letto 70 commenti di richiesta d'aiuto sotto tutorial QGIS su YouTube: 48 erano vere domande su come scrivere un'espressione, e 8 di queste riguardavano un'espressione non valida, che restituisce NULL o non seleziona nulla. Il caso peggiore è quello di cui nessuno chiede, perché l'espressione gira e scrive numeri plausibili. Ecco le cinque trappole che abbiamo misurato sui nostri dati di Bengaluru.
1. $area contro area($geometry), e cosa fa l'ellissoide di progetto
$area e area($geometry) non fanno lo stesso calcolo, e almeno un tutorial del 2026 dice che $area restituisce gradi quadrati in un CRS geografico. Non è successo in nessuna delle due impostazioni di progetto che abbiamo testato. Il 7 novembre 2026 le abbiamo misurate entrambe, più transform(), sui primi 200 edifici e 200 strade dei nostri layer EPSG:4326 di Bengaluru, rispetto a un riferimento ellissoidico WGS 84 (QgsDistanceArea).
$areae$lengthusano l'ellissoide di progetto (impostato inProject > Properties > General > Measurements). Quando l'ellissoide èWGS 84,$arearestituisce metri quadrati precisi anche se layer e progetto sono in gradi (EPSG:4326).- Quando l'ellissoide di progetto è impostato su
None / Planimetric,$areasul nostro layerEPSG:4326non ha comunque restituito gradi quadrati. In QGIS 3.44.15 ha restituito metri quadrati troppo grandi del +3,24% sui 200 edifici. area($geometry)elength($geometry)sono sempre planimetrici nel CRS del layer. Su un layerEPSG:4326,area($geometry)restituisce gradi quadrati (circa0.0000003per una casa), che in una colonna decimale standard si arrotonda a0.0.- Trasformare in Web Mercator (
EPSG:3857) prima diarea()gonfia ogni edificio del +5,95% anche alla latitudine di Bengaluru (13° N), e gonfia la lunghezza delle strade del +3,03%. Trasformare nella zona UTM locale (EPSG:32643) resta entro il +0,12% dell'area ellissoidica.
Espressione su layer EPSG:4326 (n = 200 edifici, 200 strade) | Errore mediano rispetto all'ellissoide WGS 84 | Errore massimo |
|---|---|---|
$area (ellissoide di progetto WGS 84) | 0.00% | 0.00% |
$area (ellissoide di progetto None) | +3.24% | +3.25% |
$perimeter (ellissoide di progetto None) | +1.72% | +2.25% |
$length sulle strade (ellissoide di progetto None) | +1.31% | +2.61% |
area($geometry) | -100.00% (gradi quadrati) | -100.00% |
length($geometry) sulle strade | -100.00% (gradi) | -100.00% |
area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | +0.12% | +0.12% |
length(transform($geometry, 'EPSG:4326', 'EPSG:32643')) sulle strade | +0.06% | +0.06% |
area(transform($geometry, 'EPSG:4326', 'EPSG:3857')) | +5.95% | +5.96% |
length(transform($geometry, 'EPSG:4326', 'EPSG:3857')) sulle strade | +3.03% | +3.26% |
Se non ti è chiaro perché EPSG:4326, EPSG:3857 e le zone UTM si comportano in modo così diverso, leggi la nostra spiegazione su che cos'è un CRS in QGIS.
2. overlay_nearest legge max_distance nelle unità del layer, non in metri
La funzione overlay_nearest è veloce perché usa un indice spaziale, e ha un comodo parametro max_distance. Ma max_distance è sempre misurato nelle unità di coordinate del layer.
Quando edifici e fermate dell'autobus sono in EPSG:4326 (gradi) e scrivi array_length(overlay_nearest('bus_stops', $id, max_distance:=300, limit:=-1)), QGIS cerca fermate entro 300 gradi. Questo copre tutta la Terra, quindi ogni edificio riceve 37 (tutte le 37 fermate del layer). Nemmeno tirare a indovinare max_distance:=0.003 per 300 metri funziona bene, perché un grado di longitudine e un grado di latitudine non hanno la stessa lunghezza in metri: sull'edificio fid 62, 0.003 ha restituito 8 fermate invece delle 7 reali. O riproietti prima entrambi i layer in UTM, oppure usi lo schema aggregate(..., filter:=distance(transform(...))) dell'ultima riga della tabella spaziale qui sopra.
3. Le righe NULL finiscono dritte nel ramo ELSE di CASE WHEN
Nel nostro dataset di Bengaluru, solo 1.073 degli 8.709 edifici (12,3%) hanno un tag building:levels. Gli altri 7.636 sono NULL.
Se scrivi CASE WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END, entrambi i confronti <= risultano sconosciuti su una riga NULL, e la riga finisce in ELSE. Ti ritrovi a classificare 7.636 edifici non mappati come grattacieli senza un solo avviso. Metti sempre WHEN "field" IS NULL THEN 'unknown' come primo ramo (oppure togli ELSE così le righe senza corrispondenza restano NULL) quando i tuoi dati hanno lacune.
4. "Only update selected features" lascia NULL il resto della colonna
Appena anche una sola geometria è selezionata sulla mappa, il Field Calculator spunta automaticamente Only update N selected feature(s).
Quando ho selezionato le 39 strade primary di Bengaluru ed eseguito CASE WHEN "highway" IN ('primary', 'secondary') THEN 'arterial' ELSE 'local' END in un nuovo campo road_rank, QGIS ha scritto 'arterial' in quelle 39 righe e ha lasciato NULL le altre 815 strade (comprese tutte le 28 strade secondary che la mia espressione nominava esplicitamente).

5. Virgolette doppie contro apici singoli (perché "building" = "yes" restituisce NULL)
Nelle espressioni di QGIS, le virgolette doppie " " indicano un nome di campo e gli apici singoli ' ' indicano un valore di testo.
Se scrivi "building" = "yes", QGIS cerca una colonna chiamata building e la confronta con un'altra colonna chiamata yes. Poiché non esiste nessuna colonna yes, l'espressione restituisce NULL (e il parser QgsExpression sottostante segnala Field 'yes' not found). Allo stesso modo, se il nome di una colonna contiene i due punti, come building:levels di OpenStreetMap, togliere le virgolette doppie fallisce con syntax error, unexpected Unknown_CHARACTER. Fare doppio clic sui nomi dei campi nell'elenco Fields and Values inserisce sempre le virgolette giuste.
Saltare la sintassi: gli stessi calcoli con un agente IA
Scrivere $area a mano è veloce. Scrivere un aggregate() annidato con due chiamate transform(), un riferimento alla geometria @parent e un filtro di distanza è il punto in cui si finisce su Stack Exchange.
Noi sviluppiamo AI Agent, un pannello di chat che si aggancia dentro QGIS, quindi questa sezione parla del nostro strumento. Poiché lavora dentro il progetto QGIS aperto, esamina nomi dei layer, tipi di campo, CRS e valori unici prima di eseguire per te il Field Calculator o gli strumenti di Processing.
Il 7 novembre 2026 ho dato ad AI Agent (v1.9.4, sforzo Medium, permessi Balanced) i tre calcoli in più passaggi del nostro piano di test, una frase per chat, sugli stessi cinque layer di Bengaluru in EPSG:4326.
| Compito | Prompt esatto inviato | Tempo dell'agente | Risultato rispetto al nostro controllo indipendente |
|---|---|---|---|
| A. Conteggio di prossimità | "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 | Superato. Campo intero creato, tutti gli 8.709 edifici compilati, 0 discrepanze rispetto al nostro conteggio impronta-fermata in EPSG:32643 (intervallo da 0 a 8). |
| B. Classificazione + stile | "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 | Superato. 563 low, 442 mid, 68 high (tutti i 1.073 corrispondono alla nostra regola). Le 7.636 righe senza piani sono rimaste NULL e hanno ricevuto lo stile di una quarta categoria grigia "Unknown levels". |
| C. Conteggio scuole e area edificata per circoscrizione | "For each ward, add the number of schools and the total building area in hectares." | 37 s | Superato (con una differenza di metodo). school_count corrisponde in 10/10 circoscrizioni (totale 35). building_ha corrisponde alle aree delle impronte ritagliate in 10/10 circoscrizioni (totale 148,25 ha). |
Nel compito A, l'agente non è caduto nella trappola dei 300 gradi di overlay_nearest. Il suo log degli strumenti mostra che ha esaminato entrambi i layer, controllato il CRS, eseguito il calcolo in unità metriche partendo dalle impronte degli edifici (non dai centroidi, che avrebbero cambiato la risposta su 667 edifici) e verificato i valori minimo e massimo prima di rispondere.

Nel compito B, ha prima controllato i valori unici di building:levels, ha visto che 7.636 degli 8.709 edifici non avevano il numero di piani, ha lasciato quelle righe NULL in height_class invece di farle finire in high e ha applicato sulla mappa uno stile categorizzato a 4 classi.

Guardando la mappa renderizzata si capisce subito perché controllare i NULL conta sui dati OpenStreetMap: gli edifici grigi sono l'87,7% che non ha alcun tag building:levels registrato.

Nel compito C, i valori building_ha dell'agente differivano leggermente dalla riga ettari per circoscrizione del nostro ricettario: New Thippasandra è risultata 20.151 ha invece di 20.292 ha (-0,69%), Jeevan Bhimanagar -0.14% e Indiranagar -0.06%. Quando ho controllato il motivo, l'agente aveva in realtà usato un metodo geometrico più rigoroso del mio filtro intersects(): ha ritagliato i poligoni degli edifici sui confini delle circoscrizioni prima di sommarne le aree, così gli edifici a cavallo di un confine non venivano contati due volte, e lo ha scritto nella risposta. Ha però lasciato il layer delle circoscrizioni in modalità modifica con modifiche non salvate, avvisandomi nella risposta che le modifiche non erano ancora state salvate.

Ecco la tabella degli attributi del layer delle circoscrizioni dopo aver salvato quelle modifiche:

Tre compiti sono un campione piccolo (n = 3), e ho dato prompt chiari che nominavano i campi e i limiti delle classi, quindi consideralo una dimostrazione e non un benchmark. Per formule semplici come $area o concat(), la finestra del Field Calculator è più veloce che scrivere un messaggio in chat. Un agente si guadagna il posto quando servono aggregazioni tra layer, trasformazioni di CRS o catene di Processing in più passaggi, o quando altrimenti scriveresti uno script PyQGIS. Puoi anche confrontare altri assistenti nel nostro hub QGIS AI.
Come l'abbiamo misurato. Tutti i test sono stati eseguiti il 7 novembre 2026 in QGIS 3.44.15-Solothurn su macOS con dati OpenStreetMap di Indiranagar, Bengaluru (bounding box 12.968, 77.634, 12.986, 77.656, ODbL) nel CRS di progetto EPSG:4326. Ogni espressione del ricettario è stata verificata rispetto a un calcolo indipendente in Python o con QgsDistanceArea sugli stessi ID delle geometrie. Gli errori di area e lunghezza sono stati misurati sui primi 200 edifici e 200 strade per fid rispetto a QgsDistanceArea con l'ellissoide WGS 84 (EPSG:7030). AI Agent 1.9.4 ha lavorato con sforzo Medium e permessi Balanced, in una chat nuova per ogni test. I nostri conteggi delle domande su YouTube vengono da 70 commenti di richiesta d'aiuto su 59 video, filtrati da un corpus di 25.276 commenti.
Domande frequenti
Perché il mio calcolo con $area è sbagliato o restituisce 0 in QGIS?
Prima controlla di non aver scritto area($geometry) invece di $area. Su un layer salvato in gradi (EPSG:4326), area($geometry) restituisce gradi quadrati (circa 0.0000003 per una casa), che in un campo decimale si arrotonda a 0.0. Usa $area con l'ellissoide di progetto impostato su WGS 84 in Project > Properties > General > Measurements, oppure riproietta la geometria nell'espressione con area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) usando la tua zona UTM locale. Evita EPSG:3857 (Web Mercator), che nel nostro test ha gonfiato l'area degli edifici del +5,95% anche a 13° N.
Come scrivo un'istruzione IF o CASE nel Field Calculator di QGIS?
Per due risultati, usa if(condition, value_if_true, value_if_false), per esempio if($area < 100, 'small', 'large'). Per tre o più classi, 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
Metti per primo il controllo IS NULL. Altrimenti ogni riga con un valore vuoto finisce in ELSE.
Perché il Field Calculator ha restituito NULL per tutte o quasi tutte le mie righe?
Quattro cause comuni:
- Sulla mappa era selezionata una geometria, quindi Only update N selected feature(s) era spuntata e ha lasciato
NULLogni riga non selezionata. - Hai concatenato testo con
||(come"addr:housenumber" || ' ' || "addr:street"), dove un solo inputNULLrendeNULLl'intero risultato. Usa invececoncat(). - Hai messo le virgolette doppie attorno a un valore di testo (
"building" = "yes"), il che dice a QGIS di cercare una colonna chiamatayes. Usa gli apici singoli per i valori ("building" = 'yes'). - Hai usato
$xo$ysu un layer di poligoni o linee.$xfunziona solo sui punti; per i poligoni usax(centroid($geometry)).
Come calcolo l'area in ettari nel Field Calculator di QGIS?
Imposta Output field type su Decimal number (real), imposta Precision a 2 o 3 e inserisci $area / 10000 (supponendo che le unità di area del progetto siano metri quadrati e che l'ellissoide di progetto sia impostato in Project > Properties > General). Per arrotondare il valore salvato a 3 decimali, usa round($area / 10000, 3).
Come aggiorno solo le geometrie selezionate nel Field Calculator?
Seleziona prima le geometrie sulla mappa o nella tabella degli attributi, poi apri il Field Calculator (Ctrl+I). La casella Only update N selected feature(s) in alto a sinistra sarà spuntata automaticamente. Scegli Update existing field, seleziona la colonna dal menu a tendina, inserisci l'espressione e clicca OK.
Fallo in QGIS semplicemente chiedendolo
AI Agent esegue l'attività che descrivi, direttamente nel tuo progetto QGIS. Gratis, senza carta.
, apri la tabella degli attributi del layer, clicca l'icona del Field Calculator (Calcolatore di campi, 

