¿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.

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()

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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.