domingo, 4 de marzo de 2018

Rasgos (features) en el orden en el cual son seleccionados mediante PyQGIS3

En esta pregunta de gis.stackexchange.com se plantea cómo almacenar en una variable externa a la función los valores de id correspondientes a los rasgos (features) que han sido seleccionados y en el orden estricto de su selección. Este requerimiento se basa en el hecho de que si se seleccionan todos los rasgos en un orden determinado y se imprimen sus ids la lista de valores corresponde, contrariamente a lo esperado, al orden en que fueron digitalizados.

La utilidad de la función aquí desarrollada estriba en el hecho de que si se refiere a una red de transporte, por ejemplo, las polilíneas reflejaran el orden en que fueron seleccionadas para confeccionar una determinada ruta.

El código completo con mi nomenclatura es el siguiente:

1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def onSelectionChanged():
    try:
        id = iface.activeLayer().selectedFeatures()[0].id()
        ids.append(id)
        print (id)
    except IndexError:
        print ("no feature selected")

ids = []

iface.activeLayer().selectionChanged.connect( onSelectionChanged )

La forma en la cual fue ejecutado el código de arriba, visualizada en la imagen siguiente, fue pensada para ser transladada a un plugin.


Primero, se ejecutó el código en la Python Console con el botón Run. A continuación, se seleccionaron los rasgos con el orden 0, 6, 1 y 2. Para verificar el orden se imprimió la variable ids cuyos valores estaban en la secuencia esperada: [0, 6, 1, 2]. Para resetear la función es necesario ejecutar la herramienta "Deselect" de la "Attributes Toolbar". Para una nueva secuencia se inicializa la lista ids = [] y se vuelve a hacer la selección. En la imagen se observa que ésta nueva secuencia correspondió a [5, 4, 6, 3, 7].

No hay comentarios: