Apakah mungkin untuk mengambil "tangkapan layar" secara otomatis dari fitur yang saya pilih di QGIS menggunakan Python?

11

Saya mengimplementasikan alat yang memungkinkan pengguna untuk membuat profil fitur (dalam kasus perkotaan saya). Apakah mungkin untuk mengambil screenshot fitur ini secara otomatis (ditampilkan dalam jendela QGIS) dan untuk menampilkannya dalam profil PDF?

Gambar seharusnya hanya menunjukkan sejauh mana fitur dan mungkin lapisan WMS yang terletak di luar fitur. Apakah sudah ada beberapa alat yang bisa Anda sarankan?

kopi
sumber
Bagaimana saya bisa menyimpan JPG daripada PNG? QgsMapCanvas.saveAsImage (QString theFileName, QPixmap * QPixmap = 0, QString = "PNG") Saya tahu bahwa saya dapat menggunakan "JPG" sebagai parameter terakhir, tapi saya tidak tahu cara mendefinisikan QPixmap yang dieksekusi sama seperti peta sebenarnya jendela di qgis. Terimakasih atas bantuannya. Micha
gismik

Jawaban:

10

kopi

Ada beberapa pendekatan untuk solusi, tetapi ini mungkin salah satu yang paling sederhana (tergantung kebutuhan Anda):

Pilih fitur menggunakan QgsVectorLayer

Dengan asumsi referensi ke layer vektor Anda (vlayer) dan id fitur (fid). Lihat juga

vlayer.select(fid)

Zoom ke fitur yang dipilih menggunakan QgsInterface

qgis.utils.iface.actionZoomToSelected().trigger()

Batalkan pilihan fitur menggunakan QgsVectorLayer

vlayer.deselect(fid)

Simpan kanvas sebagai gambar menggunakan QgsMapCanvas

qgis.utils.iface.mapCanvas().saveAsImage('/Users/me/Desktop/feature.png')

Pendekatan ini menghasilkan foto sebesar mungkin, jika jendela Anda diperluas menjadi penuh, karena menyimpan kanvas berada pada resolusi layar. Namun, itu tidak memastikan gambar Anda akan berada pada skala zoom peta yang sama, hanya ukuran piksel yang relatif sama. Ada opsi lain seperti QgisInterface::actionPanToSelected()jika Anda harus menjaga skala zoom agar konsisten.

dakcarto
sumber
Wow. Terima kasih atas jawaban Anda! Ini bekerja sangat baik!
kopi
1
lihat juga plugin "cetak mudah", mungkin bukan yang Anda butuhkan, tetapi dapat berguna untuk inspirasi.
Giovanni Manghi
Apakah mungkin untuk mengatur skala sebelum mengambil tangkapan layar? Dan bagaimana saya bisa menggunakan "actionPanToSelected"? Saya mencoba dengan cara ini: qgis.utils.iface.actionPanToSelected (fitur yang fungsinya harus digeser ke ...), tetapi ini mengembalikan pesan kesalahan: "Kesalahan Attritbute: objek QgisInterface tidak memiliki atribut actionPanToSelected
kopi
1
Coba qgis.utils.iface.mapCanvas().zoomScale(scale)atur skala peta. actionPanToSelected () tidak mengambil parameter, tetapi mengembalikan referensi ke tindakan itu sendiri (seperti actionZoomToSelected () di atas). Gunakan slot publiknya qgis.utils.iface.actionPanToSelected().trigger()untuk menjalankan aksi, yang akan menangani mencari tahu apa yang dipilih.
dakcarto
1
Hmmm. qgis.utils.iface.actionPanToSelected (). trigger () berfungsi untuk saya di bawah QGIS versi 1.8.0. Apakah Anda menggunakan versi stabil terbaru (1.8.0)? Fitur ditambahkan kembali pada bulan Januari , sehingga tidak dalam versi 1.7.x .
dakcarto