0 votos

actualizar automáticamente tabla atributos Qgis

Como se puede actualizar automáticamente la tabla de atributos de una capa en Qgis al mover una línea, de forma que se actualicen los campos que contienen las coordenadas de inicio y de final de la línea con código Python

0voto

Jimmy Neutron Puntos 410

Para actualizar automáticamente la tabla de atributos de una capa en QGIS al mover una línea y actualizar los campos de coordenadas de inicio y final de la línea con código Python, puedes utilizar el siguiente script:

from qgis.core import QgsProject

# Obtener la capa activa
layer = iface.activeLayer()

# Conectar la señal de edición de la capa
layer.featureAdded.connect(updateAttributes)

# Función para actualizar los atributos al mover la línea
def updateAttributes(feature):
    # Obtener la geometría de la línea
    geom = feature.geometry()

    # Obtener las coordenadas de inicio y final de la línea
    start_point = geom.vertexAt(0)
    end_point = geom.vertexAt(geom.vertexCount() - 1)

    # Actualizar los campos de coordenadas de inicio y final en la tabla de atributos
    layer.startEditing()
    feature.setAttribute('start_coord', start_point)
    feature.setAttribute('end_coord', end_point)
    layer.updateFeature(feature)
    layer.commitChanges()

# Guardar el proyecto de QGIS
QgsProject.instance().write()

Este script se encarga de conectar la señal de edición de la capa activa en QGIS y al mover una línea, se ejecuta la función updateAttributes que actualiza los campos de coordenadas de inicio y final en la tabla de atributos. Recuerda guardar el proyecto de QGIS después de ejecutar el script para que los cambios queden guardados.

0voto

No consigo que se conecte y ejecute la función updateAttributes. Tengo una capa con los siguientes atributos: Xi, Yi, Xf, Yf que son las coordenadas iniciales y finales de la línea. Dibujo una línea y si ejecuto este código

from qgis.core import QgsProject

# def updateAttributes(feature):

layer = iface.activeLayer() features = layer.getFeatures() for feature in features:

Obtener la geometría de la línea

geom = feature.geometry()
# Obtener las coordenadas de inicio y final de la línea
start_point = geom.vertexAt(0)
x1=start_point.x()
y1=start_point.y()
# end_point = geom.vertexAt(geom.vertexCount() - 1)
end_point = geom.vertexAt(1)
x2=end_point.x()
y2=end_point.y()

print('x1: ', x1)
print('y1: ', y1)
print('x2: ', x2)
print('y2: ', y2)

# Actualizar los campos de coordenadas de inicio y final en la tabla de atributos
layer.startEditing()
feature.setAttribute('Xi', x1)
feature.setAttribute('Yi', y1)
feature.setAttribute('Xf', x2)
feature.setAttribute('Yf', y2)

layer.updateFeature(feature)
layer.commitChanges()

# Conectar la señal de edición de la capa
# layer.featureAdded.connect(updateAttributes)

QgsProject.instance().write()

obtengo: exec(Path('C:/Users/Admin/AppData/Local/Temp/tmpn8d1cz85').read_text()) x1: 295104.8545802747 y1: 4335509.52886282 x2: 295842.04603664426 y2: 4335717.9494839925 y en la tabla de atributos el campo Xi -> NULL y los demás campos se actualizan correctamente

0voto

Creo que la solución a mi pregunta era tan fácil como poner en la capa, en sus propiedades, en Valor predeterminado, la expresión x( start_point( $geometry )) para la coordenada X de inicio de la línea y x(end_poin($geometry)) para la X final. Y en la coordenada Y poner y(start_point($geometry) e y(end_point($geometry) para el final de línea. Marcando la casilla de Aplicar valor predeterminado al actualizar. No se aún como hacerlo con código, aunque quizás, después de configurar las propiedades de la capa, no lo necesite. Muchas gracias por su ayuda, con la que seguiré practicando.

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