AZIONI PREDEFINITE
In QGIS è possibile definire delle AZIONI che permettono di ottenere dei risultati a video, apertura file, documenti, immagini, pagine web e far eseguire dei piccoli codici python in funzione degli attributi del vettore; nelle ultime versioni di QGIS è stata introdotta una azione particolare ‘imposta come geometria atlante‘, vediamo di cosa si tratta.
Come per tutte le altre azioni, l’icona si attiverà se il layer selezionato è caratterizzato da azioni o, come nel caso in esame, se è stato utilizzato come ‘vettore di copertura’ dell’atlante.
L’azione può essere avviata in tre modalità differenti:
- attraverso l’icona (vedi screenshot di sopra);
- attraverso la tabella degli attributi del layer;
- attraverso il pannello informazioni;
qualunque sia la modalità con cui si avvia l’azione, si aprirà il relativo atlante in corrispondenza della geometria o record selezionato.
Questa azione è molto utile in quanto ci permette di selezionare, velocemente (con un semplice clic), una pagina dell’atlante direttamente dalla map canvas; risulta particolarmente efficiente quando l’atlante è caratterizzato da molte pagine.
E’ possibile generare più atlanti sia con lo stesso layer che con layer differenti; uno stesso layer può essere usato come vettore di copertura di più atlanti, in questo caso si avranno più azioni collegate allo stesso vettore, azioni che si distingueranno attraverso il nome dell’atlante stesso.
Video dimostrativo
Ciao Salvatore, bellissima questa funzione; un dubbio peró: come si realizza in pratica? nell’elenco dei tipi di azioni vedo “aprire”, ma ci vuole una script a parte?
"Mi piace"Piace a 1 persona
Questa tipologia di azione su gli atlas si genera da sola dopo aver definito l’atlante.
"Mi piace""Mi piace"
Ciao Salvatore,
a parere tuo, sarebbe possibile creare un’azione diretta che permetta dal progetto di esportare direttamente il file pdf relativo a quell’atlante?
"Mi piace""Mi piace"
Se non erro, puoi farlo da strumenti di processing.
Poi, con una azione sì, è possibile fare quasi tutto (usando un po’ di codice)
"Mi piace""Mi piace"
Ciao Salvatore, ti ringrazio per i tuoi preziosi spunti.
Condivido qui la soluzione che ho trovato tramite azione per effettuare l’estrazione in pdf affinché possa servire a qualcuno.
projectInstance = QgsProject.instance()
basePath = QgsProject.instance().absolutePath()
layoutmanager = projectInstance.layoutManager()
layout = layoutmanager.layoutByName(“#nome atlante”)
layout.atlas().seekTo([% $id %])
exporter = QgsLayoutExporter(layout)
exporter.exportToPdf(basePath + “\\” +layout.atlas().currentFilename()+”.pdf”, QgsLayoutExporter.PdfExportSettings() )
Buona giornata!
"Mi piace"Piace a 1 persona
Ciao e grazie Marco,
puoi aggiungere qualche altro dettaglio sull’azione?
"Mi piace""Mi piace"
Si certo!
In sostanza stavo cercando un’azione da implementare in QGIS che mi permettesse di generare direttamente un file pdf associato all’elemento interrogato del layer di copertura su un atlante precedentemente impostato (simile a “Imposta come Elemento di Atlante”, ma con step ulteriore di creazione automatica di file pdf).
Eseguendo questa azione si genera in automatico nella cartella del progetto un file pdf con la scheda relativa a quell’elemento.
C’è solo una ulteriore cosa che sto cercando di risolvere: l’azione funziona solo se prima è stato avviato almento una volta l’atlante tramite il pulsante “anteprima” in alto e vorrei riuscire a bypassare anche questo step.
Spero di essere stato chiaro e spero che questo post possa essere uno spunto per ulteriori sviluppi!
"Mi piace"Piace a 1 persona
Chiarissimo, grazie
"Mi piace""Mi piace"
Ciao Salvatore,
trovato come precaricare l’atlas.
projectInstance = QgsProject.instance()
basePath = QgsProject.instance().absolutePath()
layoutmanager = projectInstance.layoutManager()
layout = layoutmanager.layoutByName(“#nome atlante”)
layout.atlas().beginRender()
layout.atlas().seekTo([% $id %])
exporter = QgsLayoutExporter(layout)
exporter.exportToPdf(basePath + “\\” +layout.atlas().currentFilename()+”.pdf”, QgsLayoutExporter.PdfExportSettings() )
A presto!
"Mi piace"Piace a 1 persona
Grazie Marco
"Mi piace""Mi piace"