Me gustaría usar independiente appliction a aplicar .qml
a un estilo de capa y utilizar QgsMapRenderer()
para guardarlo como imagen en un disco duro. Son un montón de preguntas como la mía en este sitio y parece que la mayoría de los problemas que surgen de ajustes por QgsApplication()
. Por desgracia parece que yo no era capaz de instalación QgsApplication()
de una manera correcta. Mi código es bastante estándar, código de representación de PyQGIS libro de cocina que se utiliza como una plantilla en otras cuestiones como la mía. Se produce transparente .png inage con la capa no prestados. A pesar de que este código funciona (sin inicialización de QgsApplication()
) si lo corrió línea por línea, en QGIS consola (QGIS 2.4).
Así que he siguientes QgsApplication()
valores (Alt Linux).
Application state:
QGIS_PREFIX_PATH env var:
Prefix: /usr
Plugin Path: /usr/lib64/qgis
Package Data Path: /usr/share/qgis
Active Theme Name:
Active Theme Path: :/images/themes//
Default Theme Path: :/images/themes/default/
SVG Search Paths: /usr/share/qgis/svg/
User DB Path: /usr/share/qgis/resources/qgis.db
El código en sí:
from qgis.core import *
from qgis.utils import *
from qgis.gui import *
from PyQt4.QtCore import QSize
from PyQt4.QtGui import QPainter, QImage, QColor
QgsApplication.setPrefixPath('/usr', True)
QgsApplication.initQgis()
print QgsApplication.showSettings()
lyr = QgsVectorLayer('test.shp', 'points', 'ogr')
lyr_id = lyr.id()
QgsMapLayerRegistry.instance().addMapLayer(lyr)
lyr.loadNamedStyle( 'test.qml')
# create image
img = QImage(QSize(800, 600), QImage.Format_ARGB32_Premultiplied)
# set image's background color
# color = QColor(255, 255, 255)
# img.fill(color.rgb())
# create painter
p = QPainter()
p.begin(img)
p.setRenderHint(QPainter.Antialiasing)
layers = QgsMapLayerRegistry.instance().mapLayers()
lst = layers.keys()
print 'lst', lst
renderer = QgsMapRenderer()
renderer.setLayerSet(lst)
extent = renderer.fullExtent()
rect = QgsRectangle(extent)
# print rect.toString()
rect.scale(1.1)
renderer.setExtent(rect)
# set output size
renderer.setOutputSize(img.size(), img.logicalDpiX())
# do the rendering
renderer.render(p)
p.end()
# save image
img.save('test.png', 'png')
QgsApplication.exitQgis()