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.
2.4
und darüber veraltet. Diese Antwort basiert auf demselben Beispiel, das funktionieren sollte. Gis.stackexchange.com/a/223127/36886QgsMapRenderer wird in 2.4 als veraltet und oben habe ich den veralteten Teil von aktualisiert diese Antwort auf etwas , das von der Arbeit sollte
2.4
zu2.18.2
.quelle
layer.getLayerID()
funktioniert nicht und muss geändert werden zu:layer.id()
Vielleicht ist dieser Code hilfreich, obwohl es sich nicht um eine eigenständige Anwendung handelt:
Die Karte basiert auf einem QGIS-Projekt. Ein vollständiges Beispiel finden Sie hier: http://www.qgis.nl/media/2013/08/composerimage_demo.zip
quelle
QgsComposition
ohne es aufzurufeniface.mapCanvas().mapRenderer()
.