Creating custom map canvas items
A map canvas item is an item that is placed on top of the map canvas. Standard map canvas items include text annotations, vertex markers, and the visual highlighting of a feature. It is also possible to create your own custom map canvas items by subclassing QgsMapCanvasItem. To see how this works, let's create a map canvas item that draws a compass rose onto the map:

We'll start by creating the basic QgsMapCanvasItem subclass:
class CompassRoseItem(QgsMapCanvasItem):
def __init__(self, canvas):
QgsMapCanvasItem.__init__(self, canvas)
self.center = QgsPoint(0, 0)
self.size = 100
def setCenter(self, center):
self.center = center
def center(self):
return self.center
def setSize(self, size):
self.size = size
def size(self):
return self.size
def boundingRect(self):
return QRectF(self.center.x() - self.size/2,
self.center.y() - self.size/2,
...