Dit document is bedoeld om te gebruiken als handleiding en als gids met verwijzingen. Hoewel het niet alle mogelijke gevallen van gebruik weergeeft zou het een goed overzicht moeten geven van de belangrijkste functionaliteiten.
Beginnend met de uitgave 0.9, heeft QGIS optionele ondersteuning voor scripten met behulp van de taal Python. We hebben gekozen voor Python omdat het één van de meest favoriete talen voor scripten is. Bindingen voor PyQGIS zijn afhankelijk van SIP en PyQt4. De reden voor het gebruiken van SIP in plaats van het meer wijd gebruikte SWIG is dat de gehele code voor QGIS afhankelijk is van bibliotheken van Qt. Bindingen voor Python voor Qt (PyQt) worden ook gedaan met behulp van SIP en dat maakt een naadloze integratie van PyQGIS met PyQt mogelijk.
There are several ways how to use QGIS python bindings, they are covered in detail in the following sections:
Python-code automatisch uitvoeren wanneer QGIS start
opdrachten opgeven in de console voor Python in QGIS
plug-ins in Python maken en gebruiken
aangepaste toepassingen maken, gebaseerd op de API van QGIS
Er is een verwijzing complete API voor QGIS dat de klassen uit de bibliotheken van QGIS documenteert. Pythonische API voor QGIS is nagenoeg identiek aan de API in C++.
There are some resources about programming with PyQGIS on QGIS blog. See QGIS tutorial ported to Python for some examples of simple 3rd party apps. A good resource when dealing with plugins is to download some plugins from plugin repository and examine their code. Also, the python/plugins/ folder in your QGIS installation contains some plugin that you can use to learn how to develop such plugin and how to perform some of the most common tasks
Er zijn twee afzonderlijke methoden om Python-code uit te voeren elke keer als QGIS start.
U kunt Python-code uitvoeren kort voor de initialisatie van QGIS wordt voltooid door de omgevingsvariabele PYQGIS_STARTUP in te stellen op het pad van een bestaand bestand van Python.
Deze methode is iets wat u vermoedelijk zelden nodig heeft, maar is het waard vermeld te worden omdat het één van de manieren is om Python-code uit te voeren binnen QGIS en omdat deze code zal worden uitgevoerd vóórdat de initialisatie van QGIS is voltooid. Deze methode is zeer handig voor het opschonen van sys.path, wat ongewenste paden zou kunnen bevatten, of voor het isoleren/laden van de initiële omgeving zonder een virtuele omgeving te vereisen, bijv. homebrew of installaties van MacPorts op Mac.
Elke keer als QGIS start, wordt in de eigen map van de gebruiker voor Python (gewoonlijk: .qgis2/python) naar een bestand genaamd startup.py gezocht. Als dat bestand bestaat wordt het uitgevoerd door de ingebedde interpreter voor Python.
Voor scripten is het mogelijk om voordeel te halen uit de geïntegreerde console voor Python. Deze kan geopend worden via het menu: Plug-ins ‣ Python Console. De console opent als een non-modaal gebruiksvenster.
De schermafdruk hierboven illustreert hoe de huidige geselecteerde laag in de Lagenlijst te verkrijgen, de ID ervan weer te geven en optioneel, als het een vectorlaag is, het anatal objecten weer te geven. Voor interactie et de omgeving van QGIS is er de variabele iface, wat een instance is van QgsInterface. Deze interface maakt toegang mogelijk tot het kaartvenster, menu’s, werkbalken en andere delen van de toepassing QGIS.
Voor het gemak van de gebruiker zullen de volgende argumenten worden uitgevoerd wanneer de console wordt opgestart (in de toekomst zal het mogelijk zijn meer initiële opdrachten in te stellen)
from qgis.core import *
import qgis.utils
Voor hen die de console vaak gebruiken, kan het handig zijn een sneltoets in te stellen voor het activeren van de console (in menu Extra ‣ Snelkoppelingen configureren...)
QGIS maakt het mogelijk zijn functionaliteit te verbeteren met behulp van plug-ins. Dit was oorspronkelijk alleen mogelijk met de taal C++. Met de toevoeging van ondersteuning voor Python aan QGIS, is het ook mogelijk plug-ins te gebruiken die zijn geschreven in Python. Het belangrijkste voordeel boven plug-ins van C++ is de eenvoudige manier van verdelen (niet meer nodig om te compileren voor elk platform) en eenvoudiger ontwikkelen.
Veel plug-ins, die verschillende functionaliteiten behandelen, zijn geschreven sinds de introductie van ondersteuning voor Python. Het installatieprogramma voor plug-ins stelt gebruikers in staat om eenvoudig plug-ins voor Python op te halen, bij te werken en te verwijderen. Bekijk de pagina Python Plugin Repositories voor verscheidene bronnen voor plug-ins.
Plug-ins maken in Python is simpel, zie Python plug-ins ontwikkelen voor gedetailleerde instructies.
Bij het verwerken van gegevens van GIS is het vaak handig om enkele scripts te maken voor het automatiseren van het proces in plaats van dezelfde taak steeds opnieuw te herhalen. Met PyQGIS is dit perfect mogelijk — importeer de module qgis.core, initialiseer die en u bent klaar om te verwerken.
Of u wilt misschien een interactieve toepassing maken die enige functionaliteit van GIS gebruikt — meten van enkele gegevens, exporteren van een kaart naar PDF of enige andere functionaliteit. De module qgis.gui geeft aanvullend verscheidene componenten voor een GUI, waarvan de meest belangrijke de widget voor het kaartvenster is die zeer eenvoudig kan worden opgenomen in de toepassing met ondersteuning voor zoomen, pannen en/of elke andere aangepaste gereedschappen voor de kaart.
Opmerking: gebruik niet qgis.py als een naam voor uw testscript — Python zal niet in staat zijn de bindingen te importeren omdat de naam van het script die zal overschaduwen.
First of all you have to import qgis module, set QGIS path where to search for resources — database of projections, providers etc. When you set prefix path with second argument set as True, QGIS will initialize all paths with standard dir under the prefix directory. Calling initQgis() function is important to let QGIS search for the available providers.
from qgis.core import *
# supply path to where is your qgis installed
QgsApplication.setPrefixPath("/path/to/qgis/installation", True)
# load providers
QgsApplication.initQgis()
Nu kunt u werken met de API van QGIS — lagen laden en enige verwerking doen of een GUI met een kaartvenster opstarten. De mogelijkheden zijn eindeloos :-)
When you are done with using QGIS library, call exitQgis() to make sure that everything is cleaned up (e.g. clear map layer registry and delete layers):
QgsApplication.exitQgis()
U zult uw systeem moeten vertellen waar te zoeken naar de bibliotheken van QGIS en de toepasselijke modules voor Python als zij nog niet op ene bekende locatie staan — anders zal Python gana klagen:
>>> import qgis.core
ImportError: No module named qgis.core
Dit kan worden opgelost door de omgevingsvariabele PYTHONPATH in te stellen. In de volgende opdrachten zou qgispath moeten wordne vervangen door uw actuele pad voor de installatie van QGIS:
op Linux: export PYTHONPATH=/qgispath/share/qgis/python
op Windows: set PYTHONPATH=c:\qgispath\python
Het pad naar de modules van PyQGIS is nu bekend, zij zijn echter afhankelijk van de bibliotheken qgis_core en qgis_gui (de modules van Python dienen slechts als verpakkingen). Het pad naar deze bibliotheken is meestal onbekend voor het besturingssysteem, dus krijgt u opnieuw een fout bij het importeren (het bericht kan variëren, afhankelijk van het systeem):
>>> import qgis.core
ImportError: libqgis_core.so.1.5.0: cannot open shared object file: No such file or directory
Los dit op door de mappen waar de bibliotheken van QGIS zijn opgeslagen toe te voegen aan het zoekpad van de dynamische linker:
op Linux: export LD_LIBRARY_PATH=/qgispath/lib
op Windows: set PATH=C:\qgispath;%PATH%
Deze opdrachten kunnen worden geplaatst in een bootstrap-script dat het opstarten voor zijn rekening zal nemen. Bij het uitrollen van toepaste toepassingen met behulp van PyQGIS, zijn er gewoonlijk twee mogelijkheden:
eis dat de gebruiker QGIS op zijn platform installeert, voorafgaand aan het installeren van uw toepassing. Het installatieprogramma van de zou moeten zoeken naar standaardlocaties voor de bibliotheken van QGIS en de gebruiker moeten toestaan het pad in te vullen als dat niet werd gevonden. Deze benadering heeft het voordeel dat het eenvoudiger is, het vereist echter dat de gebruiker meer stappen uitvoert.
verpak QGIS tezamen met uw toepassing. Uitgeven van de toepassing ka uitdagender zijn en het pakket zal groter zijn, maar de gebruiker zal verlost zijn van de last van het downloaden en installeren van aanvullende stukken software.
De twee modellen van uitrollen kunnen worden gemixt - rol een zelfstandige toepassing uit op Windows en Mac OS X, laat voor Linux de installatie van QGIS over aan de gebruiker en diens pakketbeheer.