==== Tutoriel "QGIS map renderer" ====
**Objectif** : comprendre le "portrayal model" {{:ogo13:portrayalogc.png?linkonly|}} par l'utilisation du **moteur de rendu cartographique** de **QGIS3** avec sa console Python et les classes [[https://qgis.org/pyqgis/master/core/Map/QgsMapRendererSequentialJob.html|QgsMapRendererSequentialJob]] et [[https://qgis.org/pyqgis/master/core/Map/QgsMapSettings.html|QgsMapSettings]].
{{:ogo13:portrayalogc.png?direct&400|}}
Pour les utilisateur de **QGIS2**, voici le tutoriel [[geoinf15:qgsmaprenderer|QgsMapRenderer 2015]].
=== Prérequis pour ce tutoriel sur QGIS3 ===
* les données //g4districts98// disponible dans le dossier https://drive.switch.ch/index.php/s/jHcUvhFSRwEneES
=== Découverte du "map renderer" ===
* pour une couche chargée et sélectionnée dans la table des couches, ouvrir la console Python :
# we work with the selected layer
layer = iface.activeLayer()
# we want to know the current map settings
canvas = iface.mapCanvas()
mapset = canvas.mapSettings()
# we display the mandatory settings to build a map
print(mapset.layerIds())
print(mapset.extent().asWktPolygon())
print(mapset.outputSize())
=== Contrôle du "map renderer" ===
* pour prendre le contrôle et exporter dans un fichier image le résultat du rendu cartographique, on ajoute :
# set layer(s)
mapset.setLayers([layer])
# set extent
mapset.setExtent(QgsRectangle(530000,180000,550000,200000)) # close to Yverdon
# set output size
mapset.setOutputSize(QSize(800,800))
# even more, set background color
mapset.setBackgroundColor(QColor(0,0,0,0))
job = QgsMapRendererSequentialJob(mapset)
job.start()
job.waitForFinished()
img = job.renderedImage()
img.save('/home/olivier/tmp/render.png', 'png') # adapt the path properly
{{:geoinf18:render.png?nolink&200|}}