Tengo algunos archivos de forma para la que necesito para generar un índice(int) de campo.
He intentado utilizar esta función:
def add_index_to_layer(layer):
fieldindex = layer.fieldNameIndex("index")
if fieldindex >= 0:
print "Layer " + layer.name() + " already has an index field"
return False
layer.dataProvider().addAttributes([QgsField("index", QVariant.Int)])
layer.updateFields() # no idea if this is actually needed?
fieldindex = layer.fieldNameIndex("index")
i = 0
layer.startEditing()
for field in layer.fields():
print field.name() # this shows the field "index" indeed exists
for feature in layer.getFeatures():
print feature.id(), feature["index"]
feature.setAttribute("index", i)
# this shows the value is being correctly set at this point
print feature.id(), feature["index"]
i +=1
layer.commitChanges()
La función se ejecuta bien, las diversas funciones de impresión también muestran todo funciona como se esperaba (los valores se establezca correctamente).
Sin embargo, cuando verifiyng mirando la tabla de atributos, el campo de índice se crea, pero siempre está vacío o NULO.
¿Alguien tiene una idea acerca de lo que está pasando? Son algunos de los cambios de pendiente, donde espero que sean comprometidos, ya? Pensé capa.startEditing() y capa.commitChanges() bien podría encapsular función de cambios de campo?
Estoy trabajando con QGIS 2.18.0, y el script se crea como un script de procesamiento.