はじめに

このドキュメントはチュートリアルとリファレンスガイドの両方の役割を意図して書かれています。すべてのユースケースを満たしてはいませんが、主要な機能の良い概要となるでしょう。

0.9リリースからQGISはPythonを使ったスクリプト処理をサポートしました。Pythonはスクリプト処理でもっとも好まれている言語の一つだと思います。PyQGISバインディングはSIPとPyQt4に依存しています。これはSIPはSWIGの代わりに広く使われていて、QGISのコードはQtライブラリに依存しています。QtのPythonバインディング(PyQt)もSIPを使っていて、これによりPyQtによるPyQGISの実装がシームレスに実現しています。

QGISのデスクトップにPythonバインディングを使用する方法、それらは次のセクションで詳しく説明されているいくつかの方法があります。

  • QGISの起動時に自動的にPythonコードを実行

  • QGIS の中の Python コンソールのコマンドについて

  • Pythonでプラグインを作り、使う方法

  • QGIS APIベースのカスタムアプリケーションの作成

Pythonバインディングは、QGIS Server用にも使用できます。

  • 2.8のリリースから開始し、PythonのプラグインはQGIS Server上でも利用できます(参照: `サーバーのPythonプラグイン<server_plugins> ` _)

  • 2.11バージョン(2015年8月11日でマスター)から開始し、QGIS Serverライブラリは、PythonアプリケーションにQGISサーバーを埋め込むために使用することができますPythonバインディングを持っています。

QGIS ライブラリのクラスのドキュメントは`完全な QGIS API <http://doc.qgis.org/>`_ のリファレンスにあります。PythonのQGIS APIは C++ のAPIとほぼ同じです。

プラグインを扱う優れたリソースは`プラグインリポジトリ<http://plugins.qgis.org/> ` _からいくつかのプラグインをダウンロードしてそのコードを調べることです。また、QGISのインストール中の``python /プラグイン/ ``フォルダ中にも、そのようなプラグインをどのように開発するか、最も一般的なタスクのいくつかをどのように実行するかを習得するのに使用できるプラグインが含まれています。

QGISの起動時にPythonコードを実行します

QGISを起動するたびにPythonコードを実行するには、2つの異なる方法があります。

PYQGIS_STARTUP環境変数

QGISの初期化は、既存のPythonのファイルのパスに `` PYQGIS_STARTUP``環境変数を設定することで完了直前にPythonコードを実行できます。

それはQGIS内およびQGISの初期化が完了する前にこのコードを実行するためのPythonコードを実行するには、いくつかの方法の一つであるため、この方法では、おそらくめったに必要としません何かが、ここで言及する価値があります。この方法は、望ましくない経路を有していてもよいのsys.pathを洗浄するための、またはのvirtのENVを必要とすることなく、初期環境をロードする/単離のために非常に有用であり、例えば自作またはMacPortsのは、Macにインストールされます。

:ファイル: `startup.py`ファイル

QGISを起動するたびに、ユーザーのPythonのホームディレクトリ(通常: :file: .qgis2 / python)の中で :file:` startup.py`という名前のファイルが検索され、そのファイルが存在する場合、埋め込まれたPythonインタプリタによって実行されます。

Python コンソール

スクリプト処理をする上で、(QGISに)統合されているPython コンソールから多くの利点を得られるでしょう。これはメニューの プラグイン ‣ Pythonコンソール から開くことができます。コンソールはモーダルではないユーティリティウィンドウに開きます:

../../_images/console.png

QGIS Python コンソール

上記のスクリーンショットはレイヤーのリストから現在選択中のレイヤーを取得して、IDや他の情報を表示してるところを見せていて、もしベクターレイヤーであれば、フューチャーの数を表示することができます。QGIS環境とやりとりするには QgisInterface のインスタンスである qgis.utils.iface 変数を使います。このインターフェイスはマップキャンバス、メニュー、ツールバーやその他のQGISアプリケーションのパーツにアクセスすることができます。

利便性を上げるためには、コンソールがスタートしたときに次の命令を入力してください(将来的には初期実行されるコマンドになるかもしれません):

from qgis.core import *
import qgis.utils

このコンソールをたびたび使うなら、ショートカットを設定しておくとよいでしょう(メニューの 設定 ‣ ショートカットの構成... から行えます)

Python プラグイン

QGIS はプラグインによる機能拡張が可能です。元々はC++でのみ可能でした。QGISにPythonサポートを追加したことで、Pythonでもプラグインを書く事ができるようになりました。C++プラグインよりもよりよい利点は簡単な配布(プラットフォームごとのコンパイルする必要がありません)ができ、また簡単に開発ができます。

様々な機能をカバーする多くのプラグインはPythonサポートが導入されてから書かれました。プラグインのインストーラはPythonプラグインの取得、アップグレード、削除を簡単に行えます。様々なプラグインのソースが Python Plugin Repositories から見つけることができます。

Pythonでプラグインを作るのはとても簡単です。詳細は QGISプラグイン を見てください。

ノート

PythonのプラグインはQGISサーバ(OGCデータサーバとしてのQGIS)でも利用可能です、詳細については:ref:`server_plugins`を参照。

Python アプリケーション

GISデータを処理するときは、繰り返し同じタスクを実行するのに簡単なスクリプトを書いて自動化することがたびたびあります。PyQGISなら完璧に行えます — qgis.core モジュールを import すれば、初期化が行われて処理を行う準備が完了します。

もしくはいくつかのGISの機能 — いくつかのデータの距離を測ったり、地図をPDFに変換したり、または他の機能など – を使ったインタラクティブなアプリケーションを作りたいのかもしれません。 qgis.gui モジュールは様々なGUIコンポーネントを追加することができ、とりわけマップキャンバスのwidgetはズームやパンや他のマップを制御するツールと一緒にアプリケーションに簡単に組み込むことができます。

PyQGISのカスタムアプリケーションまたはスタンドアロンスクリプトは、このような投影情報としてQGISのリソースを検索するように設定する必要があり、ベクトルとラスターレイヤーを読み取るためのプロバイダなどQGISリソースは、アプリケーションやスクリプトの先頭に数行を追加することによって初期化されます。カスタムアプリケーションとスタンドアロンスクリプトのQGISを初期化するコードが類似しているが、それぞれの例を以下に提供されます。

注意: qgis.py という名前をあなたのテストスクリプトで*使わないでください* — このスクリプトの名前がバインディングを隠蔽してしまってpythonでimportできなくなるでしょう。

スタンドアロンスクリプトでPyQGISを使用します

スタンドアロンスクリプトを起動するには、次のコードのようなスクリプトの先頭でQGISのリソースを初期化します。

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()

MOD:: qgis.core`モジュールと、その後プレフィックスパスを設定する私たちは、インポートすることから始めます。プレフィックスパスは、QGISがシステムにインストールされている場所です。これは、 ` setPrefixPath``メソッドを呼び出すことで、スクリプトで設定されています。CONST: `true`を、デフォルトのパスが使用されているかどうかを制御setPrefixPath```の第2引数は、に設定されています。

QGISのインストールパスは、プラットフォームによって異なります。と `` お使いのシステムに対するパスを見つける最も簡単な方法は、QGIS内から:ref: `pythonconsole`を使用し、実行している`QgsApplication.prefixPath()`からの結果を見ることです。

プレフィックスパスを設定した後は `` QgsApplication``変数に `` qgs``への参照を保存します。スタンドアロンスクリプトを書いているので、GUIを使用する予定がないことを示すため、第二引数には`` False``を設定します。``QgsApplication``が設定されると、 `` qgs.initQgis() ``メソッドを呼び出すことでQGISデータプロバイダとレイヤーのレジストリを読み込みます。QGISが初期化されると、残りのスクリプトを記述する準備が整いました。最後に、 `` qgs.exitQgis()``を呼び出して、メモリからデータプロバイダと層のレジストリを削除しておしまいです。

カスタムアプリケーションでPyQGISを使用します

:REF:standalonescript`とカスタムPyQGISアプリケーションの唯一の違いは ` QgsApplication``をインスタンス化する際の二番目の引数です。:定数: true`を` False``の代わりに渡し、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()

これでQGIS API — レイヤーを読み込んだり、処理を行ったり、マップキャンバスと共にGUIを起動したり - を動かす事ができます。可能性は無限です :-)

カスタムアプリケーションを実行する

QGISのライブラリとPythonモジュールが一般的な場所に置かれて無ければ、システムに適切な場所を伝える必要があるでしょう — そうしないと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ライブラリはラッパーとして振る舞うだけです)。これらのライブラリのパスがOSで読み込めないものであれば、またもやimportエラーが発生するでしょう(このメッセージはシステムにかなり依存していることを示します):

>>> 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のパッケージを配布する方法です。アプリケーションのリリースにはいろいろやることがあるし、パッケージも大きくなりますが、ユーザを追加ソフトウェアをダウンロードをしてインストールする負荷から避けられるでしょう。

これらのモデルは組み合わせることができます - Windows と Mac OS Xではスタンドアローンアプリケーションとして配布をして、LinuxではQGISのインストールをユーザとユーザが使っているパッケージマネージャに任せるとか。