Calculatrice de champ QGIS : 24 expressions testées et les pièges
Publié le
Pour calculer une colonne dans QGIS, ouvrez la table attributaire de la couche, cliquez sur l'icône Field Calculator (calculatrice de champ, Ctrl+I), choisissez un champ nouveau ou existant, tapez une expression et cliquez sur OK. Cette partie est rapide. Le plus dur, c'est quand l'expression tourne sans erreur et écrit des NULL, des degrés carrés ou la mauvaise classe.
Le 7 novembre 2026, j'ai lancé 24 expressions de la calculatrice de champ sur de vraies couches OpenStreetMap d'Indiranagar et des quartiers voisins à Bangalore, en Inde (8 709 bâtiments, 854 routes, 35 écoles, 37 arrêts de bus, 10 quartiers), et j'ai lancé à côté de chacune la version fausse la plus courante. Voici le recueil avec les valeurs exactes obtenues, les pièges silencieux mesurés par rapport à une référence ellipsoïdale, et ce qui s'est passé quand j'ai confié les trois plus difficiles à un agent IA dans QGIS.
Qu'est-ce que la calculatrice de champ QGIS ?
La calculatrice de champ QGIS (Field Calculator) est l'outil intégré qui crée ou met à jour des colonnes de la table attributaire à l'aide d'expressions QGIS. Elle calcule des valeurs géométriques comme la surface, la longueur et les coordonnées, réécrit du texte, classe les lignes avec CASE WHEN et récupère des comptages ou des distances depuis d'autres couches du projet.
QGIS propose en fait quatre endroits pour lancer les mêmes expressions, et choisir le mauvais est la première façon de perdre du travail :
- La boîte de dialogue Field Calculator (
Ctrl+I) : modifie la couche sur place. Vous pouvez créer une nouvelle colonne ou écraser une colonne existante, sur toutes les entités ou seulement sur la sélection. Les modifications restent dans le tampon d'édition jusqu'à leur enregistrement. - Un champ virtuel (case à cocher dans la boîte de dialogue) : calcule l'expression à la volée chaque fois que vous ouvrez la table ou dessinez la carte. Quand j'ai doublé l'emprise du bâtiment
fid27 dans ma couche de test, sa colonne de surface normale est restée à197.355alors que le champ virtuel est passé à789.418. Le hic : un champ virtuel vit dans votre fichier projet.qgs, pas dans le GeoPackage ou le Shapefile. Ouvrez le fichier dans un nouveau projet et la colonne a disparu. - L'outil Processing "Field calculator" (
native:fieldcalculator) : écrit une toute nouvelle couche en sortie et laisse la couche d'origine intacte. Utilisez-le dans les modèles ou quand vous ne voulez pas modifier sur place. Attention à@row_number, qui commence à0ici et à1dans la boîte de dialogue. - La barre de calcul rapide en haut de la table attributaire : met à jour une colonne existante sans ouvrir la boîte de dialogue complète, pratique pour une formule courte quand vous êtes déjà en mode édition.
Calculer un champ étape par étape
Ouvrir la calculatrice de champ
Faites un clic droit sur la couche et choisissez Open Attribute Table, puis cliquez sur l'icône du boulier dans la barre d'outils de la table attributaire. Avec la couche sélectionnée dans le panneau Couches, Ctrl+I ouvre directement le Field Calculator.
Vérifier la sélection et les réglages du champ
Si des entités sont sélectionnées sur la carte, Only update N selected feature(s) est coché par défaut. Décochez-le pour calculer toute la couche. Choisissez Create a new field (ou Update existing field), renseignez Output field name et choisissez Output field type (Decimal number (real) pour les surfaces et longueurs avec décimales, Integer pour les comptages entiers, Text (string) pour les étiquettes et les classes).
Écrire l'expression et vérifier l'aperçu
Tapez l'expression dans l'éditeur de gauche, ou cherchez dans la liste des fonctions au milieu et double-cliquez pour l'insérer. Vérifiez toujours la ligne Preview sous l'éditeur avant de cliquer sur OK. Si elle affiche une erreur, NULL ou un nombre du genre 0.0000003, corrigez l'expression avant de l'écrire sur 8 000 lignes.
Cliquer sur OK et enregistrer les modifications
Cliquez sur OK. Si la couche n'était pas en mode édition, QGIS vous prévient qu'il va l'activer automatiquement. Une fois le calcul terminé, cliquez sur l'icône disquette Save Edits dans la barre d'outils de la table attributaire pour écrire la colonne sur le disque.
Voici la boîte de dialogue sur la couche des routes, prête à écrire une classe de route :

Quand vous ne connaissez pas le nom d'une fonction, utilisez le champ de recherche au-dessus de la colonne du milieu. Il filtre l'arbre des fonctions et ouvre la documentation à droite, avec l'ordre des paramètres et des exemples.

Le recueil d'expressions testées
Chaque expression ci-dessous a été lancée dans QGIS 3.44.15 le 7 novembre 2026 sur nos couches OpenStreetMap de Bangalore (stockées en EPSG:4326, ellipsoïde du projet WGS 84). S'il vous faut des données de test pour votre zone, notre guide pour télécharger des données OpenStreetMap dans QGIS explique comment récupérer proprement bâtiments, routes et points.
Les exemples de résultats sur les bâtiments viennent des bâtiments fid 27, 28, 30, 60 et 62 (qui ont une adresse et un nombre de niveaux) et fid 1, 2 et 3 (qui n'ont ni l'un ni l'autre).
Surface, longueur, périmètre et coordonnées
| Ce que vous voulez | Expression à coller | Résultat testé sur l'échantillon | Version fausse courante (et ce qui se passe) |
|---|---|---|---|
| Surface du bâtiment en m² (ellipsoïdale) | $area | 197.35, 110.86, 141.11, 219.71, 318.83 | area($geometry) renvoie 0.0 (environ 3e-7 degré carré), sans erreur |
| Surface du bâtiment en m² (projetée en UTM 43N) | area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | 197.60, 110.99, 141.29, 219.98, 319.22 | Transformer en 'EPSG:3857' (Web Mercator) gonfle la surface de +5,95 % ici |
| Longueur de route en mètres (ellipsoïdale) | $length | 616.34, 7.99, 1104.32, 9.14, 72.24 | length($geometry) renvoie 0.005681, 0.000074 (degrés), sans erreur |
| Longueur de route en mètres (projetée en UTM 43N) | length(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | 616.72, 7.99, 1105.01, 9.14, 72.29 | Transformer en 'EPSG:3857' gonfle la longueur des routes de +3,03 % en médiane |
| Périmètre du bâtiment en mètres | $perimeter | 56.72, 44.97, 48.60, 61.54, 72.69 | perimeter($geometry) renvoie des degrés sur une couche en EPSG:4326 |
| X du centroïde d'un polygone (abscisse en mètres) | x(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643'))) | 786714.46, 786437.79, 786237.28 | $x sur un polygone renvoie NULL sans erreur ; x_at($geometry, 0) renvoie le premier sommet (77.642744), pas le centre |
| Y du centroïde d'un polygone (ordonnée en mètres) | y(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643'))) | 1435359.45, 1435116.32, 1436699.32 | y(centroid($geometry)) renvoie des degrés (12.97...) quand la couche est en EPSG:4326 |
| Numéro de ligne ou identifiant d'entité | @row_number ou $id | 1, 2, 3, 4 (boîte de dialogue) ou 27 pour $id sur fid 27 | @row_number commence à 1 dans la boîte de dialogue, mais à 0 dans Processing native:fieldcalculator |
Si vous écrivez $area dans un champ de sortie Integer au lieu de Decimal number (real) (testé avec le Field calculator de Processing), QGIS arrondit à l'entier le plus proche (197.35 devient 197, 110.86 devient 111) au lieu de tronquer.
Classes conditionnelles (CASE WHEN et gestion des NULL)
| Ce que vous voulez | Expression à coller | Résultat testé sur l'échantillon | Version fausse courante (et ce qui se passe) |
|---|---|---|---|
| Classe de taille selon la surface | CASE WHEN $area < 100 THEN 'small' WHEN $area < 250 THEN 'medium' ELSE 'large' END | medium, medium, medium, medium, large | Non testé |
| Remplacer les niveaux NULL par un entier par défaut | coalesce(to_int("building:levels"), 1) | 4, 4, 2, 4, 3 (et 1 là où levels est NULL) | "building:levels" + 'a' renvoie '4a' car les tags OSM sont stockés en texte |
| Classe de hauteur avec les NULL à part | 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 (et unknown pour fid 1) | Sans WHEN ... IS NULL, toutes les lignes vides tombent dans ELSE et 7 636 bâtiments non renseignés sont classés 'high' |
Nettoyage de texte, mise en forme et dates
| Ce que vous voulez | Expression à coller | Résultat testé sur l'échantillon | Version fausse courante (et ce qui se passe) |
|---|---|---|---|
| Joindre numéro et rue sans risque | concat("addr:housenumber", ' ', "addr:street") | '594 12th Main Road', '83/4 13th Main Road' (' ' si les deux sont NULL) | "addr:housenumber" || ' ' || "addr:street" renvoie NULL si l'une des colonnes est NULL |
Retirer un suffixe (Road, Main, Cross) du nom de route | regexp_replace("name", '\\s+(Road|Main|Cross)$', '') | 'Chinmaya Mission Hospital', '13th Main', '12th Main' | Une seule barre oblique inverse \s+ échoue avec Invalid regular expression '?+(Road|Main|Cross)$' |
| Compléter un identifiant à 12 chiffres avec des zéros | lpad(to_string("osm_id"), 12, '0') | '000313829229', '000313835091' | Non testé |
| Mettre en forme un nombre pour l'affichage | format_number($area, 1) | '197,4', '110,9' ('3 958,7' pour 3958.7 sur un Mac réglé avec la virgule décimale) | Le résultat est du texte qui suit la langue du système (virgule décimale et espace fine insécable), donc impossible de faire des calculs dessus ensuite |
| Jours entre deux dates | day(age(to_date('2026-11-07'), to_date('2019-03-15'))) | 2794 | age(...) seul renvoie un objet QgsInterval ; to_date('07/11/2026') échoue sauf si vous passez 'dd/MM/yyyy' en deuxième argument |
Surveillez aussi la longueur du champ de sortie quand vous écrivez du texte dans un GeoPackage ou un Shapefile. Quand j'ai lancé concat("addr:housenumber", ' ', "addr:street") dans un champ texte de longueur 40 avec Processing, tout le traitement s'est arrêté sans aucune sortie, parce qu'une route (" 80 Feet Road(Sir C.V. Raman Hospital Road)") faisait 43 caractères.
Comptages, sommes et distance au plus proche entre couches
Ces expressions permettent à une couche d'interroger une autre couche du projet sans lancer une jointure spatiale dans QGIS à part.
| Ce que vous voulez | Expression à coller | Résultat testé sur l'échantillon | Version fausse courante (et ce qui se passe) |
|---|---|---|---|
| Compter les bâtiments qui touchent chaque quartier | aggregate('buildings', 'count', "osm_id", filter:=intersects($geometry, geometry(@parent))) | 4, 1552, 336, 3141, 79, 402, 1179, 348, 1539, 139 | Oublier filter:=... donne à chaque quartier le total de toute la couche (8709), sans erreur |
| Surface bâtie totale en ha par quartier | 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 | Additionne les emprises entières qui touchent la limite du quartier, donc les bâtiments en bordure comptent dans deux quartiers |
| Compter les écoles dans chaque quartier | array_length(overlay_contains('schools', "osm_id")) | 0, 2, 3, 18, 0, 0, 7, 3, 2, 0 (somme : 35) | overlay_contains('schools') sans second argument renvoie true ou false, pas un comptage |
| Distance en mètres à l'arrêt de bus le plus proche | 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))) renvoie 0.001142 (degrés) |
| Compter les arrêts de bus à moins de 300 m d'un bâtiment | 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)) renvoie 37 (tous les arrêts) car 300 est lu comme 300 degrés |
Cinq pièges de la calculatrice de champ qui échouent sans erreur
J'ai lu 70 commentaires d'aide sous des tutoriels QGIS sur YouTube : 48 étaient de vraies questions sur l'écriture d'une expression, et 8 d'entre elles portaient sur une expression invalide, qui renvoie NULL ou ne sélectionne rien. Le cas le plus grave est celui dont personne ne parle, parce que l'expression tourne et écrit des chiffres plausibles. Voici les cinq pièges mesurés sur nos données de Bangalore.
1. $area ou area($geometry), et le rôle de l'ellipsoïde du projet
$area et area($geometry) ne font pas le même calcul, et au moins un tutoriel de 2026 affirme que $area renvoie des degrés carrés dans un SCR géographique. Ce n'était le cas dans aucun des deux réglages de projet testés. Le 7 novembre 2026, nous avons mesuré les deux, plus transform(), sur les 200 premiers bâtiments et les 200 premières routes de nos couches de Bangalore en EPSG:4326, par rapport à une référence ellipsoïdale WGS 84 (QgsDistanceArea).
$areaet$lengthutilisent l'ellipsoïde du projet (réglé dansProject > Properties > General > Measurements). Quand l'ellipsoïde estWGS 84,$arearenvoie des mètres carrés exacts même si la couche et le projet sont en degrés (EPSG:4326).- Quand l'ellipsoïde du projet est réglé sur
None / Planimetric,$areasur notre couche enEPSG:4326ne renvoyait toujours pas de degrés carrés. Dans QGIS 3.44.15, il renvoyait des mètres carrés trop grands de +3,24 % sur les 200 bâtiments. area($geometry)etlength($geometry)sont toujours planimétriques dans le SCR propre de la couche. Sur une couche enEPSG:4326,area($geometry)renvoie des degrés carrés (environ0.0000003pour une maison), arrondis à0.0dans une colonne décimale standard.- Transformer en Web Mercator (
EPSG:3857) avantarea()gonfle chaque bâtiment de +5,95 %, même à la latitude de Bangalore (13° N), et gonfle la longueur des routes de +3,03 %. Transformer vers la zone UTM locale (EPSG:32643) reste à +0,12 % de la surface ellipsoïdale.
Expression sur des couches en EPSG:4326 (n = 200 bâtiments, 200 routes) | Erreur médiane par rapport à l'ellipsoïde WGS 84 | Erreur max |
|---|---|---|
$area (ellipsoïde du projet WGS 84) | 0.00% | 0.00% |
$area (ellipsoïde du projet None) | +3.24% | +3.25% |
$perimeter (ellipsoïde du projet None) | +1.72% | +2.25% |
$length sur les routes (ellipsoïde du projet None) | +1.31% | +2.61% |
area($geometry) | -100.00% (degrés carrés) | -100.00% |
length($geometry) sur les routes | -100.00% (degrés) | -100.00% |
area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | +0.12% | +0.12% |
length(transform($geometry, 'EPSG:4326', 'EPSG:32643')) sur les routes | +0.06% | +0.06% |
area(transform($geometry, 'EPSG:4326', 'EPSG:3857')) | +5.95% | +5.96% |
length(transform($geometry, 'EPSG:4326', 'EPSG:3857')) sur les routes | +3.03% | +3.26% |
Si vous ne voyez pas pourquoi EPSG:4326, EPSG:3857 et les zones UTM se comportent si différemment, lisez notre explication sur ce qu'est un SCR dans QGIS.
2. overlay_nearest lit max_distance dans les unités de la couche, pas en mètres
La fonction overlay_nearest est rapide car elle utilise un index spatial, et elle a un paramètre max_distance bien pratique. Mais max_distance est toujours mesuré dans les unités de coordonnées de la couche.
Quand nos bâtiments et nos arrêts de bus sont en EPSG:4326 (degrés) et que vous écrivez array_length(overlay_nearest('bus_stops', $id, max_distance:=300, limit:=-1)), QGIS cherche les arrêts de bus à moins de 300 degrés. Cela couvre toute la Terre, donc chaque bâtiment obtient 37 (les 37 arrêts de la couche). Deviner max_distance:=0.003 pour 300 mètres ne marche pas proprement non plus, car un degré de longitude et un degré de latitude n'ont pas la même longueur en mètres : sur le bâtiment fid 62, 0.003 a renvoyé 8 arrêts au lieu des 7 réels. Reprojetez d'abord les deux couches en UTM, ou utilisez la forme aggregate(..., filter:=distance(transform(...))) de la dernière ligne du tableau spatial ci-dessus.
3. Les lignes NULL tombent directement dans la branche ELSE de CASE WHEN
Dans notre jeu de données de Bangalore, seuls 1 073 des 8 709 bâtiments (12,3 %) ont un tag building:levels. Les 7 636 autres sont NULL.
Si vous écrivez CASE WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END, les deux comparaisons <= donnent un résultat inconnu sur une ligne NULL, et la ligne tombe dans ELSE. Vous classez 7 636 bâtiments non renseignés comme des tours, sans le moindre avertissement. Placez toujours WHEN "field" IS NULL THEN 'unknown' en première branche (ou retirez ELSE pour que les lignes sans correspondance restent NULL) quand vos données ont des trous.
4. "Only update selected features" laisse le reste de la colonne à NULL
Dès qu'une seule entité est sélectionnée sur le canevas, la calculatrice de champ coche automatiquement Only update N selected feature(s).
Quand j'ai sélectionné les 39 routes primary de Bangalore et lancé CASE WHEN "highway" IN ('primary', 'secondary') THEN 'arterial' ELSE 'local' END dans un nouveau champ road_rank, QGIS a écrit 'arterial' sur ces 39 lignes et laissé les 815 autres routes à NULL, y compris les 28 routes secondary que mon expression nommait pourtant explicitement.

5. Guillemets doubles ou apostrophes (pourquoi "building" = "yes" renvoie NULL)
Dans les expressions QGIS, les guillemets doubles " " désignent un nom de champ et les apostrophes ' ' désignent une valeur texte.
Si vous tapez "building" = "yes", QGIS cherche une colonne nommée building et la compare à une autre colonne nommée yes. Comme il n'existe pas de colonne yes, l'expression donne NULL (et l'analyseur QgsExpression sous-jacent signale Field 'yes' not found). De même, si un nom de colonne contient deux-points, comme building:levels dans OpenStreetMap, oublier les guillemets doubles échoue avec syntax error, unexpected Unknown_CHARACTER. Double-cliquer sur les noms de champs dans la liste Fields and Values insère les bons guillemets à chaque fois.
Se passer de la syntaxe : les mêmes calculs avec un agent IA
Écrire $area à la main est rapide. Écrire un aggregate() imbriqué avec deux appels à transform(), une référence à la géométrie @parent et un filtre de distance, c'est là que les gens finissent sur Stack Exchange.
Nous développons AI Agent, un panneau de discussion qui s'ancre dans QGIS, donc cette section parle de notre propre outil. Comme il tourne dans votre projet QGIS ouvert, il inspecte les noms de couches, les types de champs, le SCR et les valeurs uniques avant de lancer pour vous la calculatrice de champ ou les outils Processing.
Le 7 novembre 2026, j'ai donné à AI Agent (v1.9.4, effort Medium, permissions Balanced) les trois calculs en plusieurs étapes de notre plan de test, une phrase par discussion, sur exactement les mêmes cinq couches de Bangalore en EPSG:4326.
| Tâche | Prompt exact envoyé | Temps de l'agent | Résultat face à notre vérification indépendante |
|---|---|---|---|
| A. Comptage de proximité | "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 | Réussi. Champ entier créé, les 8 709 bâtiments remplis, 0 écart avec notre comptage emprise-arrêt en EPSG:32643 (de 0 à 8). |
| B. Classement + style | "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 | Réussi. 563 low, 442 mid, 68 high (les 1 073 conformes à notre règle). Les 7 636 lignes sans niveaux sont restées NULL et ont reçu une quatrième catégorie grise "Unknown levels". |
| C. Écoles et surface bâtie par quartier | "For each ward, add the number of schools and the total building area in hectares." | 37 s | Réussi (avec une méthode différente). school_count correct sur 10/10 quartiers (total 35). building_ha conforme aux surfaces d'emprise découpées sur 10/10 quartiers (total 148,25 ha). |
Sur la tâche A, l'agent n'est pas tombé dans le piège des 300 degrés de overlay_nearest. Son journal d'outils montre qu'il a inspecté les deux couches, vérifié le SCR, fait le calcul en unités métriques à partir des emprises des bâtiments (pas des centroïdes, ce qui aurait changé la réponse sur 667 bâtiments) et vérifié les valeurs min et max avant de répondre.

Sur la tâche B, il a d'abord vérifié les valeurs uniques de building:levels, vu que 7 636 des 8 709 bâtiments n'avaient pas de nombre de niveaux, laissé ces lignes à NULL dans height_class au lieu de les laisser tomber dans high, et appliqué un style catégorisé en 4 classes sur la carte.

La carte rendue montre bien pourquoi vérifier les NULL compte sur des données OpenStreetMap : les bâtiments gris sont les 87,7 % sans tag building:levels.

Sur la tâche C, les chiffres building_ha de l'agent différaient un peu de la ligne hectares par quartier de notre recueil : New Thippasandra est sorti à 20.151 ha au lieu de 20.292 ha (-0,69 %), Jeevan Bhimanagar à -0.14% et Indiranagar à -0.06%. En cherchant pourquoi, j'ai vu que l'agent avait en fait utilisé une méthode géométrique plus stricte que mon filtre intersects() : il a découpé les polygones des bâtiments aux limites des quartiers avant d'additionner leurs surfaces, pour qu'un bâtiment à cheval sur une limite ne compte pas dans deux quartiers, et il l'a signalé dans sa réponse. Il a en revanche laissé la couche des quartiers en mode édition avec des modifications non enregistrées, en me prévenant dans la réponse qu'elles n'étaient pas encore sauvegardées.

Voici la table attributaire obtenue sur la couche des quartiers après l'enregistrement de ces modifications :

Trois tâches, c'est un petit échantillon (n = 3), et mes prompts étaient clairs, avec les noms de champs et les bornes de classes, donc voyez ceci comme une démonstration plutôt qu'un benchmark. Pour des formules simples comme $area ou concat(), la boîte de dialogue Field Calculator est plus rapide qu'un message dans la discussion. Un agent trouve sa place quand il vous faut des agrégats entre couches, des transformations de SCR ou des chaînes Processing en plusieurs étapes, ou quand vous écririez sinon un script PyQGIS. Vous pouvez aussi comparer d'autres assistants sur notre page QGIS AI.
Notre méthode de mesure. Tous les tests ont eu lieu le 7 novembre 2026 dans QGIS 3.44.15-Solothurn sous macOS, avec des données OpenStreetMap d'Indiranagar, à Bangalore (emprise 12.968, 77.634, 12.986, 77.656, ODbL), dans un projet en SCR EPSG:4326. Chaque expression du recueil a été vérifiée par un calcul indépendant en Python ou avec QgsDistanceArea sur les mêmes identifiants d'entités. Les erreurs de surface et de longueur ont été mesurées sur les 200 premiers bâtiments et les 200 premières routes par fid, par rapport à QgsDistanceArea avec l'ellipsoïde WGS 84 (EPSG:7030). AI Agent 1.9.4 tournait en effort Medium et permissions Balanced, avec une nouvelle discussion par tâche. Nos chiffres sur les questions YouTube viennent de 70 commentaires d'aide sur 59 vidéos, filtrés dans un corpus de 25 276 commentaires.
Questions fréquentes
Pourquoi mon calcul $area est-il faux ou renvoie-t-il 0 dans QGIS ?
Vérifiez d'abord que vous n'avez pas tapé area($geometry) au lieu de $area. Sur une couche stockée en degrés (EPSG:4326), area($geometry) renvoie des degrés carrés (environ 0.0000003 pour une maison), arrondis à 0.0 dans un champ décimal. Utilisez $area avec l'ellipsoïde du projet réglé sur WGS 84 dans Project > Properties > General > Measurements, ou reprojetez la géométrie dans l'expression avec area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) en prenant votre zone UTM locale. Évitez EPSG:3857 (Web Mercator), qui a gonflé les surfaces des bâtiments de +5,95 % même à 13° N dans notre test.
Comment écrire une condition IF ou CASE dans la calculatrice de champ QGIS ?
Pour deux résultats possibles, utilisez if(condition, value_if_true, value_if_false), par exemple if($area < 100, 'small', 'large'). Pour trois classes ou plus, utilisez 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
Placez le test IS NULL en premier. Sinon, chaque ligne vide tombe dans ELSE.
Pourquoi la calculatrice de champ a-t-elle renvoyé NULL pour toutes ou presque toutes mes lignes ?
Quatre causes fréquentes :
- Une entité était sélectionnée sur la carte, donc Only update N selected feature(s) était coché et a laissé chaque ligne non sélectionnée à
NULL. - Vous avez concaténé du texte avec
||(comme"addr:housenumber" || ' ' || "addr:street"), où une seule entréeNULLrend tout le résultatNULL. Utilisez plutôtconcat(). - Vous avez mis des guillemets doubles autour d'une valeur texte (
"building" = "yes"), ce qui dit à QGIS de chercher une colonne nomméeyes. Utilisez des apostrophes pour les valeurs ("building" = 'yes'). - Vous avez utilisé
$xou$ysur une couche de polygones ou de lignes.$xne marche que sur des points ; utilisezx(centroid($geometry))pour les polygones.
Comment calculer une surface en hectares dans la calculatrice de champ QGIS ?
Réglez Output field type sur Decimal number (real), réglez Precision sur 2 ou 3, et entrez $area / 10000 (à condition que les unités de surface du projet soient des mètres carrés et que l'ellipsoïde du projet soit réglé dans Project > Properties > General). Pour arrondir la valeur stockée elle-même à 3 décimales, utilisez round($area / 10000, 3).
Comment mettre à jour seulement les entités sélectionnées dans la calculatrice de champ ?
Sélectionnez d'abord les entités sur le canevas ou dans la table attributaire, puis ouvrez la calculatrice de champ (Ctrl+I). La case Only update N selected feature(s) en haut à gauche sera cochée automatiquement. Choisissez Update existing field, prenez la colonne dans la liste déroulante, entrez votre expression et cliquez sur OK.
Faites-le dans QGIS en le demandant
AI Agent réalise la tâche que vous décrivez, dans votre propre projet QGIS. Gratuit, sans carte bancaire.
, ouvrez la table attributaire de la couche, cliquez sur l'icône Field Calculator (calculatrice de champ, 

