Ist es möglich, mit Python automatisch einen „Screenshot“ meiner ausgewählten Funktion in QGIS zu erstellen?

11

Ich implementiere ein Tool, mit dem der Benutzer ein Profil eines Features erstellen kann (in meinem Fall städtische Parzellen). Ist es möglich, automatisch einen Screenshot dieser Funktion (angezeigt in einem QGIS-Fenster) zu erstellen und im PDF-Profil anzuzeigen?

Das Bild sollte nur den Umfang des Features und möglicherweise eine WMS-Ebene zeigen, die jenseits des Features liegt. Gibt es bereits einige Tools, die Sie vorschlagen könnten?

kopi
quelle
Wie kann ich ein JPG anstelle eines PNG speichern? QgsMapCanvas.saveAsImage (QString theFileName, QPixmap * QPixmap = 0, QString = "PNG") Ich weiß, dass ich "JPG" als letzten Parameter verwenden kann, aber ich weiß nicht, wie ich die QPixmap definieren soll, die genau der tatsächlichen Karte entspricht Fenster in QGIS. Danke für die Hilfe. Micha
gismic

Antworten:

10

kopi,

Es gibt verschiedene Lösungsansätze, aber dies kann einer der einfachsten sein (abhängig von Ihren Anforderungen):

Wählen Sie die Funktion mit QgsVectorLayer aus

Angenommen, Sie verweisen auf Ihre Vektorebene (vlayer) und die ID des Features (fid). Siehe auch

vlayer.select(fid)

Zoomen Sie mit QgsInterface auf die ausgewählte Funktion

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

Deaktivieren Sie die Funktion mit QgsVectorLayer

vlayer.deselect(fid)

Speichern Sie die Leinwand mit QgsMapCanvas als Bild

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

Dieser Ansatz erzeugt ein möglichst großes Foto, wenn Ihr Fenster vollständig erweitert wird, da das Speichern der Leinwand in Bildschirmauflösung erfolgt. Es wird jedoch nicht sichergestellt, dass Ihre Bilder dieselbe Kartenzoom-Skala haben, sondern nur relativ dieselbe Pixelgröße. Es gibt andere Optionen, z. B. QgisInterface::actionPanToSelected()wenn Sie die Zoomskala konsistent halten müssen.

Dakcarto
quelle
Beeindruckend. Vielen Dank für Ihre Antwort! Das funktioniert sehr gut!
Kopi
1
Schauen Sie sich auch das Plugin "Easy Print" an, wahrscheinlich nicht das, was Sie brauchen, aber es kann nützlich sein, um sich inspirieren zu lassen.
Giovanni Manghi
Ist es möglich, den Maßstab vor dem Screenshot einzustellen? Und wie kann ich "actionPanToSelected" verwenden? Ich versuche es folgendermaßen: qgis.utils.iface.actionPanToSelected (Funktion, auf die die Funktion schwenken muss ...), aber dies gibt eine Fehlermeldung zurück: "Attritbute-Fehler: QgisInterface-Objekt hat kein Attribut actionPanToSelected
kopi
1
Versuchen Sie qgis.utils.iface.mapCanvas().zoomScale(scale), den Kartenmaßstab einzustellen. actionPanToSelected () akzeptiert keinen Parameter, gibt jedoch einen Verweis auf die Aktion selbst zurück (wie oben actionZoomToSelected ()). Verwenden Sie den öffentlichen Slot qgis.utils.iface.actionPanToSelected().trigger(), um die Aktion auszulösen, mit der Sie herausfinden können, was ausgewählt wurde.
Dakcarto
1
Hmmm. qgis.utils.iface.actionPanToSelected (). trigger () funktioniert für mich unter QGIS Version 1.8.0. Verwenden Sie die neueste stabile Version (1.8.0)? Die Funktion wurde bereits im Januar hinzugefügt und ist daher nicht in Version 1.7.x enthalten .
Dakcarto