Wie verwende ich die QGIS-Python-Konsole, um einfache Ebenenabfragen und PNG-Ausgaben zu durchlaufen?

8

Ich bin wirklich neu in der QGIS-Codierung und es fällt mir schwer, (insbesondere) die API-Klassen / -Funktionen zu finden, um Aktionen des Query Builder-Fensters auszuführen.

Ich versuche im Grunde, dies zu tun:

  1. Iterieren Sie von n = 1 bis 200 ...

  2. Abfrageebene A mit field_id = n

  3. Abfrageebene B mit field_id = n

  4. Abfrage LayerC mit field_id = n

  5. Speichern Sie als img_n.png

Ziemlich einfach, denke ich, aber es ist zu einem echten Problem geworden, es in der GUI von Hand zu tun.

Kory Roberts
quelle

Antworten:

4

Nun, alleine habe ich endlich die Schlüsselfunktion ausgegraben, die ich brauchte: setSubsetString (). Wer hat dieses Ding genannt? ... scheint in Bezug auf seine Funktion nicht sehr intuitiv zu sein.

Hier ist das Skelett, mit dem ich gerade arbeite:

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
quelle
setSubString filtert unter Verwendung der Anbietersyntax den Lyaer. Es ist in Ordnung, es zu verwenden, aber beachten Sie, dass sich die Syntax möglicherweise ändert, wenn Sie den von Ihnen verwendeten Ebenentyp ändern.
Nathan W
Wenn Leute diesen Code allgemeiner verwenden möchten als ich, sollten sie überprüfen, ob es sich bei der Ebene um einen Typvektor handelt (QgsMapLayer :: LayerType), und wahrscheinlich mehr Überprüfungen auf dem Weg.
Kory Roberts
3

Ich würde Ihnen empfehlen, die API-Dokumentation durchzugehen .

Zurück zu Ihrer Frage: Sie können alle Ebenen im Inhaltsverzeichnis durchlaufen, indem Sie Folgendes verwenden:

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