Ga naar inhoud
Terug naar blog
AI Segmentation
QGIS
Handleiding

Zonnepanelen detecteren in QGIS: 5 methoden

Drie panelen over dezelfde daken in een buitenwijk: gewone luchtfoto, dezelfde daken met OpenStreetMap zonne-generatoren als schaarse omtrekken, en dezelfde daken nogmaals met elk array gedetecteerd als eigen polygoon.

Om zonnestroom op daken in te karteren, begin je met wat iemand al heeft gekarteerd. Open Vector > QuickOSM > QuickOSM…, zet generator:source in het key-vak en solar in het value-vak, en voer het uit op jouw gebied. OpenStreetMap bevat 6.143.024 objecten met die tag, gelezen op 3 september 2026, dus in een goed gekarteerde plaats ben je in twee minuten klaar. Waar de dekking dun is, detecteer je de arrays zelf, en de methode hangt af van je banden en je pixelgrootte.

Waar het web het mis heeft

Drie antwoorden komen steeds terug, en elk kost een dag voordat je erachter komt.

"Gebruik Sentinel-2." Zijn pixel is 10 m en een paneel is 1 tot 2 m lang, dus een heel dak past in één pixel. Sentinel-2 vindt grondgebonden parken en vindt nooit daken.

"Classificeer je orthofoto met SCP." De eigen FAQ van de plugin sluit dat zelf uit: "You cannot use orthophotos with less than 4 bands". Een RGB-orthofoto of een basemap is wat de meeste mensen hebben, en het is precies de input die SCP niet accepteert.

"Tel de panelen als je de detectie hebt." Clark en Pacifici vonden dat afzonderlijke modules "moeilijk te onderscheiden zijn, zelfs bij 15,5 cm resolutie". Beeldmateriaal geeft je arrays en oppervlakte. Het aantal modules en de kilowatts komen uit een register.

Het korte antwoord

Jouw inputMethodeWat het kost
Een gebied dat OpenStreetMap al goed dektMethode 1, QuickOSMGratis
Multispectrale beelden met een nabij-infraroodbandMethode 2, Raster > Raster Calculator…Gratis, kern QGIS
Vier banden of meer, en tijd om trainingsgebieden te tekenenMethode 3, Semi-Automatic Classification PluginGratis plugin
Een RGB-orthofoto rond 20 cm, en een GPU of geduldMethode 4, Deepness plus zijn Solar PV-modelGratis
Elke raster die de canvas toont, op elke machineMethode 5, een cloudsegmentatiemodelGratis 3 km² per maand, daarna €39

Hoe ik ze heb vergeleken

Vijf criteria: benodigde banden, de resolutie waaronder de methode niet meer werkt, of je beelden je machine verlaten, kosten vóór de eerste polygoon, en of de output polygonen of pixels zijn. Prijzen, plugin-versies en tag-aantallen gelezen op 3 september 2026. Wij bouwen een van de vijf, en dat is Methode 5.

Eén taak besteed ik elders uit. Voor geïnstalleerd vermogen in een heel land verslaat een utiliteitsregister elke methode hier, omdat het de kilowatts kent en beeldmateriaal nooit.

Voor je begint

Grondresolutie beslist alles. Bradbury et al. bouwden hun referentie-PV-dataset op 30 cm omdat "zonnepanelen doorgaans tussen 1 en 2 meter lang zijn", wat meerdere pixels op elk paneel zet. Dat lost het array op, niet de modules erin. Clark en Pacifici vonden afzonderlijke panelen "moeilijk te onderscheiden, zelfs bij 15,5 cm resolutie". Gepubliceerd werk over PV op daken zit tussen 10 cm en 31 cm. Sentinel-2 op 10 m is voor parken, nooit voor daken.

Werk in een geprojecteerde CRS, omdat twee stappen hieronder een oppervlakte in layer-eenheden nemen.

Four crops of aerial imagery side by side, labelled: a real rooftop PV array, a dark flat roof, a run of roof skylights, and a solar thermal collector panel.
Four crops at the same scale. Only the first is photovoltaic. Every automatic method here confuses at least two of the other three.

Methode 1: Neem wat al is gekarteerd

QGIS schrapte zijn eigen OSM-downloader in 3.0 en verwees gebruikers naar QuickOSM, dus installeer die eerst.

Query the generators

Vector > QuickOSM > QuickOSM…, key generator:source, value solar, uitvoeren op je extent of een benoemd gebied. Arrays op daken dragen power=generator en vaak generator:method=photovoltaic.

Query the plants separately

Grondgebonden parken zijn getagd als power=plant met plant:source=solar, een andere query. Mis die en elk park ontbreekt in je layer.

Go to the registry for kilowatts

Het Duitse Marktstammdatenregister verschijnt dagelijks als XML, maar onderdrukt coördinaten voor elke eenheid van 30 kW of minder, dus een dak belandt op een postcode. Het Franse register stopt op IRIS-zoneniveau en vouwt alles onder 36 kW samen in geaggregeerde rijen.

The QuickOSM dialog in QGIS with key generator:source and value solar, and the resulting solar generator polygons drawn over aerial imagery of a small town.
One QuickOSM query, key generator:source, value solar. Where a local mapper has been through, this is the whole job.

Drie open datasets dienen als trainingsdata of benchmark. Bradbury et al., 19.863 geannoteerde PV-polygonen over vier Californische steden op 30 cm, CC0. BDAPPV, 28.807 Franse installaties met maskers, CC BY 4.0. DeepSolar telde 1,47 miljoen systemen in de aaneengesloten Verenigde Staten, maar publiceerde tellingen per census-tract, geen polygonen.

Gebruik het wanneer: iemand jouw gebied heeft gekarteerd, of je vermogen nodig hebt in plaats van vormen.

Sla het over wanneer: de dekking vlekkerig is, wat je alleen ontdekt door te kijken.

Methode 2: Drempelen in de raster calculator

Raster > Raster Calculator…, algoritme-id native:rastercalc. Panelen zijn donker, en in het nabij-infrarood veel donkerder dan een donker dak, dus een genormaliseerde index tussen de rode en NIR-banden scheidt ze in de meeste scènes. Daarna verwijdert gdal:sieve de spikkels en maakt gdal:polygonize er polygonen van.

Op drie RGB-banden mislukt dit, omdat een donker dak en een paneel dezelfde waarden delen. Textuur is de gebruikelijke redding. grass:r.texture berekent dertien GLCM-maten, en arrays scoren hoog op contrast en laag op inverse difference moment. GRASS wordt meegeleverd met de Windows-installer en niet met de macOS-bundel.

Gebruik het wanneer: je een nabij-infraroodband hebt en één schone scène.

Sla het over wanneer: de beelden RGB zijn, of de drempels moeten standhouden over een mozaïek dat op verschillende dagen is opgenomen.

Methode 3: Gesuperviseerde classificatie met SCP

De Semi-Automatic Classification Plugin voegt een SCP-menu en een SCP Dock toe. Bouw een Band set, teken ROI's over panelen en over elke lookalike, en classificeer dan met Maximum Likelihood, Minimum Distance, Spectral Angle Mapping, Random Forest, Support Vector Machine of een Multi-layer Perceptron. Versie 8.5.0 is wat QGIS 3.x installeert, GPL v3, 2.644.482 keer gedownload.

De eigen FAQ sluit de input uit die de meeste mensen hebben. "You cannot use orthophotos with less than 4 bands", omdat de algoritmen onder de vier de klassen niet kunnen scheiden.

Gebruik het wanneer: je vier banden of meer hebt en een herhaalbare, gedocumenteerde classificatie wilt.

Sla het over wanneer: je input een RGB-orthofoto of een basemap is.

Methode 4: Een lokaal model in Deepness

Deepness draait ONNX-modellen binnen QGIS, gratis en Apache 2.0, en zijn modelzoo levert een Solar PV Segmentation-model op 20 cm/px, getraind door Kleebauer et al. en gehost door Fraunhofer. Richt het op je orthofoto en je krijgt een panelenmasker, geen account, niets verlaat je machine.

Snelheid is het addertje. Een gebruiker mat datzelfde model op "80+ minutes for a digital Orthophoto tile (20 cm resultion, 5000 points in each direction)" op een CPU, en de issue staat nog open. Voorbij dit ene is er geen goed onderhouden open PV-model voor daken.

Gebruik het wanneer: er niets de machine mag verlaten, en je ortho rond 20 cm zit.

Sla het over wanneer: je geen NVIDIA-kaart hebt en een hele wijk moet dekken.

Methode 5: Een cloudsegmentatiemodel

Een segmentatiemodel heeft geleerd hoe een array eruitziet, dus het scheidt er een van een donker dak waar Methoden 2 en 3 dat niet kunnen. Wij bouwen er een van, AI Segmentation. Dit deel gaat over onze eigen tool.

Teken een zone over welke raster de canvas ook toont, typ solar panel, en elk array komt terug als een polygoon in de project-CRS met een oppervlakte en een betrouwbaarheidsscore. Het model draait op onze servers in Europa, dus geen kaart en geen Python-omgeving nodig.

A farm building roof on aerial imagery in QGIS, with five separate solar panel groups each outlined as its own coloured polygon and the bare roof between them untouched.
One run on a farm roof. Five array groups, each its own polygon, the bare roof between them left alone.

Tussen 5 juli en 1 september 2026 draaiden 47 mensen buiten ons team solar panel 104 keer, en 15,6% van de tegels kwam leeg terug. Over 96 geëxporteerde runs vond het model 40.088 kandidaten en behielden ze er 14.245, of 35,5%, goed voor 496.931 m² aan paneel.

Typ solar panel, niet solar farm. Het tweede vraagt om de installatie, en het model antwoordt met één uniform vlak of niets. Op de weinige runs die we hebben, liet het 21 van de 24 tegels leeg.

Beste voor: arrays op daken in een hele wijk, op elke machine.

Niet voor: een moduletelling. Een dicht array komt terug als één vlak, dus splits het in QGIS of deel door de modulevoetafdruk die je kent. Een residentiële module is ruwweg 1,7 m bij 1,1 m.

Prijs: gratis voor 3 km² per maand, geen kaart. Pro is €39 per maand exclusief btw.

Draait op: onze servers, in Europa.

Installatie: de plugin manager, QGIS 3.22 of later, meld je daarna aan vanuit het paneel.

De vijf methoden naast elkaar

QuickOSMRaster calculatorSCPDeepnessAI Segmentation
Benodigde bandenGeenNIR helptVier of meerDrieDrie
Beelden blijven lokaalJaJaJaJaNee
GPUNeeNeeNeeAanbevolenNee
OutputOSM-polygonenraster-maskerKlasse-rasterPanelenmaskerPolygoon per array
KostenGratisGratisGratisGratisGratis tier, daarna €39

Wat te onthouden

Bevraag OpenStreetMap vóór al het andere, want een gekarteerde plaats is in twee minuten klaar en geen detectie verslaat een mapper die er is geweest.

Als de beelden de machine niet mogen verlaten, staan alleen Deepness en zijn lokale Solar PV-model voor je open.

Op een RGB-basemap vallen de raster calculator en SCP af, omdat geen van beide een paneel van een donker dak scheidt op waarde alleen.

Rond 30 cm lost een array op en niets lost de modules erin op, dus karteer oppervlakten en tel nooit panelen vanaf beeldmateriaal.

Kilowatts komen uit een utiliteitsregister, nooit uit een foto, en zowel het Franse als het Duitse register vervagen de locatie van kleine dakinstallaties.

Try it free in QGIS, no card needed

Vragen die mensen stellen

Kan QGIS zelf zonnepanelen detecteren?

Nee. Kern-QGIS heeft drempelen en polygoniseren, waarvoor een spectraal verschil nodig is, dus een RGB-basemap levert je niets op. Detectie komt uit een plugin, Deepness lokaal of die van ons in de cloud.

Welke beeldresolutie heb ik nodig?

Rond 30 cm lost een array op, volgens Bradbury et al. Afzonderlijke modules zijn moeilijk, zelfs bij 15,5 cm, dus reken op het karteren van arrays en oppervlakten in plaats van panelen tellen.

Hoe onderscheid ik een zonnepaneel van een donker dak?

Dat kan niet, op drie banden, op waarde alleen. Gebruik een nabij-infraroodband, een textuurmaat zoals grass:r.texture, of een model dat heeft geleerd hoe een array eruitziet.

Vindt het ook grondgebonden zonneparken?

Ja, en in OpenStreetMap zijn ze een aparte query, power=plant met plant:source=solar. Typ met een model ook voor het park solar panel, omdat het elk paneel detecteert en niet de site.

Kan ik tellen hoeveel panelen er zijn geïnstalleerd?

Niet vanaf beeldmateriaal. Detectie geeft omtrekken en oppervlakte. De moduletelling en de kilowatts komen uit een register, en in Frankrijk stopt dat op IRIS-zoneniveau.

De gids voor gebouwvoetafdrukken doorloopt de filterstap volledig, en de SAM in QGIS-post behandelt welke objecten deze modellen goed vinden. De QGIS AI-hub vergelijkt de plugins, en de productpagina is AI Segmentation.