[QGIS-it-user] pyqgis 3: stampa pdf di piu pagine con mappe centrate sui singoli punti del layer evidenziati.
SC
elyparker1 a gmail.com
Gio 18 Lug 2019 11:32:20 PDT
no ,mi sembra un po poco elegante si perde in portatilità e in
modularità ,certo messi alle strette si può fare in quel modo
però mi sembra strano che non ci sia una soluzione a livello di api
Il 18/07/2019 20:13, Alessandro Perego ha scritto:
>
> 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/>
>
> _______________________________________________
> QGIS-it-user mailing list
> QGIS-it-user a lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/qgis-it-user
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.osgeo.org/pipermail/qgis-it-user/attachments/20190718/d540e8d8/attachment.html>
Maggiori informazioni sulla lista
QGIS-it-user