Como uso o console python do QGIS para iterar através de consultas de camada simples e saídas png?

8

Eu sou realmente novo na codificação QGIS e estou tendo dificuldade em encontrar (especialmente) as classes / funções da API para executar ações da janela do Query Builder.

Estou basicamente tentando fazer isso:

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

  2. Consulta layerA em que field_id = n

  3. Consulta layerB em que field_id = n

  4. Consulta layerC em que field_id = n

  5. Salvar como img_n.png

Bastante simples, eu acho, mas tornou-se uma dor real fazer manualmente na GUI.

Kory Roberts
fonte

Respostas:

4

Bem, por conta própria, finalmente descobri a função principal que eu precisava: setSubsetString (). Quem nomeou essa coisa? ... não parece muito intuitivo quanto à sua função.

Aqui está o esqueleto com o qual estou trabalhando agora:

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
fonte
filtros setSubString, usando a sintaxe de provedores, o lyaer. É bom usá-lo, mas esteja ciente de que a sintaxe pode mudar se você alterar o tipo de camada que está usando.
Nathan W
Se as pessoas quiserem usar esse código de forma mais genérica do que eu, sim, devem verificar se a camada é do tipo vetor (QgsMapLayer :: LayerType) e provavelmente mais verificações ao longo do caminho.
Kory Roberts
3

Eu sugiro que você leia a documentação da API deles .

Voltando à sua pergunta, você pode percorrer todas as camadas no sumário usando:

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