เป็นไปได้ไหมที่จะใช้“ ภาพหน้าจอ” ของคุณสมบัติที่ฉันเลือกใน QGIS โดยใช้ Python?


11

ฉันกำลังใช้เครื่องมือที่อนุญาตให้ผู้ใช้สร้างโปรไฟล์ของคุณลักษณะ (ในกรณีของฉันห่อเมือง) เป็นไปได้ไหมที่จะจับภาพหน้าจอของคุณสมบัตินี้โดยอัตโนมัติ (แสดงในหน้าต่าง QGIS) และแสดงในโปรไฟล์ PDF?

รูปภาพควรแสดงขอบเขตของคุณลักษณะเท่านั้นและอาจเป็นเลเยอร์ WMS ที่อยู่นอกเหนือคุณสมบัตินั้น มีเครื่องมือบางอย่างที่คุณสามารถแนะนำได้หรือไม่?


ฉันจะบันทึก JPG แทน PNG ได้อย่างไร QgsMapCanvas.saveAsImage (QString theFileName, QPixmap * QPixmap = 0, QString = "PNG") ฉันรู้ว่าฉันสามารถใช้ "JPG" เป็นพารามิเตอร์สุดท้ายได้ แต่ฉันไม่รู้วิธีการกำหนด QPixmap ที่เหมือนกันกับแผนที่จริง หน้าต่างใน qgis ขอบคุณที่ช่วยเหลือ. Micha
gismic

คำตอบ:


10

Kopi,

มีหลายวิธีในการแก้ปัญหา แต่อาจเป็นวิธีที่ง่ายที่สุด (ขึ้นอยู่กับความต้องการของคุณ):

เลือกคุณสมบัติโดยใช้QgsVectorLayer

สมมติว่ามีการอ้างอิงเลเยอร์เวกเตอร์ของคุณ (vlayer) และรหัสของฟีเจอร์ (fid) ดูสิ่งนี้ด้วย

vlayer.select(fid)

ซูมไปที่คุณสมบัติที่เลือกโดยใช้QgsInterface

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

ยกเลิกการเลือกคุณสมบัติโดยใช้QgsVectorLayer

vlayer.deselect(fid)

บันทึกผืนผ้าใบเป็นรูปภาพโดยใช้QgsMapCanvas

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

วิธีการนี้จะทำให้ภาพถ่ายมีขนาดใหญ่ที่สุดเท่าที่จะเป็นไปได้หากหน้าต่างของคุณถูกขยายให้เต็มเนื่องจากการบันทึกผืนผ้าใบเป็นความละเอียดหน้าจอ อย่างไรก็ตามไม่แน่ใจว่ารูปภาพของคุณจะอยู่ในระดับซูมแผนที่เดียวกัน แต่มีขนาดพิกเซลเท่ากัน มีตัวเลือกอื่น ๆ เช่นQgisInterface::actionPanToSelected()ถ้าคุณต้องการให้ระดับการซูมสอดคล้องกัน


ว้าว. ขอบคุณสำหรับคำตอบ! มันใช้งานได้ดีมาก!
kopi

1
ลองดูที่ปลั๊กอิน "พิมพ์ง่าย" ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ แต่อาจมีประโยชน์สำหรับแรงบันดาลใจ
Giovanni Manghi

เป็นไปได้ไหมที่จะตั้งขนาดก่อนที่จะถ่ายภาพหน้าจอ? และฉันจะใช้ "actionPanToSelected" ได้อย่างไร ฉันลองใช้วิธีนี้: qgis.utils.iface.actionPanToSelected (ฟีเจอร์ที่ฟังก์ชั่นต้องเลื่อนไปที่ ... ) แต่สิ่งนี้จะส่งคืนข้อความแสดงข้อผิดพลาด: "ข้อผิดพลาดของ Attritbute: วัตถุ QgisInterface ไม่มีแอตทริบิวต์ actionPanToSelected
kopi

1
ลองqgis.utils.iface.mapCanvas().zoomScale(scale)ตั้งค่ามาตราส่วนแผนที่ actionPanToSelected ()ไม่ได้ใช้พารามิเตอร์ แต่ส่งคืนการอ้างอิงถึงการกระทำของตัวเอง (เช่น actionZoomToSelected () ด้านบน) ใช้ช่องสาธารณะqgis.utils.iface.actionPanToSelected().trigger()เพื่อเริ่มการทำงานซึ่งจะจัดการกับการค้นหาสิ่งที่เลือก
dakcarto

1
อืมม qgis.utils.iface.actionPanToSelected (). trigger () ทำงานให้ฉันภายใต้ QGIS เวอร์ชัน 1.8.0 คุณใช้เวอร์ชั่นเสถียรล่าสุด (1.8.0) หรือไม่? คุณลักษณะที่ถูกเพิ่มกลับในเดือนมกราคมดังนั้นจึงไม่ได้อยู่ในเวอร์ชั่น 1.7.x
dakcarto
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.