Estou tentando seguir a seção de renderização de mapa do livro de receitas pyqgis, mas gostaria de testar isso como um aplicativo independente. Eu posso fazer a primeira parte, usando renderização simples, mas estou um pouco preso ao fazer o segundo exemplo usando o compositor de mapas como um script independente.
Aqui está um exemplo independente para o bit que posso fazer:
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")
O que eu realmente gostaria de fazer é o mesmo, mas use QgsComposition
e salve como, por exemplo, pdf. O livro de receitas diz:
Ao usar o compositor em um aplicativo independente, você pode criar sua própria instância do renderizador de mapa da mesma maneira mostrada na seção acima e passá-la para a composição.
Este pouco não pude fazer, todas as minhas tentativas obtiveram um mapa vazio ou um segfault. Estou executando o linux mint 13, usando o qgis 1.8.0. Seria ótimo se alguém pudesse me mostrar como modificar o exemplo simples para aquele que usa o compositor.
2.4
e acima, veja esta resposta com base no mesmo exemplo que deve funcionar gis.stackexchange.com/a/223127/36886QgsMapRenderer está obsoleto no 2.4 e acima, atualizei a parte descontinuada desta resposta para algo que deve funcionar de
2.4
para2.18.2
.fonte
layer.getLayerID()
não funciona e deve ser alterado para:layer.id()
Talvez esse código seja útil, embora não seja um aplicativo independente:
O mapa é baseado em um projeto QGIS. Você pode encontrar um exemplo completo aqui: http://www.qgis.nl/media/2013/08/composerimage_demo.zip
fonte
QgsComposition
sem chamariface.mapCanvas().mapRenderer()
.