Цей документ створювався як підручник та довідник. І хоча в ньому не розглядаються всі можливі варіанти використання, він повинен дати змістовний огляд основного функціоналу.
Починаючи з версії 0.9, в QGIS реалізовано підтримку сценаріїв на мові Python. Ми вибрали саме Python, оскільки це одна з найпоширеніших скриптових мов. Прив’язки (bindings) PyQGIS залежать від SIP та PyQt4. Основною причиною використання SIP замість більш розповсюдженого SWIG є те, що код QGIS залежить від бібліотек Qt. А прив’язки для Qt (PyQt) також генеруються за допомогою SIP, це дозволяє забезпечити прозору інтеграцію PyQGIS та PyQt.
There are several ways how to use Python bindings in QGIS desktop, they are covered in detail in the following sections:
виконання команд у консолі Python QGIS
створення та використання плаґінів на Python
створення власних програм з використанням API QGIS
Python bindings are also available for QGIS Server:
Існує повний опис QGIS API, у якому зібрано інформацію про всі класи бібліотек QGIS. QGIS Python API практично ідентичне C++ API.
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.
There are two distinct methods to run Python code every time QGIS starts.
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.
Для маленьких сценаріїв можна використовувати вбудовану в QGIS консоль Python. Відкривається вона з меню Плаґіни ‣ Консоль Python. Консоль відкривається як немодальне вікно:
Вищенаведений малюнок показує як отримати вибраний у легенді шар, дізнатися його ідентифікатор та, якщо шар векторний, кількість його об’єктів. Для взаємодії з інтерфейсом QGIS використовується змінна iface, яка є екземпляром QgsInterface. Через цей інтерфейс можна звертатися до карти, меню, панелей інструментів та інших частин QGIS.
Для зручності користувачів, під час відкриття консолі виконуються такі команди (у майбутньому цей список можна буде розширювати)
from qgis.core import *
import qgis.utils
Тим, хто використовує консоль часто, варто призначити комбінацію клавіш для її виклику (в меню Налаштування ‣ Комбінації клавіш...)
QGIS дозволяє розширювати свій функціонал через плаґіни. Спочатку це було можливим лише на мові C++. Після реалізації підтримки Python у QGIS, з’явилась можливість використання плаґінів, написаних на Python. Головна перевага таких плаґінів у порівнянні з плаґінами на C++ — простота розповсюдження (відпадає необхідність у компіляції для різних платформ) та розробки.
З моменту введення підтримки Python було розроблено багато плаґінів. Менеджер плаґінів дозволяє легко отримувати, оновлювати та видаляти Python плаґіни. більше інформації про різні джерела плаґінів розміщена на сторінці Python Plugin Repositories.
Створювати плаґіни на Python дуже просто — дивіться розділ Розробка плаґінів на Python.
Примітка
Python plugins are also available in QGIS server (QGIS as OGC Data Server), see QGIS Server Python Plugins for further details.
Під час обробки ГІС-даних часто набагато зручніше створити декілька сценаріїв для автоматизації процесу ніж постійно виконувати ті самі дії знову і знову. PyQGIS допомагає зробити це — просто імпортуйте модуль qgis.core, ініціалізуйте його і у вас все готове до обробки даних.
Або ж вам може знадобитися інтерактивна програма з певним функціоналом ГІС — вимірювання довжин та площ, експорт карти в PDF або щось інше. Модуль qgis.gui містить різноманітні елементи інтерфейсу, найголовніший з них — віджет карти, який легко інтегрується у програму та підтримує переміщення, масштабування і будь-які інші інструменти карти.
PyQGIS custom applications or standalone scripts must be configured to locate the QGIS resources such as projection information, providers for reading vector and raster layers, etc. QGIS Resources are initialized by adding a few lines to the beginning of your application or script. The code to initialize QGIS for custom applications and standalone scripts is similar, but examples of each are provided below.
Примітка: не використовуйте ім’я qgis.py, для своїх сценаріїв — Python не зможе імпортувати прив’язки, оскільки ім’я сценарію буде «затінювати» їх.
To start a standalone script, initialize the QGIS resources at the beginning of the script similar to the following code:
from qgis.core import *
# supply path to qgis install location
QgsApplication.setPrefixPath("/path/to/qgis/installation", True)
# create a reference to the QgsApplication, setting the
# second argument to False disables the GUI
qgs = QgsApplication([], False)
# load providers
qgs.initQgis()
# Write your code here to load some layers, use processing algorithms, etc.
# When your script is complete, call exitQgis() to remove the provider and
# layer registries from memory
qgs.exitQgis()
We begin by importing the qgis.core module and then configuring the prefix path. The prefix path is the location where QGIS is installed on your system. It is configured in the script by calling the setPrefixPath method. The second argument of setPrefixPath is set to True, which controls whether the default paths are used.
The QGIS install path varies by platform; the easiest way to find it for your your system is to use the Консоль Python from within QGIS and look at the output from running QgsApplication.prefixPath().
After the prefix path is configured, we save a reference to QgsApplication in the variable qgs. The second argument is set to False, which indicates that we do not plan to use the GUI since we are writing a standalone script. With the QgsApplication configured, we load the QGIS data providers and layer registry by calling the qgs.initQgis() method. With QGIS initialized, we are ready to write the rest of the script. Finally, we wrap up by calling qgs.exitQgis() to remove the data providers and layer registry from memory.
The only difference between Using PyQGIS in standalone scripts and a custom PyQGIS application is the second argument when instantiating the QgsApplication. Pass True instead of False to indicate that we plan to use a GUI.
from qgis.core import *
# supply path to qgis install location
QgsApplication.setPrefixPath("/path/to/qgis/installation", True)
# create a reference to the QgsApplication
# setting the second argument to True enables the GUI, which we need to do
# since this is a custom application
qgs = QgsApplication([], True)
# load providers
qgs.initQgis()
# Write your code here to load some layers, use processing algorithms, etc.
# When your script is complete, call exitQgis() to remove the provider and
# layer registries from memory
qgs.exitQgis()
Тепер можна працювати з API QGIS — завантажувати шари, виконувати обробку даних або створити графічний інтерфейс з картою. Можливості нескінченні :-)
Необхідно вказати системі де саме шукати бібліотеки QGIS та відповідні модулі Python — інакше під час запуску з’явиться повідомлення про помилку:
>>> import qgis.core
ImportError: No module named qgis.core
Для цього необхідно встановити змінну оточення PYTHONPATH. У наступних командах заміняйте qgispath на реальне розміщення QGIS у вашій системі:
в Linux: export PYTHONPATH=/qgispath/share/qgis/python
у Windows: set PYTHONPATH=c:\qgispath\python
Тепер розміщення модулів PyQGIS відоме, але вони в свою чергу залежать від бібліотек qgis_core та qgis_gui (модулі Python лише «обгортки» над ними). У більшості випадків операційна система не знає де знаходяться ці бібліотеки, тому ви знову отримаєте помилку імпорту (повідомлення може відрізнятися в залежності від операційної системи):
>>> import qgis.core
ImportError: libqgis_core.so.1.5.0: cannot open shared object file: No such file or directory
Для вирішення цієї проблеми додайте каталоги з бібліотеками QGIS до шляхів пошуку динамічного компонувальника:
в Linux: export LD_LIBRARY_PATH=/qgispath/lib
у Windows: set PATH=C:\qgispath;%PATH%
Ці команди можна розмістити у стартовому командному файлі, який і буде налаштовувати систему. Для розгортання автономних програм, що використовують PyQGIS, можна використовувати два способи:
вимагати від користувача встановлення QGIS перед встановленням вашої програми. Інсталятор програми повинен перевіряти наявність бібліотек QGIS у стандартних каталогах та дозволяти користувачу вказувати їх розміщення, якщо знайти їх автоматично не вдалося. Перевагою цього методу є простота, однак він потребує додаткових дій з боку користувача.
включати QGIS в інсталятор своєї програми. Підготовка до виписку стане більш складною, а сам інсталятор більш об’ємним. Але користувачі будуть позбавлені необхідності завантажувати та встановлювати додаткові програми самостійно.
Ці два підходи можна комбінувати — розгортати програму разом з QGIS у Windows та Mac OS X, а в Linux залишити встановлення QGIS на розсуд користувача.