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.
-
1Check this one: gis.stackexchange.com/questions/429034/…Taras– Taras ♦2022年12月05日 14:41:11 +00:00Commented Dec 5, 2022 at 14:41
1 Answer 1
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
-
Oh thanks a lot! Can you tell me the reason why It is important to delete the writer?J.Beer– J.Beer2022年12月09日 14:56:24 +00:00Commented Dec 9, 2022 at 14:56
-
You need to delete the writer to flush features to disk.Kadir Şahbaz– Kadir Şahbaz2022年12月09日 21:43:49 +00:00Commented Dec 9, 2022 at 21:43