axioma.render.
VectorMapRenderer
¶Класс для многопоточного рисования карты в векторном формате.
Унаследован от: ReverseVisibleLayerVisitor
VectorMapRenderer
()¶Конструктор
blockingRender
(map, context)¶Синхронное рисование карты. Растровые слои при отрисовке игнорируются.
Параметры:
- map (
Map
) – Карта, которая должна быть отрисована- context (
MapContext
) – Контекст, в котором будет отрисована карта
Примечание
При отрисовке площадных объектов с заливкой в виде растровой текстуры, заливка игнорируется.
Пример отрисовка в SVG:
def createLayer(name): table = axioma.core.open_json({'src': name}) return render.createLayerForDataObject(table) try: layerWorld = createLayer('world.tab') layerWorldcap = createLayer('worldcap.tab') layerRail = createLayer('railway.tab') br = layerWorld.boundingRect() # rect слоя sceneRect = QRectF(br.left(), br.top(), br.width(), br.height()) size = QSize(1000, 1000*br.height()/br.width()) imRect = QRect(0, 0, size.width(), size.height()) map = Map() # временная карта # добавляем слои в карту map.rootLayerGroup().append(layerRail) map.rootLayerGroup().append(layerWorldcap) map.rootLayerGroup().append(layerWorld) viewport = MapViewport(QRectF(imRect), sceneRect, layerWorld.coordSystem()) # Вывод в svg generator = QSvgGenerator() generator.setFileName('out_vector.svg') generator.setSize(size); generator.setViewBox(QRect(QPoint(0, 0) , size)); painter_svg = QPainter() painter_svg.begin(generator) context_svg = MapContext(painter_svg, viewport) # контекст, куда рисуем vectorRenderer = VectorMapRenderer() vectorRenderer.render(map, context_svg) # отрисовка карты #layerWorld.renderVector(context_svg) # Отрисовка слоя (не создавая renderer) painter_svg.end() except Exception as ex: print(ex)