Scusate, ma usare l’atlante?



> Il giorno 18 lug 2019, alle ore 20:32, SC <elypark...@gmail.com> ha scritto:
> 
> 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:
>>> 
>>> 
>>> esiste un API che mi permette on the fly di  cambiare un singolo punto  in 
>>> una mappa da stampare?
>>> 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@lists.osgeo.org
>>> https://lists.osgeo.org/mailman/listinfo/qgis-it-user
>> -- 
>> Alessandro Perego www.alspergis.altervista.org
>> 
>> 
>> _______________________________________________
>> QGIS-it-user mailing list
>> QGIS-it-user@lists.osgeo.org
>> https://lists.osgeo.org/mailman/listinfo/qgis-it-user
> 
> _______________________________________________
> QGIS-it-user mailing list
> QGIS-it-user@lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/qgis-it-user
_______________________________________________
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user

Rispondere a