Este documento é um tutorial e um guia de referência. Ela não lista todos os possíveis casos de uso, mas dá uma boa visão geral dos principais recursos.
Desde a versão 0.9, o QGIS tem suporte opcional à scripts usando a linguagem Python. Nós decidimos pelo Python por ser ela uma das linguagens favoritas para scripts. As ligações PyQGIS dependem da SIP e da PyQt4. A razão para usar SIP ao invés da mais usada SWIG é que todo o código QGIS depende das bibliotecas Qt. As ligações Python para o Qt (PyQt) são feitas usando SIP também e isso permite uma integração perfeita do PyQGIS com PyQt.
Obtendo PyQGIS para o trabalho (compilação Manual, Resolução de Problemas)
Existem várias maneiras de como usar vínculos python QGIS, eles são abordados em detalhes nas seções a seguir:
executar automaticamente código em Phyton quando o QGIS é iniciado
emitir comandos no console do Python no QGIS
criar e utilizar plugins em Python
criar aplicativos personalizados com base na API do QGIS
Existe uma referência completa à API QGIS que documenta as classes das bibliotecas QGIS. A API Python é quase identica à API em 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
Existem dois métodos distintos de executar o código em Phyton toda vez que o QGIS é iniciado.
You can run Python code just before QGIS initialization completes by setting the PYQGIS_STARTUP environment variable to the path of an existing Python file.
This method is something you will probably rarely need, but worth mentioning here because it is one of the several ways to run Python code within QGIS and because this code will run before QGIS initialization is complete. This method is very useful for cleaning sys.path, which may have undesireable paths, or for isolating/loading the initial environ without requiring a virt env, e.g. homebrew or MacPorts installs on Mac.
Every time QGIS starts, the user’s Python home directory (usually: .qgis2/python) is searched for a file named startup.py, if that file exists, it is executed by the embedded Python interpreter.
Para usar scripts é possível tirar proveito do terminal Python integrado. Ele pode ser aberto a partir do menu: Complementos ‣ Terminal Python. O terminal abre como uma janela não modal:
The screenshot above illustrates how to get the layer currently selected in the layer list, show its ID and optionally, if it is a vector layer, show the feature count. For interaction with QGIS environment, there is a iface variable, which is an instance of QgsInterface. This interface allows access to the map canvas, menus, toolbars and other parts of the QGIS application.
For convenience of the user, the following statements are executed when the console is started (in future it will be possible to set further initial commands)
from qgis.core import *
import qgis.utils
For those which use the console often, it may be useful to set a shortcut for triggering the console (within menu Settings ‣ Configure shortcuts...)
QGIS allows enhancement of its functionality using plugins. This was originally possible only with C++ language. With the addition of Python support to QGIS, it is also possible to use plugins written in Python. The main advantage over C++ plugins is its simplicity of distribution (no compiling for each platform needed) and easier development.
Many plugins covering various functionality have been written since the introduction of Python support. The plugin installer allows users to easily fetch, upgrade and remove Python plugins. See the Python Plugin Repositories page for various sources of plugins.
Creating plugins in Python is simple, see Desenvolvimento de Complementos Python for detailed instructions.
Often when processing some GIS data, it is handy to create some scripts for automating the process instead of doing the same task again and again. With PyQGIS, this is perfectly possible — import the qgis.core module, initialize it and you are ready for the processing.
Or you may want to create an interactive application that uses some GIS functionality — measure some data, export a map in PDF or any other functionality. The qgis.gui module additionally brings various GUI components, most notably the map canvas widget that can be very easily incorporated into the application with support for zooming, panning and/or any further custom map tools.
Note: do not use qgis.py as a name for your test script — Python will not be able to import the bindings as the script’s name will shadow them.
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()
Now you can work with QGIS API — load layers and do some processing or fire up a GUI with a map canvas. The possibilities are endless :-)
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()
You will need to tell your system where to search for QGIS libraries and appropriate Python modules if they are not in a well-known location — otherwise Python will complain:
>>> import qgis.core
ImportError: No module named qgis.core
This can be fixed by setting the PYTHONPATH environment variable. In the following commands, qgispath should be replaced with your actual QGIS installation path:
no Linux: export PYTHONPATH=/qgispath/share/qgis/python
no Windows: set PYTHONPATH=c:\qgispath\python
The path to the PyQGIS modules is now known, however they depend on qgis_core and qgis_gui libraries (the Python modules serve only as wrappers). Path to these libraries is typically unknown for the operating system, so you get an import error again (the message might vary depending on the system):
>>> import qgis.core
ImportError: libqgis_core.so.1.5.0: cannot open shared object file: No such file or directory
Fix this by adding the directories where the QGIS libraries reside to search path of the dynamic linker:
no Linux: export LD_LIBRARY_PATH=/qgispath/lib
no Windows: set PATH=C:\qgispath;%PATH%
These commands can be put into a bootstrap script that will take care of the startup. When deploying custom applications using PyQGIS, there are usually two possibilities:
The two deployment models can be mixed - deploy standalone application on Windows and Mac OS X, for Linux leave the installation of QGIS up to user and his package manager.