[QGIS-it-user] pyqgis 3: stampa pdf di piu pagine con mappe centrate sui singoli punti del layer evidenziati.

Alessandro Perego alsper78 a gmail.com
Gio 18 Lug 2019 11:13:02 PDT


Io metterei sia l'export in pdf che la rimozione selezione all'interno 
della funzione pagina(c,o). Ovviamente così si crea un file pdf per ogni 
record, quindi poi serve un programma esterno per unirli tutti in un 
unico pdf (o magari si può fare anche con python ma non saprei come).


Il 18/07/2019 17:36, SC ha scritto:
>
> salve, vediamo se qualcuno mi può aiutare visto che non sono riuscito 
> a trovare molta documentazione in proposito
>
> ho scritto uno script che forse potrebbe anche essere utile a 
> qualcuno  se non altro a chi si accinge a programmare in qgis 3
>
> dato un layer vettoriale , per ogni record del layer stampa una pagina 
> in un pdf, le pagine di questo pdf saranno dunque costituite da una 
> scritta con  l'id del record e dalla rappresentazione mappale dello 
> stesso.
>
> il record sarà centrato nella mappa.
>
> per evidenziare il record (feature) nelle proprietà dei simboli del 
> layers i può fissare la regola di cambiamento simbolo con la funzione 
> 'is_selected', in questo modo il simbolo centrale apparirà diverso .
>
> QUI nasce il problema che non sono riuscito a risolvere, infatti se 
> provate lo script con un layer con molti punti vi accorgerete che ci 
> saranno mappa che presentano piu punti "selezionati"
>
> in pratica il simbolo e la mappa stessa viene renderizzato  al momento 
> della creazione del pdf  per cui se metto la rimozione della selezione 
> all'interno della funzione che crea la pagina non mi cambierà il 
> simbolo nella mappa. mentre  se come ora metto l'istruzione di 
> rimozione  selezione dopo l'export , ovviamente avrò più punti 
> selezionati contemporaneamente.
>
>
> quindi sperando che sia qualcuno che mi voglia/possa aiutare le 
> domande sono:
>
>  1. esiste un API che mi permette on the fly di  cambiare un singolo
>     punto  in una mappa da stampare?
>  2. qualora la risposta sia negativa alla prima domanda, c'è un modo
>     per renderizzare (intendo dire fissare l'immagine in
>     quell'istante) la mappa dell'oggetto quando creo creo la pagina e
>     il simbolo è selezionato/cambiato (con il trucco della regola)?
>
> saluti
>
> segue script:
>
> #esempio di stampa mappa dei singoli features del  livello vettoriale 
> attivo  in un singolo pdf  con QGIS 3, by SC
> #se dalle proprieta del layer  qgis viene impostato un simbolo 
> distinto associato alla funzione 'is_selected()' il l'oggetto centrale 
> nella mappa pdf finale sarà con quel simbolo
> import os
>
> p=QgsProject().instance()
> layout = QgsPrintLayout(p)
>
> def pagina(c,o):
>     page=QgsLayoutItemPage(c)
>     page.setPageSize("A4", QgsLayoutItemPage.Orientation.Portrait )
>     c.pageCollection().addPage(page)
>
>
>     label = QgsLayoutItemLabel(c)
>     label.setText("mappa dell'oggetto " + str(o.id()))
>     label.adjustSizeToText()
>     label.attemptMove(QgsLayoutPoint(20,20),page=c.ZPage)
>     label.setFrameEnabled(True)
>     c.addLayoutItem(label)
>     print (c.ZPage)
>
>     #seleziona la feature per evidenziarla se sono fissate le regole
>     livello.select(o.id())
>
>     mappa=QgsLayoutItemMap(c)
>     mappa.setFrameEnabled(True)
>
>     mappa.attemptResize(QgsLayoutSize(100, 100))
>     mappa.attemptMove(QgsLayoutPoint(20,50),page=c.ZPage)
>     mappa.setFrameEnabled(True)
>     aream=QgsRectangle()
> areaoggetto=aream.fromCenterAndSize(o.geometry().centroid().asPoint(),50,50)
>     areaoggetto.scale(1)
>     mappa.setExtent(areaoggetto)
>     c.addLayoutItem(mappa)
>
>     #incrementare il ZPage ci permette di usarlo compe parametro page 
> negli attemptmove
>     c.ZPage=c.ZPage+1
>
>
> livello = iface.activeLayer()
> features = livello.getFeatures()
>
> for feature in features:
>     pagina(layout,feature)
>
>
> pdf_path = os.path.join(QgsProject.instance().homePath(), "output.pdf")
> exporter = QgsLayoutExporter(layout)
> exporter.exportToPdf(pdf_path, QgsLayoutExporter.PdfExportSettings())
> livello.removeSelection()
>
> #apre il pdf con l'applicazione associata su windows
> os.startfile(pdf_path)
>
>
>
> _______________________________________________
> QGIS-it-user mailing list
> QGIS-it-user a lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/qgis-it-user
-- 
Alessandro Perego www.alspergis.altervista.org 
<http://www.alspergis.altervista.org/>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.osgeo.org/pipermail/qgis-it-user/attachments/20190718/fc035cb9/attachment-0001.html>


Maggiori informazioni sulla lista QGIS-it-user