Bagaimana cara menggunakan konsol python QGIS untuk beralih melalui query layer sederhana dan output png?


8

Saya benar-benar baru untuk pengkodean QGIS dan saya mengalami kesulitan menemukan (terutama) kelas api / fungsi untuk melakukan tindakan dari jendela Pembuat Kueri.

Saya pada dasarnya mencoba melakukan ini:

  1. Iterasi dari n = 1 hingga 200 ...

  2. Query layerA di mana field_id = n

  3. Query layerB di mana field_id = n

  4. Query layerC di mana field_id = n

  5. Simpan sebagai img_n.png

Cukup sederhana, saya pikir, tetapi telah menjadi sangat menyakitkan untuk dilakukan dengan tangan di GUI.

Jawaban:


4

Nah, saya sendiri, saya akhirnya menggali fungsi kunci yang saya butuhkan: setSubsetString (). Siapa yang menamai benda ini? ... sepertinya tidak intuitif untuk fungsinya.

Inilah kerangka yang saya kerjakan sekarang:

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

filter setSubString, menggunakan sintaks penyedia, lyaer. Tidak masalah untuk menggunakannya tetapi perlu diketahui bahwa sintaks mungkin berubah jika Anda mengubah jenis lapisan yang Anda gunakan.
Nathan W

Jika orang ingin menggunakan kode ini lebih umum daripada saya, ya, mereka harus memeriksa bahwa layer tersebut adalah tipe vektor (QgsMapLayer :: LayerType) dan mungkin lebih banyak pemeriksaan di sepanjang jalan.
Kory Roberts

3

Saya sarankan Anda membaca dokumentasi API mereka .

Kembali ke pertanyaan Anda, Anda dapat mengulangi semua lapisan di TOC menggunakan:

canvas = qgis.utils.iface.mapCanvas()
allLayers = canvas.layers()
for i in allLayers:
   print i.name()
   #Do other stuff here.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.