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

Использование слоёв расширений

Если расширение использует собственные методы для отрисовки слоёв карты, наиболее простой способ реализации — создание нового типа слоя на основе QgsPluginLayer.

Check correctness and elaborate on good use cases for QgsPluginLayer, ...

Наследование QgsPluginLayer

Ниже показан пример минимальной реализации QgsPluginLayer. Это фрагмент Watermark example plugin:

class WatermarkPluginLayer(QgsPluginLayer):


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

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

Methods for reading and writing specific information to the project file can also be added:

def readXml(self, node):

def writeXml(self, node, doc):

When loading a project containing such a layer, a factory class is needed:

class WatermarkPluginLayerType(QgsPluginLayerType):

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

  def createLayer(self):
    return WatermarkPluginLayer()

You can also add code for displaying custom information in the layer properties:

def showLayerProperties(self, layer):