È possibile fare automaticamente uno “screenshot” della mia funzione selezionata in QGIS usando Python?


11

Sto implementando uno strumento che consente all'utente di creare un profilo di una funzione (nel mio caso pacchi urbani). È possibile fare automaticamente uno screenshot di questa funzione (visualizzata in una finestra di QGIS) e visualizzarla nel profilo PDF?

L'immagine dovrebbe mostrare solo l'estensione della funzione e forse un livello WMS che va oltre la funzionalità. Ci sono già alcuni strumenti che potresti suggerire?


Come posso salvare un JPG invece di un PNG? QgsMapCanvas.saveAsImage (QString theFileName, QPixmap * QPixmap = 0, QString = "PNG") So che posso usare "JPG" come ultimo parametro, ma non so come definire la QPixmap che è esattamente uguale alla mappa reale finestra in qgis. Grazie per l'aiuto. Micha
gismico

Risposte:


10

kopi,

Esistono diversi approcci a una soluzione, ma questo può essere uno dei più semplici (a seconda delle esigenze):

Seleziona la funzione usando QgsVectorLayer

Supponendo un riferimento al livello vettoriale (Vlayer) e all'ID della funzione (fid). Guarda anche

vlayer.select(fid)

Zoom sulla funzione selezionata usando QgsInterface

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

Deseleziona la funzione usando QgsVectorLayer

vlayer.deselect(fid)

Salvare la tela come immagine usando QgsMapCanvas

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

Questo approccio produce una foto quanto più grande possibile, se la finestra viene espansa al massimo, perché il salvataggio della tela è alla risoluzione dello schermo. Tuttavia, non garantisce che le tue foto abbiano la stessa scala di zoom della mappa, ma solo relativamente le stesse dimensioni dei pixel. Esistono altre opzioni come QgisInterface::actionPanToSelected()se è necessario mantenere coerente la scala dello zoom.


Wow. La ringrazio per la risposta! Funziona molto bene!
kopi,

1
dai un'occhiata anche al plug-in "easy print", probabilmente non quello che ti serve, ma può essere utile per l'ispirazione.
Giovanni Manghi,

È possibile impostare la scala prima di fare lo screenshot? E come posso usare "actionPanToSelected"? Sto cercando in questo modo: qgis.utils.iface.actionPanToSelected (caratteristica che la funzione ha per eseguire una panoramica a ...), ma questo restituisce un messaggio di errore: "Attritbute Errore: oggetto QgisInterface ha nessun attributo actionPanToSelected
Kopi

1
Prova qgis.utils.iface.mapCanvas().zoomScale(scale)a impostare la scala della mappa. actionPanToSelected () non accetta un parametro, ma restituisce un riferimento all'azione stessa (come actionZoomToSelected () sopra). Usa il suo slot pubblico qgis.utils.iface.actionPanToSelected().trigger()per lanciare l'azione, che gestirà capire cosa è selezionato.
dakcarto,

1
Hmmm. qgis.utils.iface.actionPanToSelected (). trigger () funziona per me con QGIS versione 1.8.0. Stai utilizzando l'ultima versione stabile (1.8.0)? La funzionalità è stata aggiunta a gennaio , quindi è non nella versione 1.7.x .
dakcarto,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.