Próbuję śledzić sekcję renderowania mapy z książki kucharskiej pyqgis, ale chciałbym przetestować to jako samodzielną aplikację. Mogę zrobić pierwszą część, używając prostego renderowania, ale trochę utknąłem, robiąc drugi przykład, używając kompozytora map jako samodzielnego skryptu.
Oto samodzielny przykład fragmentu, który mogę zrobić:
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")
To, co naprawdę chciałbym zrobić, to to samo, ale użyj QgsComposition
i zapisz jak na przykład pdf. Książka kucharska mówi:
Używając kompozytora w samodzielnej aplikacji, możesz utworzyć własną instancję renderera map w taki sam sposób, jak pokazano w powyższej sekcji i przekazać ją do kompozycji.
Tego kawałka nie mogłem zrobić, wszystkie moje próby albo otrzymały pustą mapę, albo segfault. Korzystam z Linuksa mint 13, używając qgis 1.8.0. Byłoby wspaniale, gdyby ktoś mógł mi pokazać, jak zmodyfikować prosty przykład do tego, który używa kompozytora.