Suite

Problème d'étendue dans PyQgis

Problème d'étendue dans PyQgis


J'essaie de définir l'étendue d'une entité carrée sur le canevas, cela fonctionne dans QGIS, mais lorsque j'imprime le canevas dans un PDF, cela me donne toujours une zone vide, ci-dessous se trouve la capture d'écran du canevas QGIS ayant une étendue d'entité :

et ci-dessous est le PDF résultant ayant des espaces vides :

le code pyqgis utilisé pour obtenir ces résultats :

de qgis.core import * mr=iface.mapCanvas().mapRenderer() composition = QgsComposition(mr) composition.setPaperSize(220, 220) composerMap=QgsComposerMap(composition,0,0,composition.paperWidth(),composition.paperHeight ()) composition.addItem(composerMap) layer = QgsVectorLayer('Polygon?crs=EPSG:4326', 'poly' , "memory") pr = layer.dataProvider() poly = QgsFeature() poly.setGeometry(QgsGeometry.fromWkt ("POLYGONE((0 0, 0 1, 1 1, 1 0, 0 0))")) pr.addFeatures([poly]) layer.updateExtents() QgsMapLayerRegistry.instance().addMapLayers([layer]) bb = poly.geometry().boundingBox() iface.mapCanvas().setExtent(bb) iface.mapCanvas().refresh() composition.refreshItems() composition.exportAsPDF('test.pdf')

Le code suivant devrait fonctionner :

depuis qgis.core import * # créer une couche en mémoire et l'ajouter à la couche du projet QGIS = QgsVectorLayer('Polygon?crs=EPSG:4326', 'poly' , "memory") pr = layer.dataProvider() poly = QgsFeature() poly.setGeometry(QgsGeometry.fromWkt("POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))")) pr.addFeatures([poly]) layer.updateExtents() QgsMapLayerRegistry. instance().addMapLayers([layer]) # définir l'étendue du canevas de la carte bb = poly.geometry().boundingBox() iface.mapCanvas().setExtent(bb) mr = iface.mapCanvas().mapRenderer() composition = QgsComposition (mr) composition.setPaperSize(220, 220) composition.setPlotStyle(QgsComposition.Print) composerMap = QgsComposerMap( composition, 0, 0, composition.paperWidth(), composition.paperHeight() ) composerMap.zoomToExtent(bb) composition.addItem (composerMap) composition.exportAsPDF('test.pdf')

Il y a 2 différences principales :

  1. Dans votre code, la couche n'était pas incluse dans le compositeur de carte. Une façon de résoudre ce problème consiste à créer la couche avant de créer le compositeur de carte. Évidemment, vous pourriez gérer cette partie d'une manière ou d'une autre, sinon vous n'auriez rien dans votre PDF.

  2. Vous devez définir l'étendue de la carte du composeur manuellement pour ajuster le rectangle aveccomposerMap.zoomToExtent(bb).

Le PDF résultant est le suivant :


Voir la vidéo: QGIS Python PyQGIS - Show Error, Warning, and Success Messages