[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