Outdated version of the documentation. Find the latest one here.

プラグインレイヤーを利用する

地図レイヤーをレンダリングするためにプラグインを使うなら、QgsPluginLayerに基づいたレイヤータイプを記述することが、最良な実装方法かもしれません。

TODO:

QgsPluginLayerのよい利用ケースにおいて正しさと精巧さをチェックしましょう。

QgsPluginLayerのサブクラス化

以下は最小限のQgsPluginLayer実装の例です。これは Watermark example plugin の抜粋です

class WatermarkPluginLayer(QgsPluginLayer):

  LAYER_TYPE="watermark"

  def __init__(self):
    QgsPluginLayer.__init__(self, WatermarkPluginLayer.LAYER_TYPE, "Watermark plugin layer")
    self.setValid(True)

  def draw(self, rendererContext):
    image = QImage("myimage.png")
    painter = rendererContext.painter()
    painter.save()
    painter.drawImage(10, 10, image)
    painter.restore()
    return True

プロジェクトファイルに固有の情報を読み書きするためのメソッドも追加できます

def readXml(self, node):
  pass

def writeXml(self, node, doc):
  pass

そのようなレイヤーを含むプロジェクトをロードすると、 factory クラスが必要となります

class WatermarkPluginLayerType(QgsPluginLayerType):

  def __init__(self):
    QgsPluginLayerType.__init__(self, WatermarkPluginLayer.LAYER_TYPE)

  def createLayer(self):
    return WatermarkPluginLayer()

また、レイヤーのプロパティでカスタム情報を表示するためのコードも追加できます

def showLayerProperties(self, layer):
  pass