Veldberekening in QGIS (Field Calculator): 24 geteste expressies en de valkuilen
Gepubliceerd op
Om een kolom te berekenen in QGIS, open je de attributentabel van de laag, klik je op het pictogram van de Field Calculator (Veldberekening, Ctrl+I), kies je een nieuw of bestaand veld, typ je een expressie en klik je op OK. Dat deel gaat snel. Het lastige deel is wanneer de expressie zonder foutmelding draait en NULL-waarden, vierkante graden of de verkeerde klasse wegschrijft.
Op 7 november 2026 heb ik 24 expressies in de Field Calculator uitgevoerd op echte OpenStreetMap-lagen voor Indiranagar en omliggende wijken in Bengaluru, India (8.709 gebouwen, 854 wegen, 35 scholen, 37 bushaltes, 10 wijken), en daarnaast telkens de veelgemaakte foute versie. Hieronder vind je het kookboek met de exacte uitvoerwaarden, de stille valkuilen gemeten tegen een ellipsoïdische referentie, en wat er gebeurde toen ik de drie lastigste aan een AI-agent binnen QGIS gaf.
Wat is de QGIS Field Calculator?
De QGIS Field Calculator is de ingebouwde tool die kolommen in de attributentabel aanmaakt of bijwerkt met QGIS-expressies. Hij kan geometriewaarden berekenen zoals oppervlakte, lengte en coördinaten, tekst herschrijven, rijen classificeren met CASE WHEN, en tellingen of afstanden ophalen uit andere lagen in je project.
QGIS biedt eigenlijk vier plekken om dezelfde expressies uit te voeren, en de verkeerde kiezen is de eerste manier om werk kwijt te raken:
- Het Field Calculator-venster (
Ctrl+I): bewerkt de laag zelf. Je kunt een nieuwe kolom maken of een bestaande overschrijven, op alle objecten of alleen op de geselecteerde. Je wijzigingen staan in de bewerkingsbuffer tot je ze opslaat. - Een virtueel veld (selectievakje in het venster): berekent de expressie live, elke keer dat je de tabel opent of de kaart tekent. Toen ik de footprint van gebouw
fid27 in mijn testlaag verdubbelde, bleef de gewone oppervlaktekolom op197.355staan terwijl het virtuele veld bijwerkte naar789.418. Het addertje: een virtueel veld staat in je.qgs-projectbestand, niet in de GeoPackage of Shapefile. Open je het bestand in een nieuw project, dan is de kolom weg. - De Processing-tool "Field calculator" (
native:fieldcalculator): schrijft een volledig nieuwe uitvoerlaag en laat je oorspronkelijke laag ongemoeid. Gebruik dit in modellen of als je niet ter plekke wilt bewerken. Let op@row_number, dat hier bij0begint en in het venster bij1. - De snelle rekenbalk boven in de attributentabel: werkt een bestaande kolom bij zonder het volledige venster te openen, handig voor een snelle eenregelige expressie als je al in bewerkingsmodus zit.
Een veld berekenen, stap voor stap
Open de Field Calculator
Klik met de rechtermuisknop op je laag en kies Open Attribute Table, en klik dan op het telraampictogram in de werkbalk van de attributentabel. Met de laag geselecteerd in het paneel Lagen opent Ctrl+I de Field Calculator direct.
Controleer de selectie en de veldinstellingen
Als er objecten op je kaart geselecteerd zijn, staat Only update N selected feature(s) standaard aangevinkt. Vink het uit als je de hele laag wilt berekenen. Kies Create a new field (of Update existing field), vul de Output field name in en kies het Output field type (Decimal number (real) voor oppervlaktes en lengtes met decimalen, Integer voor hele tellingen, Text (string) voor labels en klassen).
Schrijf de expressie en controleer de Preview
Typ je expressie in de editor links, of zoek in de functielijst in het midden en dubbelklik om in te voegen. Controleer altijd de Preview-regel onder de editor voordat je op OK klikt. Staat daar een fout, NULL, of een getal dat eruitziet als 0.0000003, verbeter dan de expressie voordat je die naar 8.000 rijen schrijft.
Klik op OK en sla je bewerkingen op
Klik op OK. Stond de laag niet in bewerkingsmodus, dan waarschuwt QGIS dat de bewerkingsmodus automatisch wordt aangezet. Klik na de berekening op het diskettepictogram Save Edits in de werkbalk van de attributentabel, zodat de kolom naar schijf wordt geschreven.
Hier is het venster op de wegenlaag, klaar om een wegklasse te schrijven:

Weet je de naam van een functie niet, gebruik dan het zoekvak boven de middelste kolom. Het filtert de functieboom en opent rechts de documentatie, inclusief de volgorde van de parameters en voorbeelden.

Het geteste expressiekookboek
Elke expressie hieronder is uitgevoerd in QGIS 3.44.15 op 7 november 2026 op onze OpenStreetMap-lagen van Bengaluru (opgeslagen in EPSG:4326, projectellipsoïde WGS 84). Heb je testdata voor je eigen gebied nodig, dan legt onze gids over OpenStreetMap-data downloaden in QGIS uit hoe je gebouwen, wegen en punten netjes ophaalt.
De voorbeeldwaarden voor gebouwen hieronder komen van gebouwen fid 27, 28, 30, 60 en 62 (met adressen en aantal verdiepingen) en fid 1, 2 en 3 (zonder beide).
Oppervlakte, lengte, omtrek en coördinaten
| Wat je wilt | Te plakken expressie | Getest resultaat op voorbeeld | Veelgemaakte foute versie (en wat er gebeurt) |
|---|---|---|---|
| Gebouwoppervlakte in m² (ellipsoïdisch) | $area | 197.35, 110.86, 141.11, 219.71, 318.83 | area($geometry) geeft 0.0 (ongeveer 3e-7 vierkante graden), zonder fout |
| Gebouwoppervlakte in m² (geprojecteerd in UTM 43N) | area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | 197.60, 110.99, 141.29, 219.98, 319.22 | Transformeren naar 'EPSG:3857' (Web Mercator) blaast de oppervlakte hier met +5,95% op |
| Weglengte in meter (ellipsoïdisch) | $length | 616.34, 7.99, 1104.32, 9.14, 72.24 | length($geometry) geeft 0.005681, 0.000074 (graden), zonder fout |
| Weglengte in meter (geprojecteerd in UTM 43N) | length(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | 616.72, 7.99, 1105.01, 9.14, 72.29 | Transformeren naar 'EPSG:3857' blaast de weglengte met een mediaan van +3,03% op |
| Gebouwomtrek in meter | $perimeter | 56.72, 44.97, 48.60, 61.54, 72.69 | perimeter($geometry) geeft graden op een EPSG:4326-laag |
| Zwaartepunt X van polygoon (Easting in meter) | x(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643'))) | 786714.46, 786437.79, 786237.28 | $x op een polygoon geeft NULL zonder fout; x_at($geometry, 0) geeft het eerste hoekpunt (77.642744), niet het midden |
| Zwaartepunt Y van polygoon (Northing in meter) | y(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643'))) | 1435359.45, 1435116.32, 1436699.32 | y(centroid($geometry)) geeft graden (12.97...) als de laag in EPSG:4326 staat |
| Rijnummer of object-ID | @row_number of $id | 1, 2, 3, 4 (venster) of 27 voor $id op fid 27 | @row_number begint bij 1 in het venster, maar bij 0 in Processing native:fieldcalculator |
Schrijf je $area naar een uitvoerveld van het type Integer in plaats van Decimal number (real) (getest met de Processing Field calculator), dan rondt QGIS af naar het dichtstbijzijnde gehele getal (197.35 wordt 197, 110.86 wordt 111) in plaats van af te kappen.
Voorwaardelijke klassen (CASE WHEN en omgaan met NULL)
| Wat je wilt | Te plakken expressie | Getest resultaat op voorbeeld | Veelgemaakte foute versie (en wat er gebeurt) |
|---|---|---|---|
| Grootteklasse op basis van oppervlakte | CASE WHEN $area < 100 THEN 'small' WHEN $area < 250 THEN 'medium' ELSE 'large' END | medium, medium, medium, medium, large | Niet getest |
| NULL-verdiepingen vervangen door een standaardgetal | coalesce(to_int("building:levels"), 1) | 4, 4, 2, 4, 3 (en 1 waar levels NULL is) | "building:levels" + 'a' geeft '4a' omdat OSM-tags als tekst worden opgeslagen |
| Hoogteklasse met NULL apart gehouden | 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 (en unknown voor fid 1) | Zonder WHEN ... IS NULL valt elke lege rij in ELSE, waardoor 7.636 niet-gekarteerde gebouwen het label 'high' krijgen |
Tekst opschonen, opmaken en datums
| Wat je wilt | Te plakken expressie | Getest resultaat op voorbeeld | Veelgemaakte foute versie (en wat er gebeurt) |
|---|---|---|---|
| Huisnummer en straat veilig samenvoegen | concat("addr:housenumber", ' ', "addr:street") | '594 12th Main Road', '83/4 13th Main Road' (' ' als beide NULL zijn) | "addr:housenumber" || ' ' || "addr:street" geeft NULL als een van beide kolommen NULL is |
Achtervoegsel (Road, Main, Cross) uit wegnaam halen | regexp_replace("name", '\\s+(Road|Main|Cross)$', '') | 'Chinmaya Mission Hospital', '13th Main', '12th Main' | Een enkele backslash \s+ faalt met Invalid regular expression '?+(Road|Main|Cross)$' |
| Een ID aanvullen met nullen tot 12 cijfers | lpad(to_string("osm_id"), 12, '0') | '000313829229', '000313835091' | Niet getest |
| Een getal opmaken voor weergave | format_number($area, 1) | '197,4', '110,9' ('3 958,7' voor 3958.7 op een Mac met kommanotatie) | De uitvoer is tekst die de landinstelling van je besturingssysteem volgt (decimale komma en smalle vaste spatie), dus je kunt er daarna niet mee rekenen |
| Dagen tussen twee datums | day(age(to_date('2026-11-07'), to_date('2019-03-15'))) | 2794 | age(...) alleen geeft een QgsInterval-object; to_date('07/11/2026') faalt tenzij je 'dd/MM/yyyy' als tweede argument meegeeft |
Let ook op de lengte van je uitvoerveld als je tekst naar een GeoPackage of Shapefile schrijft. Toen ik concat("addr:housenumber", ' ', "addr:street") in Processing naar een tekstveld met lengte 40 schreef, brak de hele berekening af zonder uitvoer, omdat één weg (" 80 Feet Road(Sir C.V. Raman Hospital Road)") 43 tekens lang was.
Ruimtelijke tellingen, sommen en dichtstbijzijnde afstand tussen lagen
Met deze expressies kan de ene laag een andere laag in je project bevragen zonder een aparte ruimtelijke join in QGIS.
| Wat je wilt | Te plakken expressie | Getest resultaat op voorbeeld | Veelgemaakte foute versie (en wat er gebeurt) |
|---|---|---|---|
| Gebouwen tellen die elke wijk raken | aggregate('buildings', 'count', "osm_id", filter:=intersects($geometry, geometry(@parent))) | 4, 1552, 336, 3141, 79, 402, 1179, 348, 1539, 139 | Zonder filter:=... krijgt elke wijk het totaal van de hele laag (8709), zonder fout |
| Totale gebouwoppervlakte in ha per wijk | 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 | Telt volledige footprints op die de wijkgrens raken, dus gebouwen op de grens tellen in beide wijken mee |
| Scholen tellen binnen elke wijk | array_length(overlay_contains('schools', "osm_id")) | 0, 2, 3, 18, 0, 0, 7, 3, 2, 0 (som: 35) | overlay_contains('schools') zonder tweede argument geeft true of false, geen telling |
| Afstand in meter tot de dichtstbijzijnde bushalte | 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))) geeft 0.001142 (graden) |
| Bushaltes tellen binnen 300 m van een gebouw | 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)) geeft 37 (elke halte) omdat 300 als 300 graden wordt gelezen |
Vijf valkuilen in de Field Calculator die zonder foutmelding misgaan
Ik heb 70 hulpvragen gelezen in de reacties onder QGIS-tutorials op YouTube: 48 waren echte vragen over het schrijven van een expressie, en 8 daarvan gingen over een expressie die ongeldig is, NULL geeft of niets selecteert. Erger is het geval waar niemand naar vraagt, omdat de expressie draait en geloofwaardige getallen wegschrijft. Dit zijn de vijf valkuilen die we op onze data van Bengaluru hebben gemeten.
1. $area vs area($geometry), en wat de projectellipsoïde doet
$area en area($geometry) doen niet dezelfde berekening, en minstens één tutorial uit 2026 beweert dat $area vierkante graden geeft in een geografisch CRS. Dat deed hij niet, in geen van beide projectinstellingen die we testten. Op 7 november 2026 hebben we beide gemeten, plus transform(), over de eerste 200 gebouwen en 200 wegen in onze EPSG:4326-lagen van Bengaluru, tegen een ellipsoïdische WGS 84-referentie (QgsDistanceArea).
$areaen$lengthgebruiken de projectellipsoïde (in te stellen onderProject > Properties > General > Measurements). Is de ellipsoïdeWGS 84, dan geeft$areanauwkeurige vierkante meters, ook als je laag en project in graden staan (EPSG:4326).- Staat de projectellipsoïde op
None / Planimetric, dan gaf$areaop onzeEPSG:4326-laag nog steeds geen vierkante graden. In QGIS 3.44.15 gaf hij vierkante meters die over de 200 gebouwen +3,24% te groot waren. area($geometry)enlength($geometry)zijn altijd planimetrisch in het eigen CRS van de laag. Op eenEPSG:4326-laag geeftarea($geometry)vierkante graden (rond0.0000003voor een huis), wat in een standaard decimale kolom afrondt naar0.0.- Transformeren naar Web Mercator (
EPSG:3857) vóórarea()blaast elk gebouw met +5,95% op, zelfs op de breedtegraad van Bengaluru (13° N), en weglengtes met +3,03%. Transformeren naar de lokale UTM-zone (EPSG:32643) blijft binnen +0,12% van de ellipsoïdische oppervlakte.
Expressie op EPSG:4326-lagen (n = 200 gebouwen, 200 wegen) | Mediane fout vs WGS 84-ellipsoïde | Maximale fout |
|---|---|---|
$area (projectellipsoïde WGS 84) | 0.00% | 0.00% |
$area (projectellipsoïde None) | +3.24% | +3.25% |
$perimeter (projectellipsoïde None) | +1.72% | +2.25% |
$length op wegen (projectellipsoïde None) | +1.31% | +2.61% |
area($geometry) | -100.00% (vierkante graden) | -100.00% |
length($geometry) op wegen | -100.00% (graden) | -100.00% |
area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | +0.12% | +0.12% |
length(transform($geometry, 'EPSG:4326', 'EPSG:32643')) op wegen | +0.06% | +0.06% |
area(transform($geometry, 'EPSG:4326', 'EPSG:3857')) | +5.95% | +5.96% |
length(transform($geometry, 'EPSG:4326', 'EPSG:3857')) op wegen | +3.03% | +3.26% |
Weet je niet zeker waarom EPSG:4326, EPSG:3857 en UTM-zones zich zo verschillend gedragen, lees dan onze uitleg over wat een CRS is in QGIS.
2. overlay_nearest leest max_distance in laageenheden, niet in meters
De functie overlay_nearest is snel omdat ze een ruimtelijke index gebruikt, en ze heeft een handige parameter max_distance. Maar max_distance wordt altijd gemeten in de coördinaateenheden van de laag.
Staan onze gebouwen en bushaltes in EPSG:4326 (graden) en schrijf je array_length(overlay_nearest('bus_stops', $id, max_distance:=300, limit:=-1)), dan zoekt QGIS naar bushaltes binnen 300 graden. Dat beslaat de hele aarde, dus elk gebouw krijgt 37 (alle 37 bushaltes in de laag). max_distance:=0.003 gokken voor 300 meter werkt ook niet goed, omdat een lengtegraad en een breedtegraad niet even lang zijn in meters: op gebouw fid 62 gaf 0.003 8 haltes in plaats van de werkelijke 7. Projecteer beide lagen eerst naar UTM, of gebruik het patroon aggregate(..., filter:=distance(transform(...))) uit de laatste rij van de ruimtelijke tabel hierboven.
3. NULL-rijen vallen direct in de ELSE-tak van CASE WHEN
In onze dataset van Bengaluru hebben maar 1.073 van de 8.709 gebouwen (12,3%) een building:levels-tag. De andere 7.636 zijn NULL.
Schrijf je CASE WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END, dan evalueren beide <=-vergelijkingen op een NULL-rij naar onbekend, en valt de rij in ELSE. Zo classificeer je 7.636 niet-gekarteerde gebouwen als hoogbouw, zonder één waarschuwing. Zet altijd WHEN "field" IS NULL THEN 'unknown' als eerste tak (of laat ELSE weg zodat rijen zonder match NULL blijven) als je data gaten heeft.
4. "Only update selected features" laat de rest van de kolom NULL
Zodra er ook maar één object op het kaartcanvas geselecteerd is, vinkt de Field Calculator automatisch Only update N selected feature(s) aan.
Toen ik de 39 primary-wegen in Bengaluru selecteerde en CASE WHEN "highway" IN ('primary', 'secondary') THEN 'arterial' ELSE 'local' END naar een nieuw veld road_rank schreef, schreef QGIS 'arterial' naar die 39 rijen en liet de andere 815 wegen (inclusief alle 28 secondary-wegen die mijn expressie expliciet noemde) op NULL.

5. Dubbele vs enkele aanhalingstekens (waarom "building" = "yes" NULL geeft)
In QGIS-expressies betekenen dubbele aanhalingstekens " " een veldnaam en enkele aanhalingstekens ' ' een tekstwaarde.
Typ je "building" = "yes", dan zoekt QGIS een kolom building en vergelijkt die met een andere kolom yes. Omdat er geen kolom yes bestaat, evalueert de expressie naar NULL (en de onderliggende QgsExpression-parser meldt Field 'yes' not found). Zo ook: bevat een kolomnaam een dubbele punt, zoals building:levels uit OpenStreetMap, dan faalt het weglaten van de dubbele aanhalingstekens met syntax error, unexpected Unknown_CHARACTER. Dubbelklik je op veldnamen in de lijst Fields and Values, dan worden altijd de juiste aanhalingstekens ingevoegd.
De syntaxis overslaan: dezelfde berekeningen met een AI-agent
$area schrijf je snel met de hand. Een geneste aggregate() met twee transform()-aanroepen, een verwijzing naar de @parent-geometrie en een afstandsfilter is waar mensen op Stack Exchange belanden.
Wij maken AI Agent, een chatpaneel dat in QGIS dockt, dus deze sectie gaat over onze eigen tool. Omdat hij binnen je open QGIS-project draait, bekijkt hij je laagnamen, veldtypes, CRS en unieke waarden voordat hij de Field Calculator of Processing-tools voor je uitvoert.
Op 7 november 2026 gaf ik AI Agent (v1.9.4, Medium effort, Balanced permissions) de drie meerstapsberekeningen uit ons testplan, één zin per chat, op exact dezelfde vijf lagen van Bengaluru in EPSG:4326.
| Taak | Exacte verstuurde prompt | Tijd van de agent | Resultaat tegen onze onafhankelijke controle |
|---|---|---|---|
| A. Nabijheidstelling | "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 | Geslaagd. Integer-veld aangemaakt, alle 8.709 gebouwen gevuld, 0 afwijkingen tegen onze telling van footprint tot halte in EPSG:32643 (bereik 0 tot 8). |
| B. Classificatie + stijl | "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 | Geslaagd. 563 low, 442 mid, 68 high (alle 1.073 kloppen met onze regel). De 7.636 rijen zonder verdiepingen bleven NULL en kregen een vierde, grijze categorie "Unknown levels". |
| C. Scholen en gebouwoppervlakte per wijk | "For each ward, add the number of schools and the total building area in hectares." | 37 s | Geslaagd (met een andere methode). school_count klopte voor 10/10 wijken (totaal 35). building_ha klopte met de geknipte footprint-oppervlaktes voor 10/10 wijken (totaal 148,25 ha). |
Bij taak A trapte de agent niet in de 300-graden-valkuil van overlay_nearest. Zijn toollog laat zien dat hij beide lagen bekeek, het CRS controleerde, de berekening in metrische eenheden uitvoerde vanaf de gebouwfootprints (niet de zwaartepunten, wat het antwoord voor 667 gebouwen zou hebben veranderd), en de minimum- en maximumwaarden controleerde voordat hij antwoordde.

Bij taak B controleerde hij eerst de unieke waarden van building:levels, zag dat 7.636 van de 8.709 gebouwen geen aantal verdiepingen hadden, liet die rijen NULL in height_class in plaats van ze in high te laten vallen, en paste een gecategoriseerde stijl met 4 klassen toe op de kaart.

De gerenderde kaart laat duidelijk zien waarom controleren op NULL belangrijk is bij OpenStreetMap-data: de grijze gebouwen zijn de 87,7% zonder vastgelegde building:levels-tag.

Bij taak C weken de building_ha-getallen van de agent licht af van de rij hectare per wijk in ons kookboek: New Thippasandra kwam uit op 20.151 ha in plaats van 20.292 ha (-0,69%), Jeevan Bhimanagar op -0.14% en Indiranagar op -0.06%. Toen ik naging waarom, bleek de agent een strengere geometrische methode te hebben gebruikt dan mijn intersects()-filter: hij knipte de gebouwpolygonen af op de wijkgrenzen voordat hij de oppervlaktes optelde, zodat gebouwen op een grens niet dubbel in twee wijken meetelden, en hij vermeldde dat in zijn antwoord. Wel liet hij de wijkenlaag in bewerkingsmodus staan met niet-opgeslagen wijzigingen, en zei hij in het antwoord dat de wijzigingen nog niet waren opgeslagen.

Dit is de resulterende attributentabel van de wijkenlaag na het opslaan van die wijzigingen:

Drie taken is een kleine steekproef (n = 3), en ik gaf duidelijke prompts die de velden en klassegrenzen noemden, dus zie dit als een demonstratie, niet als een benchmark. Voor eenvoudige formules zoals $area of concat() is het Field Calculator-venster sneller dan een chatbericht typen. Een agent verdient zijn plek bij aggregaties over lagen heen, CRS-transformaties of Processing-ketens met meerdere stappen, of als je anders een PyQGIS-script zou schrijven. Je kunt ook andere assistenten vergelijken op onze QGIS AI-hub.
Hoe we dit hebben gemeten. Alle tests liepen op 7 november 2026 in QGIS 3.44.15-Solothurn op macOS met OpenStreetMap-data voor Indiranagar, Bengaluru (bounding box 12.968, 77.634, 12.986, 77.656, ODbL) in project-CRS EPSG:4326. Elke expressie uit het kookboek is gecontroleerd tegen een onafhankelijke Python- of QgsDistanceArea-berekening op dezelfde object-ID's. Fouten in oppervlakte en lengte zijn gemeten over de eerste 200 gebouwen en 200 wegen op fid tegen QgsDistanceArea met de WGS 84-ellipsoïde (EPSG:7030). AI Agent 1.9.4 draaide op Medium effort en Balanced permissions, in een nieuwe chat per taak. Onze tellingen van YouTube-vragen komen uit 70 hulpvragen onder 59 video's, gefilterd uit een corpus van 25.276 reacties.
Veelgestelde vragen
Waarom is mijn $area-berekening fout of geeft die 0 in QGIS?
Controleer eerst of je area($geometry) hebt getypt in plaats van $area. Op een laag die in graden is opgeslagen (EPSG:4326) geeft area($geometry) vierkante graden (rond 0.0000003 voor een huis), wat in een decimaal veld afrondt naar 0.0. Gebruik $area met je projectellipsoïde op WGS 84 onder Project > Properties > General > Measurements, of herprojecteer de geometrie in de expressie met area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) en je lokale UTM-zone. Vermijd EPSG:3857 (Web Mercator), dat in onze test gebouwoppervlaktes met +5,95% opblies, zelfs op 13° N.
Hoe schrijf ik een IF- of CASE-statement in de QGIS Field Calculator?
Voor twee uitkomsten gebruik je if(condition, value_if_true, value_if_false), bijvoorbeeld if($area < 100, 'small', 'large'). Voor drie of meer klassen gebruik je 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
Zet de IS NULL-controle vooraan. Anders valt elke rij met een lege waarde in ELSE.
Waarom gaf de Field Calculator NULL voor alle of de meeste rijen?
Vier veelvoorkomende oorzaken:
- Er was een object op de kaart geselecteerd, dus Only update N selected feature(s) stond aangevinkt en liet elke niet-geselecteerde rij
NULL. - Je hebt tekst samengevoegd met
||(zoals"addr:housenumber" || ' ' || "addr:street"), waarbij éénNULL-invoer het hele resultaatNULLmaakt. Gebruik in plaats daarvanconcat(). - Je zette dubbele aanhalingstekens om een tekstwaarde (
"building" = "yes"), waardoor QGIS een kolomyeszoekt. Gebruik enkele aanhalingstekens voor waarden ("building" = 'yes'). - Je gebruikte
$xof$yop een polygoon- of lijnlaag.$xwerkt alleen op punten; gebruikx(centroid($geometry))voor polygonen.
Hoe bereken ik oppervlakte in hectare in de QGIS Field Calculator?
Zet het Output field type op Decimal number (real), zet Precision op 2 of 3, en voer $area / 10000 in (ervan uitgaande dat de oppervlakte-eenheid van je project vierkante meter is en je projectellipsoïde is ingesteld onder Project > Properties > General). Wil je de opgeslagen waarde zelf afronden op 3 decimalen, gebruik dan round($area / 10000, 3).
Hoe werk ik alleen geselecteerde objecten bij in de Field Calculator?
Selecteer eerst de objecten op het kaartcanvas of in de attributentabel, en open dan de Field Calculator (Ctrl+I). Het selectievakje Only update N selected feature(s) linksboven wordt automatisch aangevinkt. Kies Update existing field, kies de kolom in de keuzelijst, voer je expressie in en klik op OK.
Doe het in QGIS door erom te vragen
AI Agent voert de taak uit die je beschrijft, in je eigen QGIS-project. Gratis, geen kaart nodig.
, open je de attributentabel van de laag, klik je op het pictogram van de Field Calculator (Veldberekening, 

