Estoy tratando de seguir la sección de representación de mapas del libro de cocina pyqgis, pero me gustaría probar esto como una aplicación independiente. Puedo hacer la primera parte, usando renderizado simple, pero estoy un poco atascado haciendo el segundo ejemplo usando el compositor de mapas como un script independiente.
Aquí hay un ejemplo independiente para el bit que puedo hacer:
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")
Lo que realmente me gustaría hacer es lo mismo, pero usar QgsComposition
y guardar como, por ejemplo, pdf. El libro de cocina dice:
Al usar el compositor en una aplicación independiente, puede crear su propia instancia de renderizador de mapas de la misma manera que se muestra en la sección anterior y pasarla a la composición.
Este bit no pude hacerlo, todos mis intentos obtuvieron un mapa vacío o un defecto. Estoy ejecutando linux mint 13, usando qgis 1.8.0. Sería genial si alguien pudiera mostrarme cómo modificar el ejemplo simple a uno que usa el compositor.
2.4
, vea esta respuesta basada en el mismo ejemplo que debería funcionar gis.stackexchange.com/a/223127/36886QgsMapRenderer está en desuso en 2.4 y versiones posteriores, he actualizado la parte en desuso de esta respuesta a algo que debería funcionar de
2.4
a2.18.2
.fuente
layer.getLayerID()
no funciona y debe cambiarse a:layer.id()
Quizás este código sea útil, aunque no es una aplicación independiente:
El mapa se basa en un proyecto QGIS. Puede encontrar un ejemplo completo aquí: http://www.qgis.nl/media/2013/08/composerimage_demo.zip
fuente
QgsComposition
sin llamariface.mapCanvas().mapRenderer()
.