it is not realy complicated, look at **Memory provider** in [vector][1]: : - a point is created with `QgsPoint(x,y)` and `QgsGeometry.fromPoint(QgsPoint(x,y))` - a line is created with two points: `QgsGeometry.fromPolyline([QgsPoint(x1,y1),QgsPoint(x2,y2)]))` - a polygon is created with a list of points: `QgsGeometry.fromPolygon([[QgsPoint(x1,y1),QgsPoint(x2,y2), QgsPoint(x3,y3)]])` 1) two points: # create a memory layer with two points layer = QgsVectorLayer('Point', 'points' , "memory") pr = layer.dataProvider() # add the first point pt = QgsFeature() point1 = QgsPoint(50,50) pt.setGeometry(QgsGeometry.fromPoint(point1)) pr.addFeatures([pt]) # update extent of the layer layer.updateExtents() # add the second point pt = QgsFeature() point2 = QgsPoint(100,150) pt.setGeometry(QgsGeometry.fromPoint(point2)) pr.addFeatures([pt]) # update extent layer.updateExtents() # add the layer to the canvas QgsMapLayerRegistry.instance().addMapLayers([layer]) ![enter image description here][2] 2) the line connecting the two points layer = QgsVectorLayer('LineString', 'line' , "memory") pr = layer.dataProvider() line = QgsFeature() line.setGeometry(QgsGeometry.fromPolyline([point1,point2])) pr.addFeatures([line]) layer.updateExtents() QgsMapLayerRegistry.instance().addMapLayers([layer]) ![enter image description here][3] 3) a polygon covering the points layer = QgsVectorLayer('Polygon', 'poly' , "memory") pr = layer.dataProvider() poly = QgsFeature() points = [point1,QgsPoint(50,150),point2,QgsPoint(100,50)] # or points = [QgsPoint(50,50),QgsPoint(50,150),QgsPoint(100,150),QgsPoint(100,50)] poly.setGeometry(QgsGeometry.fromPolygon([points])) pr.addFeatures([poly]) layer.updateExtents() QgsMapLayerRegistry.instance().addMapLayers([layer]) ![enter image description here][4] - [1]: https://www.qgis.org/en/docs/pyqgis_developer_cookbook/vector.html [2]: https://i.sstatic.net/Q6kHQ.jpg [3]: https://i.sstatic.net/IJGZw.jpg [4]: https://i.sstatic.net/cVirH.jpg **Changes in QGIS 3.0 and onward:** For QGIS 3.0 and onward the above workflow is still correct, but certain functions have changed. See https://qgis.org/api/api_break.html To update the above code, change following functions: QgsPoint -> QgsPointXY QgsGeometry.fromPoint -> QgsGeometry.fromPointXY QgsGeometry.fromPolyline -> QgsGeometry.fromPolylineXY QgsGeometry.fromPolygon -> QgsGeometry.fromPolygonXY QgsMapLayerRegistry -> QgsProject