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

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

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

Сообщение SS_Rebelious » 10 май 2016, 14:54

Пытаюсь реализовать рендериг слоя с заданным стилем в файл в 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()
Вложения
test_files.zip
тестовые слой и файл стиля
(13.87 КБ) 404 скачивания
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 17 гостей