J'essaie de suivre la section de rendu de carte du livre de recettes pyqgis, mais j'aimerais tester cela en tant qu'application autonome. Je peux faire la première partie, en utilisant un rendu simple, mais je suis un peu coincé à faire le deuxième exemple en utilisant le compositeur de carte comme script autonome.
Voici un exemple autonome pour le peu que je peux faire:
from qgis.core import *
from qgis.gui import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtXml import *
QgsApplication.setPrefixPath("/usr/", True)
QgsApplication.initQgis()
fh = open("eg.csv","w")
fh.write("""
x,y,name
153.0278, -27.4679, Brisbane
144.2500, -23.4500, Longreach
145.7753, -16.9256, Cairns
""")
fh.close()
uri = "eg.csv?delimiter=%s&xField=%s&yField=%s" % (",", "x", "y")
layer = QgsVectorLayer(uri, "eglayer", "delimitedtext")
QgsMapLayerRegistry.instance().addMapLayer(layer)
img = QImage(QSize(800,600), QImage.Format_ARGB32_Premultiplied)
color = QColor(255,255,255)
img.fill(color.rgb())
p = QPainter()
p.begin(img)
render = QgsMapRenderer()
lst = [ layer.getLayerID() ] # add ID of every layer
render.setLayerSet(lst)
rect = QgsRectangle(render.fullExtent())
rect.scale(1.1)
render.setExtent(rect)
render.setOutputSize(img.size(), img.logicalDpiX())
render.render(p)
p.end()
img.save("render.png","png")
Ce que j'aimerais vraiment faire, c'est la même chose, mais utilisez QgsComposition
et enregistrez comme par exemple pdf. Le livre de cuisine dit:
Lorsque vous utilisez Composer dans une application autonome, vous pouvez créer votre propre instance de rendu de carte de la même manière que celle indiquée dans la section ci-dessus et la transmettre à la composition.
Ce bit, je ne pouvais pas le faire, toutes mes tentatives obtenaient une carte vide ou un défaut de segmentation. J'utilise linux mint 13, en utilisant qgis 1.8.0. Ce serait formidable si quelqu'un pouvait me montrer comment modifier l'exemple simple en un exemple qui utilise le compositeur.