QGISのプログラミング記事って少ないのね。ちと書いてみようかしらん。
対象はこんなの。
  • Quantum GISのPythonプラグインのプログラミング
  • GISメインではなく、アプリケーションとしてプログラミングがメイン
  • とりあえずWindows上で作る。
需要なさそうだけど、自分が困ったから書く。
目標を決めよう。QGISで困ったのは「データベースと画像の連携」だった。どこかにその機能を持った素敵なプラグインや機能があるのかもしれん。見つからなかった。。
PostGISレイヤーとShapeの連動とかは出来た。しかし、ベクトルはPostGISが持っているので、Shapeと連携してもあまりうれしくなかった。PostGISとWMSレイヤーが連携出来たらいいのに。。PostGISレイヤーでクリックして画像を表示出来るとビューアーとして良い。。

まずは、プラグインの置き場
プラグインの置き場は、PCで共通の置き場とログインユーザー個人用プラグインがある。
  • 共通プラグインにしたい場合は「qgis\python\plugins」にフォルダを作って、Pythonプログラムを置く。
OSGeo4Wをデフォルトインストールしているなら、「C:\OSGeo4W\apps\qgis\python\plugins」となる。
  •  個人用プラグインにしたい場合は「%USERPROFILE%\.qgis\python\plugins」に、以下同文
Windows7だったら、「C:\User\ユーザー名\.qgis\python\plugins」のようだ。
どっちにおいても、自分で使う分には変わらない。個人用でやってみよう。

とりあえず、DBtoWMSというフォルダを作った。

プラグインとして登録されるだけのプラグイン
Python歴3か月なので、よくわかっていないがPythonのパッケージとしてプラグインを作成する(あってる?)ので、まずはパッケージに必要な__init__.pyファイルを作成する。
ここのブログのソースコードの埋め方がわからん。みにくかったらすまん。中身こんなの、UTF-8で保存する。
# -*- coding: utf-8 -*-
'''
Comment
'''
def name(): 
    return u"DB-WMS連携" 

def description():
    return u"DB-WMS連携"

def version(): 
    return "1.0"

def qgisMinimumVersion():
    return "1.8"

def authorName():
    return "Sanada Kazushi"

def classFactory(iface): 
    from dbtowms import DBtoWMS
    return DBtoWMS(iface)


一行目は、日本語を使うためのおまじない。この「# -*- coding: utf-8 -*-」を書いておく。定数の前に「u」をつけると日本語で定数が書けるu"定数の文字列"。変数の場合はunicode(変数, "UTF-8")らしい。

classFactoryはプラグイン本体のオブジェクトを返すメソッドで、ここではDBtoWMSっていうクラスを返しますよ、ってことですね。ifaceパラメータは、プラグインからQGISにアクセスするためのインターフェースと思えばあっているんじゃなかろうか。

その他はプラグイン情報を返すメソッド群になる。name()はプラグイン名とかです。(Pythonってメソッドっていう言い方で良いの?Python用語の間違いが気に入らない方はスルーで。)
他のプラグイン情報にアイコンも指定出来るが、画像の準備があるので後日。

このままQGIS実行すると怒られる。あたりまえか、、classFactoryで呼び出すクラスDBtoWMSが無い。

なので同じフォルダに「dbtowms.py」ファイルを作成する。中身こんなの。
# -*- coding: utf-8 -*-
'''
Comments
'''
class DBtoWMS:
    def __init__(self, iface):
        self.iface = iface
        
    def initGui(self):
        pass
        
    def unload(self):
        pass

何もしないプログラムですまん。initGuiが初期化?unloadが終了時に呼ばれるらしいが、何もしないのでpassだ。

そんでQGIS実行。[プラグイン]メニュー から [プラグインの管理]を選択する。QGIS プラグインマネージャが起動する。そんで作ったプラグインが表示されている。
plugin01

うん、ちょろいな。。何もしていないとちょろい。

明日の努力目標
・ソースコードをブログに入れる方法を学ぶ。
・プラグインからダイアログを出す。ツールバーに登録。