Я пытаюсь следовать разделу рендеринга карты из кулинарной книги Pyqgis, но я хотел бы проверить это как отдельное приложение. Я могу сделать первую часть, используя простой рендеринг, но я немного застрял, делая второй пример, используя компоновщик карт в качестве автономного скрипта.
Вот отдельный пример того, что я могу сделать:
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")
То, что я действительно хотел бы сделать, это то же самое, но использовать QgsComposition
, и сохранить, как, например, PDF. Поваренная книга говорит:
При использовании composer в автономном приложении вы можете создать свой собственный экземпляр средства визуализации карты так же, как показано в разделе выше, и передать его в композицию.
Этот бит я не смог сделать, все мои попытки либо получить пустую карту, либо segfault. Я использую Linux Mint 13, используя qgis 1.8.0. Было бы здорово, если бы кто-нибудь показал мне, как изменить простой пример на тот, который использует композитор.
2.4
и выше, увидеть этот ответ , основанный на том же примере , который должен работать gis.stackexchange.com/a/223127/36886QgsMapRenderer осуждается в 2.4 и выше, я обновил Устаревшую часть из этого ответа на то , что должно работать от
2.4
до2.18.2
.источник
layer.getLayerID()
не работает и должен быть изменен на:layer.id()
Может быть, этот код полезен, хотя это не отдельное приложение:
Карта основана на проекте QGIS. Вы можете найти полный пример здесь: http://www.qgis.nl/media/2013/08/composerimage_demo.zip
источник
QgsComposition
без вызоваiface.mapCanvas().mapRenderer()
.