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.

1

1 Answer 1

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
2
  • Oh thanks a lot! Can you tell me the reason why It is important to delete the writer?
    – J.Beer
    Dec 9, 2022 at 14:56
  • You need to delete the writer to flush features to disk. Dec 9, 2022 at 21:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.