PythonでQgsMapCanvasItemの派生クラスを作成

QgsMapCanvasItemとは

QgsMapCanvasItemはQgsMapCanvas上に固定表示されるクラス

QgsMapCanvasItemからさ区政されたクラスにはQgsPointRotationItem、QgsAnnotationItem、QgsVertexMarker がある。

QGISメニューの文字注記、HTMLアノテーション等が該当するクラス。

clip_7

QgsMapCanvasItemからの派生

今回はQgsMapCanvasItemから派生したCopyrightItemを作成して地図上にCopyrightを表示
ポイントとしては基底クラスであるQGraphicsItemのメンバー変数にDataに文字列「AnnotationItem」をセット
これがないと描画されない。
またメンバー関数paintを可変引数にすること。
QgsMapCanvasItemには引数が異なるpaint関数が存在する。
これに対応するために。

# -*- coding: utf-8 -*-
# Import the PyQt and QGIS libraries
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
from qgis.gui import *

class CopyrightItem(QgsMapCanvasItem): 
    def __init__(self, canvas): 
        QgsMapCanvasItem.__init__(self, canvas)
        self.center = QgsPoint(0, 0)
        self.size   = 100
        self.canvas = canvas
        super(CopyrightItem,self).setData(0,"AnnotationItem")

    def setCenter(self, center): 
        self.center = center

    def center(self):
        return self.center

    def setSize(self, size):
        self.size = size 

    def size(self):
        return self.size

    def boundingRect(self):
        return QRectF(self.center.x() - self.size/2, self.center.y() - self.size/2, self.center.x() + self.size/2, self.center.y() + self.size/2)

    def paint(self, painter, *args):
        painter.drawText(200,200, "CopyrightItem")

    def updatePosition(self):
        self.setCenter(self.center)