<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-15">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p>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).</p>
<p><br>
</p>
<div class="moz-cite-prefix">Il 18/07/2019 17:36, SC ha scritto:<br>
</div>
<blockquote type="cite"
cite="mid:55466f1b-b3e9-c143-23e1-d3a2995f904a@gmail.com">
<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-15">
<p>salve, vediamo se qualcuno mi può aiutare visto che non sono
riuscito a trovare molta documentazione in proposito</p>
<p>ho scritto uno script che forse potrebbe anche essere utile a
qualcuno se non altro a chi si accinge a programmare in qgis 3</p>
<p>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.</p>
<p>il record sarà centrato nella mappa.</p>
<p>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 .</p>
<p>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"<br>
</p>
<p>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.</p>
<p><br>
</p>
<p>quindi sperando che sia qualcuno che mi voglia/possa aiutare le
domande sono:<br>
<br>
</p>
<ol>
<li>esiste un API che mi permette on the fly di cambiare un
singolo punto in una mappa da stampare?</li>
<li>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)?</li>
</ol>
<p>saluti<br>
</p>
<p>segue script:<br>
</p>
<p>#esempio di stampa mappa dei singoli features del livello
vettoriale attivo in un singolo pdf con QGIS 3, by SC<br>
#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<br>
import os<br>
<br>
p=QgsProject().instance()<br>
layout = QgsPrintLayout(p)<br>
<br>
def pagina(c,o):<br>
page=QgsLayoutItemPage(c)<br>
page.setPageSize("A4",
QgsLayoutItemPage.Orientation.Portrait )<br>
c.pageCollection().addPage(page)<br>
<br>
<br>
label = QgsLayoutItemLabel(c)<br>
label.setText("mappa dell'oggetto " + str(o.id()))<br>
label.adjustSizeToText()<br>
label.attemptMove(QgsLayoutPoint(20,20),page=c.ZPage)<br>
label.setFrameEnabled(True)<br>
c.addLayoutItem(label)<br>
print (c.ZPage)<br>
<br>
#seleziona la feature per evidenziarla se sono fissate le
regole<br>
livello.select(o.id())<br>
<br>
mappa=QgsLayoutItemMap(c)<br>
mappa.setFrameEnabled(True)<br>
<br>
mappa.attemptResize(QgsLayoutSize(100, 100))<br>
mappa.attemptMove(QgsLayoutPoint(20,50),page=c.ZPage)<br>
mappa.setFrameEnabled(True)<br>
aream=QgsRectangle()<br>
areaoggetto=aream.fromCenterAndSize(o.geometry().centroid().asPoint(),50,50)<br>
areaoggetto.scale(1)<br>
mappa.setExtent(areaoggetto)<br>
c.addLayoutItem(mappa)<br>
<br>
#incrementare il ZPage ci permette di usarlo compe parametro
page negli attemptmove<br>
c.ZPage=c.ZPage+1<br>
<br>
<br>
livello = iface.activeLayer()<br>
features = livello.getFeatures()<br>
<br>
for feature in features:<br>
pagina(layout,feature)<br>
<br>
<br>
pdf_path = os.path.join(QgsProject.instance().homePath(),
"output.pdf")<br>
exporter = QgsLayoutExporter(layout)<br>
exporter.exportToPdf(pdf_path,
QgsLayoutExporter.PdfExportSettings())<br>
livello.removeSelection()<br>
<br>
#apre il pdf con l'applicazione associata su windows<br>
os.startfile(pdf_path)<br>
</p>
<p><br>
</p>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
QGIS-it-user mailing list
<a class="moz-txt-link-abbreviated" href="mailto:QGIS-it-user@lists.osgeo.org">QGIS-it-user@lists.osgeo.org</a>
<a class="moz-txt-link-freetext" href="https://lists.osgeo.org/mailman/listinfo/qgis-it-user">https://lists.osgeo.org/mailman/listinfo/qgis-it-user</a>
</pre>
</blockquote>
<div class="moz-signature">-- <br>
Alessandro Perego
<a href="http://www.alspergis.altervista.org/">www.alspergis.altervista.org</a></div>
</body>
</html>