Raster naar vector in QGIS: elke methode en wanneer die werkt

Om een raster naar vectorpolygonen om te zetten in
, open je Raster > Conversion > Polygonize (Raster to Vector), kies je je band, geef je het uitvoerveld een naam en voer je het uit. Je krijgt één polygoon per verbonden groep pixels met dezelfde waarde, waarbij die waarde in de attributentabel wordt geschreven. Dit is de juiste oplossing voor een geclassificeerd raster en de verkeerde oplossing voor een foto. De meeste problemen ontstaan doordat mensen niet weten met welk type raster ze werken.
We bouwen bij TerraLab een QGIS-plugin genaamd AI Segmentation. Die staat als één rij in de laatste tabel op deze pagina, beschreven zoals de andere.
Wat raster naar vector betekent
Een raster is een raster van pixels. Een vector bestaat uit punten, lijnen en polygonen met coördinaten en attributen. Een raster naar vector omzetten betekent bepalen waar een grens ligt. Een pixelraster heeft zelf geen andere grenzen dan de randen van zijn cellen.
Elke methode hieronder verschilt alleen in wat ze als een rand beschouwt. Polygonize gebruikt elke plek waar twee aangrenzende pixels verschillende waarden hebben, contour gebruikt een gekozen hoogte en een segmentatiemodel gebruikt de plek waar een object ophoudt. Daarom werkt alleen de laatste methode op een foto.
Kies je methode
| Wat je hebt | De methode die werkt | Wat het kost |
|---|---|---|
| Geclassificeerd of thematisch raster (landbedekking, een geherclassificeerde helling, een masker) | Raster > Conversion > Polygonize (Raster to Vector) | Gratis, in de QGIS-kern |
| Continu raster (NDVI, helling, een reflectantieband) | Eerst Reclassify by table, daarna polygonize | Gratis, in de QGIS-kern |
| DEM of een ander hoogteoppervlak | Raster > Extraction > Contour, of Contour Polygons | Gratis, in de QGIS-kern |
| Gescande papieren kaart of een plan | GRASS r.thin plus r.to.vect, of een traceertool buiten QGIS. Niets in de QGIS-kern doet dit goed | Gratis en traag. Betaalde AI-tracering bestaat |
| Orthofoto, drone- of satellietbeelden | Een segmentatiemodel. Polygonize is niet van toepassing | Gratis plugins hebben een NVIDIA-kaart nodig. Cloudplugins hebben gratis niveaus, daarna een abonnement |
De meeste lezers hebben de eerste rij nodig en kunnen na de volgende twee secties stoppen.
Polygonize, het standaardantwoord
Het QGIS-algoritme is Polygonize (raster naar vector), id gdal:polygonize, en het gebruikt de GDAL-tool gdal_polygonize. Het maakt één polygoon voor elke verbonden regio van pixels met een gemeenschappelijke waarde en schrijft die waarde naar een attribuut.

Open the tool
Raster > Conversion > Polygonize (Raster to Vector). Het staat ook in de Processing Toolbox onder GDAL, Raster conversion.
Pick the band
Band 1, tenzij je klassen ergens anders staan. Er wordt maar één band gebruikt, dus een RGB-raster moet vóór deze stap worden teruggebracht tot één klassenband.
Name the field
DN is de standaardwaarde. Hernoem het naar iets wat je over zes maanden nog begrijpt, zoals landcover_code.
Decide on 8-connectedness
Standaard uitgeschakeld, dus pixels moeten een volledige rand delen om samen te voegen. Schakel het in en ook diagonaal rakende pixels worden samengevoegd. Bij dunne diagonale objecten splitst uitgeschakeld laten één object op in een keten van polygonen.
Save to a real file
De standaard is een tijdelijke layer. Op een groot raster levert dit tienduizenden objecten op, dus schrijf rechtstreeks naar een GeoPackage.
![Het QGIS-dialoogvenster Polygonize (Raster to Vector). De invoerlaag heet Land cover 10 m [EPSG:32631], het bandnummer is Band 1 (Palette), het aan te maken veld heet landcover_code, Use 8-connectedness is niet aangevinkt en de uitvoer wordt naar een GeoPackage geschreven.](/_next/image?url=%2Fblog%2Fraster-to-vector-qgis%2F02_polygonize_dialog.jpg&w=3840&q=75)
Twee dingen besparen je hier tijd.
Stel een NoData-waarde in voor de klasse die je niet wilt. GDAL gebruikt het geldigheidsmasker van de band, zodat NoData-pixels worden overgeslagen in plaats van één enorme achtergrondpolygoon rond al het andere te worden. Dit is de meest voorkomende klacht over polygonize-uitvoer en het is een rastereigenschap, geen instelling van de tool.

Zorg ervoor dat de band een integer-type heeft. gdal:polygonize schrijft altijd een integer-veld, dus het converteert een float-band tijdens het inlezen. Dat kan op twee verschillende manieren misgaan, afhankelijk van hoe je raster zijn waarden opslaat, en geen van beide wordt gemeld. Float32 moet eerst door Reclassify by table, zoals in de volgende sectie.
Het trapvormige probleem en hoe je het oplost
Polygonize volgt pixelgrenzen. Niets meer. Een diagonale perceelsgrens komt dus terug als een reeks haakse stappen, één per pixel. Een Sentinel-classificatie van 10 m geeft je trappen van 10 m.

Dat is correcte uitvoer. De tool tekent precies wat het raster zegt. Het ziet er alleen niet uit als een kaart, en geen enkele instelling binnen polygonize verandert dat. De oplossing bestaat uit vier vectorgeometrie-algoritmen die je daarna in deze volgorde uitvoert.
1. Dissolve (native:dissolve). Stel het dissolve-veld in op het klasseveld dat je zojuist hebt aangemaakt. Aangrenzende polygonen van dezelfde klasse worden samengevoegd tot één object per klasse. Voer dit eerst uit, zolang de geometrie nog exact is, omdat het samenvoegen van vereenvoudigde randen langs elke gedeelde grens slivers achterlaat. Als je elk vlak afzonderlijk wilt houden in plaats van één multipart-object per klasse, vink je Keep disjoint features separate aan bij de geavanceerde parameters.
2. Filter by area (native:extractbyexpression, in Vector selection). Expressie:
$area > 500
De eenheden zijn de CRS-eenheden van de layer, dus gebruik een geprojecteerd CRS of het getal betekent niets. Stel de drempel in op wat in jouw data een echt vlak is. Bij een classificatie van 10 m zijn 500 m2 vijf pixels, ongeveer het punt waarop spikkels verdwijnen en objecten beginnen. De figuur hieronder gebruikte 2.000 m2 op hetzelfde raster, omdat de overblijvende slivers elkaar bij 500 m2 kruisten nadat ze waren vereenvoudigd. Bekijk het histogram van je eigen oppervlakten in plaats van een van beide getallen over te nemen. Als het raster losse pixels van een andere klasse binnen een vlak achterlaat, verwijdert native:deleteholes ze na deze stap.
3. Simplify (native:simplifygeometries). De standaardtolerantie is 1.0 in layer-eenheden. Stel deze ongeveer in op één pixelgrootte. De trappen vallen dan samen tot rechte stukken, waarbij de grens minder verschuift dan een lezer kan zien. Het keuzemenu voor de methode biedt Douglas-Peucker (op afstand gebaseerd), Visvalingam (op oppervlakte gebaseerd) en snap to grid. Visvalingam behoudt de vorm van kleine objecten beter wanneer je de tolerantie verhoogt.
4. Smooth (native:smoothgeometry). Alleen gebruiken voor objecten die echt gebogen zijn: beken, kustlijnen en vegetatievlakken. Offset staat standaard op 0.25 en iterations bepaalt hoe rond het wordt. Stel Maximum node angle to smooth in op 90. Dan blijft elke hoek die scherper is dan dat scherp, zodat de tool de hoeken van gebouwen en percelen niet afrondt.
Als je ook gesloten vlakken zonder gaten binnenin wilt, verwijdert native:deleteholes gaten onder een minimale oppervlakte. Met 0.0 verwijdert het alle gaten.

Herclassificeer eerst wanneer het raster continu is
Polygonize op een continu raster gaat op één van twee manieren mis. Welke manier je krijgt, hangt af van hoe de waarden zijn opgeslagen.
Opgeslagen als geschaalde gehele getallen, zoals NDVI-producten daadwerkelijk worden geleverd, levert bijna elke pixel een polygoon op, omdat bijna geen twee pixels dezelfde waarde hebben. We maten 39.801 polygonen uit 40.000 pixels in een Sentinel-2-scène.
Opgeslagen als onbewerkte floats tussen -1 en 1, maakt de conversie naar integer elke waarde plat tot -1, 0 of 1 voordat het traceren begint. Dezelfde scène kwam terug als 238 polygonen in twee klassen. Dat lijkt een schoon resultaat, maar dat is het niet: je data is verdwenen.
Hetzelfde geldt voor helling, hoogte, temperatuur of een onbewerkte reflectantieband. De tool is in geen van beide gevallen mislukt. Hij traceert grenzen tussen integerwaarden, en een continu raster heeft geen bruikbare integerwaarden om te traceren.

Zet het continue oppervlak eerst om in klassen met Reclassify by table, id native:reclassifybytable. De herclassificatietabel heeft drie kolommen: minimum, maximum en de nieuwe waarde. De tabel accepteert -inf, inf en nan voor NoData. Een vegetatiemasker bestaat uit drie rijen:
| Minimum | Maximum | Value |
|---|---|---|
| -inf | 0.2 | 1 |
| 0.2 | 0.5 | 2 |
| 0.5 | inf | 3 |

Wijzig twee standaardwaarden in de geavanceerde parameters. Output data type staat standaard op Float32. Stel het in op Byte of Int16, dan werkt polygonize zoals verwacht. Range boundaries staat standaard op min < value <= max. Dit bepaalt aan welke kant van 0.2 een pixel met exact de waarde 0.2 terechtkomt.
Polygonize daarna het geherclassificeerde raster en voer de bovenstaande opschoning uit.
Contouren voor een DEM
Gebruik voor hoogte geen polygonize. Gebruik Contour via Raster > Extraction > Contour, id gdal:contour. Het interval staat standaard op 10.0 in de eenheden van het raster en de hoogte wordt standaard in een veld met de naam ELEV geschreven.

Vink Produce 3D vector aan als je de hoogte op elke vertex wilt. Laat het uitgeschakeld voor een gedrukte kaart, omdat veel software de Z stilzwijgend verwijdert.
De verwante gdal:contour_polygon geeft gevulde banden tussen twee hoogtes in plaats van lijnen, met ELEV_MIN en ELEV_MAX op elke polygoon. Dat is wat je nodig hebt voor een hypsometrische kaart of een overstromingsgebied. Zo hoef je een geherclassificeerd DEM niet handmatig te polygoniseren.

Contouren uit een lidar-DEM worden lawaaierig omdat het oppervlak lawaaierig is. Maak het raster glad vóór de contourstap, niet de lijnen erna. Door de lijnen glad te maken gaan ze elkaar kruisen.
Gescande papieren kaarten: QGIS heeft geen ArcScan
Als je vanuit ArcGIS op zoek bent naar het QGIS-equivalent van ArcScan, dan is dat er niet. Interactief rastertraceren, waarbij je op een lijn in een scan klikt en de tool die volgt, ontbreekt echt. Ik zeg dat liever rechtstreeks dan dat je naar het menu blijft zoeken.
Wat mensen daadwerkelijk gebruiken, ongeveer in volgorde van hoe goed het werkt:
- GRASS, meegeleverd met de meeste QGIS-installers. Maak van de scan een binair raster met een drempelwaarde, dun het uit met r.thin en voer daarna r.to.vect uit met feature type
line. De GRASS-documentatie waarschuwt dat dit bij kruisingen en loshangende uitlopers te veel knooppunten maakt, dus reken op opschoning. Gratis en geschikt voor schoon lijnwerk. - Potrace of AutoTrace, buiten QGIS. Bitmap naar vector, daarna het resultaat terugbrengen en georefereren. Goed voor scans met hoog contrast, maar blind voor alles wat met geografie te maken heeft.
- Bunting Labs AI Vectorizer (vermelding in de QGIS-repository). Een QGIS-plugin die een lijn automatisch aanvult terwijl je digitaliseert, specifiek gericht op geologische kaarten, as-built-tekeningen en plannen. De beperking: de plugin stuurt rasterfragmenten naar hun servers, er is geen gratis niveau na de proefperiode en de gepubliceerde prijzen beginnen bij 29 dollar per maand, gelezen op 23 augustus 2026.
Voor een handvol objecten op één blad wint handmatig digitaliseren met snapping nog steeds. Ik zou geen traceerworkflow bouwen voor minder dan ongeveer vijftig objecten.
Wanneer polygonize het verkeerde hulpmiddel is
Pas polygonize toe op een orthofoto en je krijgt ruis, omdat er niets is om te classificeren met een drempel. Een rood dak en een rode auto hebben vergelijkbare pixelwaarden. Een grijs dak en een grijze weg hebben vergelijkbare pixelwaarden. De klassen bestaan in je hoofd, niet in het bestand.
Objecten uit fotografische beelden halen vereist een model dat heeft geleerd hoe objecten eruitzien. Deze tools schrijven rechtstreeks vectoren, dus polygonize komt er niet aan te pas. Hieronder staat wat je installeert en wat het van je vraagt.
| Tool | Wat je installeert | GPU | Account | Beelden verlaten je machine | Wat eruit komt | Kosten |
|---|---|---|---|---|---|---|
| Deepness (bron) | Plugin manager, daarna de Python-pakketten en een ONNX-model | Optioneel, CPU werkt | Nee | Nee | Polygon layer, bounding boxes of een raster | Gratis |
| Geo-SAM | Plugin manager, daarna dependencies en modelgewichten via het eigen instellingenvenster | Optioneel, klikken draait op CPU | Nee | Nee | Polygon layer, op pixelniveau of vereenvoudigd | Gratis |
| samgeo | Een Python-pakket in je eigen omgeving, zonder QGIS-paneel | Aanbevolen | Nee | Nee | GeoJSON, Shapefile of GeoPackage dat je zelf laadt | Gratis |
| Mapflow (site) | Plugin manager | Nee | Ja | Ja, je GeoTIFF-upload of de tile-service waarnaar je verwijst | Polygon layer | Credits, betaald |
| Bunting Labs AI Vectorizer | Plugin manager | Nee | Ja | Ja, in rasterfragmenten | Vertices in de layer die je digitaliseert | Proefperiode, daarna 29 dollar per maand |
| AI Segmentation, van ons | Plugin manager | Nee | Ja in beide cloudmodi, nee voor het kleine lokale model | Polygon layer in het project-CRS, met label, klasse, score, area_m2 en perimeter_m | Gratis tegoed, daarna 39 euro per maand exclusief btw |
Eén beperking per tool.
- Deepness draait het model dat je eraan geeft, dus je moet er eerst een vinden of trainen.
- Geo-SAM gebruikt klikken en kaders, één object per keer.
- samgeo heeft geen QGIS-interface. Je schrijft Python.
- Mapflow levert een vaste catalogus modellen voor gebouwen, bos, wegen en bouwplaatsen. Het kan dus geen object vinden waarvoor niemand het heeft getraind.
- Bunting Labs AI Vectorizer volgt lijnwerk terwijl je digitaliseert. Het vindt niet elk object in een zone.
- AI Segmentation, van ons, stuurt beelden in beide cloudmodi naar een server. Alleen het kleine lokale model blijft op je machine.
Kosten en gratis niveaus gelezen op 23 augustus 2026.

Onbewerkte modeluitvoer van elk van deze tools moet worden gefilterd, net zoals polygonize-uitvoer moet worden opgeschoond. In één run boven centraal Parijs hielden we 82 polygonen van de 635 over, en die 82 vertegenwoordigden nog steeds 84 procent van de bebouwde oppervlakte. De handleiding voor gebouwcontouren behandelt die filterstap van begin tot eind, en de SAM in QGIS-post behandelt welke objecten deze modellen goed vinden.
Try it free in QGIS, no card needed
Verder lezenAI Segmentation voor QGIS: de complete gids
De versie van twee minuten
Open de eigenschappen van je raster en bekijk het bandtype en het waardebereik. Integer met minder dan honderd verschillende waarden betekent dat je rechtstreeks naar Raster > Conversion > Polygonize (Raster to Vector) gaat, daarna Dissolve, filteren op oppervlakte en Simplify. Float met duizenden verschillende waarden betekent eerst Reclassify by table. Een foto betekent dat niets hiervan van toepassing is. De vergelijking van QGIS AI-plugins is de pagina die je daarna nodig hebt.
Als je alleen gebouwen nodig hebt, haalt onze gratis tool voor gebouwcontouren ze uit open data in de browser, zonder plugin.


