In this post I'll show some code for drawing a line from a list of coordinates, and saving it in a temporary vector layer.
You can implement the code below to get the coordinates from a text file, clipboard, or any user input.
Below are two functions that, called with the layer name and list of points as arguments, build a Line or Point temporary layer.
+1 / share if you like the post and the blog!
-----------
def createLineLay(name,lstP):
vl = QgsVectorLayer("Linestring", name, "memory")
#pr = vl.dataProvider()
vl.startEditing()
vl.addAttribute(QgsField("id", QVariant.Int))
vl.updateFields()
fet = QgsFeature(vl.pendingFields())
lstPP = []
for p in lstP:
lstPP.append(QgsPoint(float(p[0]),float(p[1])))
lstPP.append(QgsPoint(float(lstP[0][0]),float(lstP[0][1])))
fet.setGeometry(QgsGeometry.fromPolyline(lstPP))
fields = vl.pendingFields()
fet.setFields( fields, True )
fet['id'] = 0
pr = vl.dataProvider()
pr.addFeatures( [ fet ] )
vl.commitChanges()
QgsMapLayerRegistry.instance().addMapLayer(vl)
def createLayPts(name, lstP):
vl = QgsVectorLayer("Point", name, "memory")
#pr = vl.dataProvider()
vl.startEditing()
vl.addAttribute(QgsField("ID", QVariant.Int))
vl.addAttribute(QgsField("X", QVariant.Double))
vl.addAttribute(QgsField("Y", QVariant.Double))
vl.updateFields()
idP = 0
for p in lstP:
fet = QgsFeature(vl.pendingFields())
fet.setGeometry(QgsGeometry.fromPoint(QgsPoint(float(p[0]),float(p[1]))))
fields = vl.pendingFields()
fet.setFields( fields, True )
fet["ID"] = idP
fet['X'] = p[0]
fet['Y'] = p[1]
pr = vl.dataProvider()
pr.addFeatures( [ fet ] )
vl.commitChanges()
idP +=1
QgsMapLayerRegistry.instance().addMapLayer(vl)