Страница 1 из 1

PyQGIS: не полностью отрисовывается символика из файла стиля

Добавлено: 10 май 2016, 14:54
SS_Rebelious
Пытаюсь реализовать рендериг слоя с заданным стилем в файл в standalone модуле на питоне. Однако символика не полностью рендерится.

В некоторых случаях,а конкретно - при рендеринге полигона с заливкой цветом и паттерном, и обводкой из svg-маркеров рендерится только заливка цветом, а паттерн и обводка не рендерятся. При этом
в консоли появляется следующая ошибка (в момент вызова метода "QgsMapRenderer().render()" - строка "renderer.render(p)" в коде):

Код: Выделить всё

QPainter::begin: Paint device returned engine == 0, type: 3
Причём это сообщение появляется столько раз, сколько слоёв символики не было отрендерено (ну или мне так поеказалось).

При этом сам QGIS рендерит слой с тем же файлом стиля абсолютно корректно. Версия QGIS 2.14.
В чём может быть проблема? Тестовые файлы прилагаются.

Сам код такой:

Код: Выделить всё

from qgis.core import *
from PyQt4.QtCore import QSize
from PyQt4.QtGui import QPainter, QImage, QColor

qgisApp = QgsApplication([], False)
QgsApplication.setPrefixPath('/usr', True)
QgsApplication.initQgis()
print QgsApplication.showSettings()


lyr = QgsVectorLayer('bbox.shp', 'bbox', 'ogr')
lyr_id = lyr.id()
QgsMapLayerRegistry.instance().addMapLayer(lyr)
lyr.loadNamedStyle( 'bbox.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()