I've stacked a little bit with copying attributes.
I have a Point Layer created from .csv file. For each feature in this layer, I'm creating a new Polyline geometry in memory layer. Cannot add attributes from Point layer to newly created Polyline.
Here's my code:
#mcvLayer - Point Layer
nl = Create_layer("New_line", "LineString")
nl.show_layer
hh = iface.activeLayer()
a = QgsPoint(0,0) # Here will be another point
for point in mcvLayer.dataProvider().getFeatures():
pattrs = point.attributes()
pgeom = point.geometry().asPoint()
nl.create_line(a, pgeom, pattrs)
class Create_layer(object):
def __init__(self,name,type):
self.type = type
self.name = name
self.layer = QgsVectorLayer(self.type, self.name, "memory")
self.pr = self.layer.dataProvider()
def create_line(self, startpoint, endpoint, attributelist):
self.feat = QgsFeature()
self.feat.setGeometry(QgsGeometry.fromPolyline([startpoint,endpoint]))
self.pr.addFeatures([attributelist])
self.layer.updateExtents()
But all I get is:
TypeError: QgsVectorDataProvider.addFeatures(list-of-QgsFeature) ->
(bool, list-of-QgsFeature): argument 1 has unexpected type 'list'
I'm using QGIS 2.8.1
Best Answer
You create a memory layer without any fields. To set some attributes you need corresponding fields. When creating memory layers you can give field definitions as part of the argument type:
For your layer to work you have to define the same fields as for the Point layer. Another way is to add attributes to the created memory layer.
Then in init():
Hope you get the idea.