Ga naar inhoud
QGIS
Tutorial

Wat is PyQGIS? QGIS automatiseren met of zonder code

Gepubliceerd op

PyQGIS is de manier om QGIS met Python-code aan te sturen. Alles wat je in QGIS kunt aanklikken, kun je ook als een paar regels Python schrijven: een laag laden, een tool uitvoeren, een stijl aanpassen, een kaart exporteren. Zo herhaal je dezelfde klus op honderd bestanden zonder honderd keer te klikken. Het zit in elke QGIS-installatie, dus je hoeft niets toe te voegen.

QGIS met de Python-console open onder een kaart van het centrum van Denpasar op Bali. De editor rechts bevat een script met de naam school_zones.py dat de scholen opnieuw projecteert, zones van 100 meter eromheen tekent en de gebouwen daarbinnen selecteert. De uitvoer links meldt 864 of 7015 buildings are within 100 m of a school, daarna yes 818, school 19, commercial 15, college 5. De kaart toont de schoolzones als blauwe cirkels en de geselecteerde gebouwen in oranje.
De Python-console in QGIS. Dit script vindt de gebouwen binnen 100 m van een school: 864 van de 7.015 in het centrum van Denpasar.

De PyQGIS Developer Cookbook schrijft dat de Python-tools "nearly identical" zijn aan de tools waarmee QGIS zelf is gebouwd, dus bijna alles is mogelijk. De meeste QGIS-plugins, de onze ook, zijn ermee geschreven.

Je hoeft de code niet meer zelf te schrijven. Een chatbot kan hem opstellen, en een agent kan de code helemaal overslaan: wij bouwen er een, AI Agent, en verderop test ik beide op dezelfde zes taken.

Waar je PyQGIS kunt draaien

Er zijn vier plekken, en elke plek past bij een ander soort klus.

WaarHoe open je hetWaarvoor
Python-consolePlug-ins > Python-console (Ctrl+Alt+P)Snelle ingrepen in het project dat je open hebt
Processing-scriptToolbox Processing > Scripts > Nieuw script maken vanuit sjabloonEen herbruikbare tool met eigen invoer, zoals elke andere tool in de toolbox
PluginEen map in je QGIS-profielEen tool met eigen knoppen, om te delen met anderen
Zelfstandig scriptGewone Python, of de opdracht qgis_processKlussen die zonder QGIS-venster draaien, bijvoorbeeld op een server

De console geeft je iface, het object dat het QGIS-venster aanstuurt. Buiten QGIS bestaat het niet, en daarom is NameError: name 'iface' is not defined een van de meest gestelde PyQGIS-vragen op GIS Stack Exchange.

Een Processing-script begint met een sjabloon dat QGIS voor je invult. Jij past de invoer aan en de paar regels die het werk doen, en het script verschijnt in de toolbox als een ingebouwde tool.

De scripteditor van Processing in QGIS met het begin van het sjabloon: een klasse met de naam ExampleProcessingAlgorithm, commentaar dat uitlegt dat het een vectorlaag neemt en een identieke laag maakt, de constanten INPUT en OUTPUT en een methode name die myscript teruggeeft.
Nieuw script maken vanuit sjabloon opent een werkend voorbeeld om te bewerken.

Je eerste PyQGIS-script

Open de Python-console, klik op Editor tonen, selecteer een gebouwenlaag in het paneel Lagen en plak dit. Het telt de gebouwen per type:

from collections import Counter

layer = iface.activeLayer()  # the layer selected in the Layers panel
counts = Counter(f["building"] for f in layer.getFeatures())

for kind, n in counts.most_common(5):
    print(kind, n)
print("Total:", layer.featureCount(), "features in", layer.crs().authid())

Drie objecten doen het meeste werk: QgsProject.instance() is je project, QgsVectorLayer en QgsRasterLayer zijn de lagen ervan en iface is het venster. De API-referentie somt alle klassen op.

Elke QGIS-tool vanuit Python uitvoeren

Elke tool in de Toolbox Processing draait met één regel Python, processing.run(), met dezelfde instellingen als in het venster van de tool:

import processing

result = processing.run("native:buffer", {
    "INPUT": "buildings.gpkg",
    "DISTANCE": 50,
    "OUTPUT": "buffered.gpkg",
})

Je hoeft de namen van de instellingen niet te raden. Vul het venster van de tool één keer in en open dan onderaan Geavanceerd > Kopiëren als Python-opdracht. QGIS geeft je de exacte regel om in je script te plakken.

Het venster van de QGIS-tool Punten in polygonen tellen, met kelurahan als polygonen en scholen als punten. Het menu Geavanceerd onderaan is open, met Kopiëren als Python-opdracht gemarkeerd, boven Kopiëren als qgis_process-opdracht, Kopiëren als JSON en Instellingen plakken.
Kopiëren als Python-opdracht maakt van elke tool die je met de hand instelt een regel code.

Dezelfde tools draaien ook zonder QGIS te openen, vanuit een terminal, met qgis_process run native:buffer. Dat is de route voor een geplande taak op een server.

Wat QGIS 4 voor PyQGIS veranderde

QGIS 4.0, uitgebracht op 6 maart 2026, stapte over op een nieuwere versie van Qt, de toolkit achter de vensters en knoppen. De QGIS-functies bleven bijna gelijk. Wat breekt is code die Qt rechtstreeks aanroept, en drie wijzigingen veroorzaken het meeste:

QGIS 3QGIS 4
Korte namen zoals Qt.AlignLeftVolledige namen, zoals Qt.AlignmentFlag.AlignLeft
QRegExpQRegularExpression
exec_() bij dialoogvenstersexec()

QGIS levert een script mee, pyqt5_to_pyqt6.py, dat het meeste hiervan voor je herschrijft, en de pyqgis4-checker vindt de rest. Scripts die alleen QGIS-tools en processing.run() gebruiken werken meestal ongewijzigd.

Kunnen ChatGPT of Claude PyQGIS voor je schrijven?

Meestal wel, als je ze over je project vertelt. Ik testte Claude Sonnet, een chatbot zoals ChatGPT, en zijn scripts liepen bij alle zes de taken zonder fout. Toen ik de lagen, velden en bestandspaden beschreef, waren alle zes de resultaten juist. Toen ik alleen de laagnamen gaf, was één van de zes stilletjes fout: het script liep, meldde niets verontrustends en vulde 396 van de 936 pixels van een hoogtekaart met een verzonnen hoogte van 0 m.

Zonder fout uitgevoerdJuist resultaat
Chatbot, project beschreven in de prompt6 van 66 van 6
Chatbot, alleen laagnamen6 van 65 van 6
AI-agent in QGIS, alleen de zin met de taak6 van 66 van 6

De les is simpel. Een chatbot ziet je project niet, dus de kwaliteit van zijn code hangt af van hoe goed je het beschrijft, en een fout resultaat kan er precies zo uitzien als een goed resultaat. Er zat ook een QGIS 4-addertje onder het gras: beide scripts van de chatbot voor de afdruklay-out gebruikten de korte Qt-namen uit de tabel hierboven en zouden in QGIS 4 halverwege stoppen.

Hoe we dit meten. Op 26 september 2026, in QGIS 3.44.7, met kaartgegevens van het centrum van Denpasar op Bali: zes alledaagse taken, van gebouwen tellen tot een afdruklay-out exporteren, telkens één poging. Een resultaat telde alleen als juist wanneer een apart controlescript, geschreven vóór de runs, slaagde. Zes taken is een kleine steekproef.

Of sla de code over: een agent die de stappen uitvoert

Wij bouwen AI Agent, dus dit deel gaat over onze eigen plugin. Het is een chatpaneel in QGIS: je typt de taak, en het leest je project, voert de tools uit en controleert het resultaat. Je hoeft geen code te plakken en geen project te beschrijven.

Ik gaf het dezelfde zes taakzinnen, zonder beschrijving van het project. Alle zes waren juist, met 6,4 tot 42,8 seconden per taak en 148,8 seconden voor alle zes samen. Twee keer stopte het om te vragen voordat het een bestand schreef, en ik klikte op Toestaan. Bij de hoogtetaak waar de chatbot over struikelde, las het eerst de laag en stelde het de lege pixels juist in.

QGIS met het AI Agent-paneel rechts. Het verzoek vraagt de gebouwenlaag op te maken op het veld building: commercial rood, school blauw, hotel groen, house paars en elke andere waarde lichtgrijs. De agent meldt dat hij de gebouwen heeft opgemaakt en elke categorie heeft gecontroleerd. De kaart van Denpasar toont rode commerciële gebouwen, een groen hotel en een paars huis tussen grijze gebouwen, en het paneel Lagen toont de vijf categorieën.
Eén zin, en de gebouwen zijn per type opgemaakt. Geen code om te lezen of te plakken.

De gratis route blijft een goede: de console, Kopiëren als Python-opdracht en een chatbot brengen je ver, zolang je het resultaat controleert. Als je liever de taak beschrijft en de laag terugkrijgt, doet de agent de stappen voor je.

Probeer AI Agent gratis in QGIS, zonder creditcard

Waar mensen vastlopen

We telden de vragen onder QGIS-tutorials op YouTube: in 1.692 tutorials met reacties vragen 391 reacties onder 245 tutorials om hulp met Python of automatisering. Dezelfde drie problemen komen steeds terug:

  • Laag niet gevonden. mapLayersByName("roads") vindt niets als de naam één letter of een spatie verschilt.
  • Afstanden in graden. Een buffer van 50 m op een laag in EPSG:4326 is een buffer van 50 graden, omdat dat systeem in graden rekent. Projecteer eerst opnieuw, zoals uitgelegd in wat een CRS is.
  • iface buiten QGIS. Scripts die buiten het venster draaien hebben geen iface. Gebruik in plaats daarvan QgsProject en processing.run().

Wat je moet onthouden

PyQGIS is de Python-interface van QGIS. Het draait in de Python-console, in Processing-scripts, in plugins en buiten QGIS met qgis_process.

processing.run() voert elke QGIS-tool uit vanuit code, en Kopiëren als Python-opdracht geeft je de exacte regel uit het venster van een tool.

QGIS 4 hernoemde enkele Qt-namen, zoals Qt.AlignLeft. Code die eigen vensters bouwt heeft misschien kleine aanpassingen nodig.

In onze test met zes taken liep chatbotcode altijd, maar was ze één keer fout als het project niet was beschreven. Een agent in QGIS, zoals AI Agent, had alle zes juist op basis van alleen de taakzin.

Veelgestelde vragen

Waarvoor gebruik je PyQGIS?

Om QGIS met Python te automatiseren: lagen laden en bewerken, tools op veel bestanden uitvoeren, kaarten opmaken, afdruklay-outs bouwen en plugins of scripts schrijven die anderen kunnen hergebruiken. Het draait ook buiten het QGIS-venster, voor klussen op een server.

Is PyQGIS hetzelfde als Python?

PyQGIS is een set QGIS-tools die je vanuit Python gebruikt. Je schrijft gewone Python, en PyQGIS voegt dingen toe zoals QgsVectorLayer en processing.run(). Het zit in QGIS en gebruikt de Python die QGIS installeert.

Hoe open ik de Python-console in QGIS?

Via Plug-ins > Python-console, of met Ctrl+Alt+P. Klik op Editor tonen om langere scripts te schrijven, ze als .py-bestand op te slaan en uit te voeren met de groene pijl.

Werken mijn PyQGIS-scripts nog in QGIS 4?

Scripts die alleen QGIS-tools en processing.run() gebruiken meestal wel. Scripts die eigen vensters bouwen hebben vaak kleine aanpassingen nodig, zoals Qt.AlignmentFlag.AlignLeft in plaats van Qt.AlignLeft. Het officiële script pyqt5_to_pyqt6.py herstelt het meeste.

Kan ik QGIS automatiseren zonder Python?

Ja. De Graphical Modeler koppelt tools visueel aan elkaar en batchverwerking voert één tool uit op veel bestanden. Een AI Agent-plugin gaat verder: je typt de taak in gewone woorden en de agent voert de tools uit in je project. De onze, AI Agent, heeft een gratis abonnement.

Wil je verder, dan legt wat een AI-agent in QGIS is uit hoe agents werken en welke je kiest, en kun je AI Agent gratis proberen. Wat een CRS is behandelt het opnieuw projecteren dat de meeste scripts eerst nodig hebben, en wat QGIS MCP is laat de route zien voor gebruikers van Claude Code en Cursor.