Usando Camadas de Plugins

Se o seu plugin usa seus próprios métodos para tornar uma camada de mapa, escrever o seu próprio tipo de camada com base em QgsPluginLayer pode ser a melhor maneira de implementar isso.

A FAZER:

Verifique a exatidão e elabore bons casos de uso para QgsPluginLayer, ...

Subclasses QgsPluginLayer

Abaixo está um exemplo de uma implementação mínima QgsPluginLayer. É um trecho de exemplo do plugin Watermark

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

Os métodos para ler e escrever informações específicas para o arquivo de projeto também podem ser adicionados

def readXml(self, node):
  pass

def writeXml(self, node, doc):
  pass

Ao carregar um projeto que contém uma tal camada , uma classe de fábrica é necessária

class WatermarkPluginLayerType(QgsPluginLayerType):

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

  def createLayer(self):
    return WatermarkPluginLayer()

Você também pode adicionar código para exibir informações personalizadas nas propriedades da camada

def showLayerProperties(self, layer):
  pass