¿Cómo uso la consola QGIS python para iterar a través de consultas de capa simples y salidas png?

8

Soy realmente nuevo en la codificación QGIS y me cuesta encontrar (especialmente) las clases / funciones de la API para llevar a cabo acciones de la ventana del generador de consultas.

Básicamente estoy tratando de hacer esto:

  1. Iterar de n = 1 a 200 ...

  2. Consulta layerA donde field_id = n

  3. Consulta layerB donde field_id = n

  4. Consulta layerC donde field_id = n

  5. Guardar como img_n.png

Bastante simple, creo, pero se ha convertido en un verdadero dolor hacer a mano en la GUI.

Kory Roberts
fuente

Respuestas:

4

Bueno, por mi cuenta, finalmente busqué la función clave que necesitaba: setSubsetString (). ¿Quién llamó a esta cosa? ... no parece muy intuitivo en cuanto a su función.

Aquí está el esqueleto con el que estoy trabajando ahora:

qgis.utils.iface
canvas = qgis.utils.iface.mapCanvas()
allLayers = canvas.layers()
for n in range(1, 201)
    for layer in allLayers:
        layer.setSubsetString('field_id = ' + str(n))
    canvas.refresh()
    canvas.saveAsImage('img_' + str(n) + '.png')

canvas.refresh()
Kory Roberts
fuente
setSubString filtra, utilizando la sintaxis de proveedores, lyaer. Está bien usarlo, pero tenga en cuenta que la sintaxis podría cambiar si cambia el tipo de capa que está utilizando.
Nathan W
Si la gente quiere usar este código de manera más genérica que yo, sí, deberían verificar que la capa sea de tipo vector (QgsMapLayer :: LayerType) y probablemente más verificaciones en el camino.
Kory Roberts
3

Te sugiero que revises su documentación API .

Volviendo a su pregunta, puede iterar a través de todas las capas en la tabla de contenido utilizando:

canvas = qgis.utils.iface.mapCanvas()
allLayers = canvas.layers()
for i in allLayers:
   print i.name()
   #Do other stuff here.
Sibi
fuente