<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-15">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <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>
  </body>
</html>