I'm new to PyQGIS and am having difficulty adding fields to a feature. I want to plot footprints and assign attributes to each of the footprints. Here is my script.
import csv, ast
from PyQt4.QtCore import QFileInfo, QVariant
fileName = 'C:\\directoryname\\temp.csv'
layer = QgsVectorLayer('Polygon?crs=EPSG:4326', 'poly', 'memory')
pr = layer.dataProvider()
attr = pr.addAttributes([QgsField('Object_ID', QVariant.String)])
poly = QgsFeature()
with open(fileName) as f:
rows = csv.DictReader(f)
for row in rows:
shape = ast.literal_eval(row['footprint'])
points = []
for i in range(0,len(shape['coordinates'][0])):
points.append(QgsPoint(shape['coordinates'][0][i][0],(shape['coordinates'][0][i][1])))
poly.setGeometry(QgsGeometry.fromPolygon([points]))
poly.setAttribute('Object_ID', row['object_id'])
pr.addFeatures([poly])
layer.updateExtents()
QgsMapLayerRegistry.instance().addMapLayers([layer])
print "Completed!!!"
I receive the error
File "c:/directoryname/tmp9urit7.py", line 19, in
poly.setAttribute('Object_ID', row['object_id']) KeyError: 'Object_ID'
When I add the line caps_string = layer.dataProvider().capabilitiesString()
, then printing caps_string yields that I have full privileges to add, modify, and delete features and attributes.
Also, when I print attr
, the result is True
.
If I comment out the line poly.setAttribute('Object_ID', row['object_id']), the script plots the footprints and completes without error, but I have no attributes for any of the footprints.
What am I doing wrong?
Best Answer
As out turns out, there were problems in the script. First, as @artwork21 pointed out,
layer.updateFields()
needed to be added update the fields in the layer. In addition, the fields also needed to be set in the features within the layer.Here is the updated script: