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.
Verifique a exatidão e elabore bons casos de uso para 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