Utiliser une extension de couches

Si votre extension utilise ses propres méthodes pour faire le rendu de la couche cartographique, écrire votre propre type de couche basé sur QgsPluginLayer pourrait être la meilleure façon de l’implémenter.

**À FAIRE : **

Vérifier que ce qui suit est correct et ajouter des détails sur de bons cas d’utilisation de QgsPluginLayer, ...

Héritage de QgsPluginLayer

Voici un exemple d’implémentation minimaliste d’un QgsPluginLayer. Il est issu d’un extrait de l’extension 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

Des méthodes pour lire et écrire les informations spécifiques du fichier de projet peuvent également être ajoutées :

def readXml(self, node):
  pass

def writeXml(self, node, doc):
  pass

Lors du chargement d’un projet contenant une telle couche, une classe “factory” est indispensable :

class WatermarkPluginLayerType(QgsPluginLayerType):

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

  def createLayer(self):
    return WatermarkPluginLayer()

Vous pouvez également ajouter du code pour afficher une information personnalisée dans les propriétés de la couche :

def showLayerProperties(self, layer):
  pass