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