Est-il possible de prendre automatiquement une «capture d'écran» de la fonctionnalité sélectionnée dans QGIS en utilisant Python?

11

J'implémente un outil qui permet à l'utilisateur de créer le profil d'une entité (dans mon cas parcelles urbaines). Est-il possible de prendre automatiquement une capture d'écran de cette fonctionnalité (affichée dans une fenêtre QGIS) et de l'afficher dans le profil PDF?

L'image ne doit montrer que l'étendue de la fonctionnalité et peut-être une couche WMS qui se trouve au-delà de la fonctionnalité. Y a-t-il déjà des outils que vous pourriez suggérer?

kopi
la source
Comment puis-je enregistrer un JPG au lieu d'un PNG? QgsMapCanvas.saveAsImage (QString theFileName, QPixmap * QPixmap = 0, QString = "PNG") Je sais que je peux utiliser "JPG" comme dernier paramètre, mais je ne sais pas comment définir le QPixmap qui est exactement le même que la carte réelle fenêtre en qgis. Merci pour l'aide. Micha
gismique

Réponses:

10

kopi,

Il existe plusieurs approches pour une solution, mais celle-ci peut être l'une des plus simples (selon vos besoins):

Sélectionnez la fonctionnalité à l'aide de QgsVectorLayer

En supposant une référence à votre couche vectorielle (vlayer) et à l'identifiant de l'entité (fid). Voir également

vlayer.select(fid)

Zoom sur l' entité sélectionnée à l'aide de QgsInterface

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

Désélectionner la fonction à l'aide de QgsVectorLayer

vlayer.deselect(fid)

Enregistrer le canevas en tant qu'image à l' aide de QgsMapCanvas

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

Cette approche produit une photo aussi grande que possible, si votre fenêtre est agrandie au maximum, car l'enregistrement de la toile est à la résolution d'écran. Cependant, cela ne garantit pas que vos photos seront à la même échelle de zoom de la carte, mais relativement à la même taille de pixels. Il existe d'autres options, par exemple QgisInterface::actionPanToSelected()si vous devez conserver une échelle de zoom cohérente.

dakcarto
la source
Sensationnel. Merci pour votre réponse! Cela fonctionne très bien!
kopi
1
jetez également un œil au plugin "easy print", probablement pas ce dont vous avez besoin, mais il peut être utile pour l'inspiration.
Giovanni Manghi
Est-il possible de régler l'échelle avant de prendre la capture d'écran? Et comment puis-je utiliser "actionPanToSelected"? Je l'essaye de cette façon: qgis.utils.iface.actionPanToSelected (fonctionnalité à laquelle la fonction doit effectuer un panoramique ...), mais cela renvoie un message d'erreur: "Erreur Attritbute: l'objet QgisInterface n'a pas d'attribut actionPanToSelected
kopi
1
Essayez qgis.utils.iface.mapCanvas().zoomScale(scale)de définir l'échelle de la carte. actionPanToSelected () ne prend pas de paramètre, mais renvoie une référence à l'action elle-même (comme actionZoomToSelected () ci-dessus). Utilisez son emplacement public qgis.utils.iface.actionPanToSelected().trigger()pour déclencher l'action, qui gérera la détermination de ce qui est sélectionné.
dakcarto
1
Hmmm. qgis.utils.iface.actionPanToSelected (). trigger () fonctionne pour moi sous QGIS version 1.8.0. Utilisez-vous la dernière version stable (1.8.0)? La fonctionnalité a été ajoutée en Janvier , il est donc pas dans la version 1.7.x .
dakcarto