Memperoleh tingkat lapisan dalam PyQGIS?

11

Saya mencoba menulis skrip pemrosesan menggunakan r.neighborsalgoritma rumput untuk raster. Saat Anda menggunakan Gui untuk algoritme ini, Anda bisa membiarkan bidang luas lapisan GRASS untuk menggunakan batas minimal. Sebaliknya, ketika digunakan di konsol python, saya tidak dapat menemukan cara memasukkan nilai "default" semacam ini.masukkan deskripsi gambar di sini

Saya melihat di https://docs.qgis.org/2.2/en/docs/user_manual/processing/console.html bahwa tampaknya wajib untuk memasukkan empat koordinat untuk parameter sejauh. Saya mencoba menggunakan iface.mapCanvas().extent()tetapi objek yang dikembalikan tidak diterima sebagai parameter dan saya tidak dapat menemukan cara mendapatkan koordinatnya ..

Apakah ada cara untuk mendapatkan xmin, ymin, xmax, ymaxlapisan dalam PyQGIS untuk memasukkannya ke dalam algoritma? Apakah saya salah melakukannya?

Sejuk
sumber
Terima kasih atas jawaban Anda, saya menemukan solusi ini di sisi saya juga ... Sebenarnya itu juga dijawab dengan cara yang sama di gis.stackexchange.com/questions/213428/… tetapi tanda kurung setelah extenthilang sehingga tidak berfungsi .. .
Clement

Jawaban:

14

Jawabannya hampir sepenuhnya terkandung dalam posting yang baru-baru ini saya tulis.

Tingkat dikembalikan sebagai objek QgsRectangle () dengan kode berikut:

layer = iface.activeLayer() # load the layer as you want
ext = layer.extent()

Untuk mendapatkan koordinat simpul untuk lapisan saat ini, Anda dapat menjalankan kode ini:

xmin = ext.xMinimum()
xmax = ext.xMaximum()
ymin = ext.yMinimum()
ymax = ext.yMaximum()
coords = "%f,%f,%f,%f" %(xmin, xmax, ymin, ymax) # this is a string that stores the coordinates

Akhirnya, Anda dapat menjalankan kode berikut untuk menggunakan r.neighborsmodul dari Konsol Python:

processing.runalg("grass7:r.neighbors",layer,0,3,False,False,"",coords,0,None)
mgri
sumber
5

Anda berada di jalur yang benar, Anda hanya perlu melangkah lebih jauh. Lihat dokumentasi QGIS untuk QgsRectangle

Pada dasarnya, Anda melakukannya:

  • dapatkan Layer saat ini

    layer = iface.activeLayer()
  • dapatkan sejauh yang merupakan objek QgsRectangle

    ex = layer.extent()
  • dan di sana ekstrak Nilai dengan:

    xmax = ex.xMaximum()
    ymax = ex.yMaximum()
    xmin = ex.xMinimum()
    ymin = ex.yMinimum()
Tertawa
sumber