VectorMapRenderer

class 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)