I want to create a buffer around a number of features. It is important for me to keep the attributes of the features in the new buffer.shp layer. When I try to write a new VectorLayer with a QgsVectorFileWriter, I do get the buffered polygons and also the fields of the original layer get copied over, however the attribute table stays empty.
How can I copy over the attributes of the original layer to the buffer layer?
As you can see I already tried to load the attributes using the . attributes() method on the QgsFeature object and setting the attributes. However I feel I am missing something here.
for f in feats: attributes = f.attributes() f.setAttributes(attributes)
See full code below:
path = '/Volumes/VAW_ETH-Z/M.Thesis/data/geospatial/' # load filtered sgi sgi_filtered = QgsVectorLayer(path + 'sgi_filtered.shp') ## Create buffer around filtered sgi outFn = path + 'gl_buffer3.shp' bufferDist = 50 # in map units fields = sgi_filtered.fields() feats = sgi_filtered.getFeatures() writer = QgsVectorFileWriter( outFn, 'utf-8', fields, QgsWkbTypes.Polygon, sgi_filtered.sourceCrs(), # loads the reference system of the source feature 'ESRI Shapefile') for f in feats: attributes = f.attributes() f.setAttributes(attributes) geom = f.geometry() buff = geom.buffer(bufferDist, 5) f.setGeometry(buff) writer.addFeature(f)
Screenshot of the Attribute Table below (it shows the fields but no attributes):