5

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):

Empty Attribute table. The fields are displayed however no attributes have been added.

J.Beer
  • 127
  • 4
  • 1
    Check this one: https://gis.stackexchange.com/questions/429034/creating-new-layer-with-all-attributes-inherited-from-original-layer-using-pyqgi – Taras Dec 05 '22 at 14:41

1 Answers1

5

Just add del writer after for loop.

for f in feats:
    attributes = f.attributes()
    f.setAttributes(attributes)
    geom = f.geometry()
    buff = geom.buffer(bufferDist, 5)
    f.setGeometry(buff)
writer.addFeature(f)

del writer

Kadir Şahbaz
  • 76,800
  • 56
  • 247
  • 389