Ich versuche, dem Abschnitt zum Rendern von Karten aus dem Pyqgis-Kochbuch zu folgen , möchte dies jedoch als eigenständige Anwendung testen. Ich kann den ersten Teil mit einfachem Rendering ausführen, aber beim zweiten Beispiel mit dem Map Composer als eigenständigem Skript bin ich etwas festgefahren.
Hier ist ein eigenständiges Beispiel für das, was ich tun kann:
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")
Was ich wirklich gerne machen würde, ist dasselbe, aber benutze QgsComposition
und speichere wie zum Beispiel pdf. Das Kochbuch sagt:
Wenn Sie Composer in einer eigenständigen Anwendung verwenden, können Sie Ihre eigene Map-Renderer-Instanz auf die gleiche Weise wie im obigen Abschnitt gezeigt erstellen und an die Komposition übergeben.
Dieses Bit konnte ich nicht machen, alle meine Versuche bekommen entweder eine leere Karte oder einen Segfault. Ich verwende Linux Mint 13 mit QGIS 1.8.0. Es wäre großartig, wenn mir jemand zeigen könnte, wie man das einfache Beispiel in ein Beispiel ändert, das den Komponisten verwendet.