Your code is working for me without problem. I've try it in the QGIS python console. When i run it with a first start and end point, i get the red line in the cable layer then i run the script with others start and end point and i get the yellow line added in the same layer. [![enter image description here][1]][1] and what i get in the attribute table (length calculate with the field calculator) [![enter image description here][2]][2] I just remove the part of the code using QgsRubberBand as it was useless. The code I used: from PyQt4.QtCore import * from PyQt4.QtGui import * from qgis.core import * from qgis.gui import * from qgis.networkanalysis import * #building the graph** vl = qgis.utils.iface.mapCanvas().currentLayer() director = QgsLineVectorLayerDirector(vl, -1, '', '', '', 3) properter = QgsDistanceArcProperter() director.addProperter(properter) crs = qgis.utils.iface.mapCanvas().mapRenderer().destinationCrs() builder = QgsGraphBuilder(crs) #coordinates of the Start point and endPoint** pStart = QgsPoint(-1.041,0.916) pStop = QgsPoint(-0.813,0.152) tiedPoints = director.makeGraph(builder, [pStart, pStop]) graph = builder.graph() #Calculation of the shortest path** tStart = tiedPoints[0] tStop = tiedPoints[1] idStart = graph.findVertex(tStart) idStop = graph.findVertex(tStop) (tree, cost) = QgsGraphAnalyzer.dijkstra(graph, idStart, 0) if tree[idStop] == -1: print "Path not found" else: p = [] curPos = idStop while curPos != idStart: pnt = graph.vertex(graph.arc(tree[curPos]).inVertex()).point() p.append(pnt) curPos = graph.arc(tree[curPos]).outVertex() p.append(tStart) #I build here a polyline based on the points in the p[] array geom = QgsGeometry.fromPolyline(p) # I add here my result in a memory layer called cable and i want to do it for every feature i get after transforming the qgsrubberband object v_layer = None for layer in QgsMapLayerRegistry.instance().mapLayers().values(): if layer.name() == 'cable': v_layer = layer if v_layer is None: v_layer = QgsVectorLayer("LineString", "cable", "memory") v_layer.addAttribute(QgsField("id", QVariant.String)) v_layer.addAttribute(QgsField("type", QVariant.String)) QgsMapLayerRegistry.instance().addMapLayers([v_layer]) pr = v_layer.dataProvider() v_layer.startEditing() seg = QgsFeature() seg.setGeometry(geom) pr.addFeatures( [seg] ) v_layer.commitChanges() [1]: https://i.sstatic.net/IeNzk.png [2]: https://i.sstatic.net/KqSO6.png