4 votos

QGIS Python generar campo de índice

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.

1voto

Mue Puntos 2469

Intenta reemplazar esta línea:

 feature.setAttribute("index", i)
 

con este:

 layer.changeAttributeValue(feature.id(), layer.fieldNameIndex("index"), i)
 

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X