"The explosive growth of the GeoWeb and geographic information has made GIS powerful media for the general public to communicate, but perhaps more importantly, GIS have also become media for constructive dialogs and interactions about social issues." - Sui & Goodchild
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
geoinf18:qgsmaprendererjob [2018/11/13 17:33] oertz created |
geoinf18:qgsmaprendererjob [2018/11/13 18:04] (current) oertz |
||
---|---|---|---|
Line 1: | Line 1: | ||
==== Tutoriel "QGIS map renderer" ==== | ==== Tutoriel "QGIS map renderer" ==== | ||
- | Objectif : comprendre le "portrayal model" {{:ogo13:portrayalogc.png?linkonly|}} par l'utilisation du **moteur de rendu cartographique** de QGIS3 avec [[https://qgis.org/pyqgis/master/core/Map/QgsMapRendererSequentialJob.html|QgsMapRendererSequentialJob]] et [[https://qgis.org/pyqgis/master/core/Map/QgsMapSettings.html|QgsMapSettings]] | + | **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]]. |
- | Remarque : pour les utilisateur de QGIS2, voici le tutoriel [[geoinf15:qgsmaprenderer|QgsMapRenderer 2015]]. | + | {{: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 : | ||
+ | |||
+ | <code> | ||
+ | # 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()) | ||
+ | </code> | ||
+ | |||
+ | === Contrôle du "map renderer" === | ||
+ | |||
+ | * pour prendre le contrôle et exporter dans un fichier image le résultat du rendu cartographique, on ajoute : | ||
+ | |||
+ | <code> | ||
+ | # 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 | ||
+ | </code> | ||
+ | |||
+ | {{:geoinf18:render.png?nolink&200|}} | ||