Легенда
Для вывода условных обозначений используется легенда. Легенда – таблица, содержащая образцы условных обозначений и письменных пояснений к ним. В ГИС Аксиома легенды карт представляются в отдельных окнах. Попробуем отрисовать в растре ранее созданные слой и тематику по интервалам. Заметим, что легенду также можно отрисовать на одном растре вместе с картой.
from PySide2.QtCore import Qt
from PySide2.QtGui import QImage, QPainter
from axipy import Legend, Context
legend_world = Legend(lay_world)
legend_world.position = (10, 10)
legend_thematic = Legend(thematic)
legend_thematic.position = (200, 10)
image = QImage(500, 200, QImage.Format_ARGB32_Premultiplied)
image.fill(Qt.white)
painter_legend = QPainter(image)
context_legend = Context(painter_legend)
legend_world.draw(context_legend)
legend_thematic.draw(context_legend)
Создадим легенду, на этот раз сразу переведя в
PySide2.QtGui.QImage
, и скомпонуем с тематическим слоем,
полученным ранее:
from axipy.render import Legend
legend_thematic = Legend(thematic)
legend_thematic.position = (10, 5)
legend_image = legend_thematic.to_image(200, 170)
Доступ к элементам легенды производится через свойство axipy.Legend.items
.
for it in legend_thematic.items:
print(it.title, it.visible, it.style.to_mapinfo())
>>> 0-55419 True Pen (1, 2, 0) Brush (45, 255)
>>> 166640-631500 True Pen (1, 2, 8421504) Brush (2, 8453888)
>>> 631500-2055997 True Pen (1, 2, 8421504) Brush (2, 4259584)
Если требуется изменить какой-то элемент. к примеру сделать его скрытым или изменить описание, то в данном случае необходимо сначала запросить требуемый элемент, изменить его характеристики и обновить на модифицированный. Прямое изменение не поддерживается.
item = legend.items[0]
item.title = 'Описание'
legend.items[0] = item
Если легенду необходимо как-то выделить на общем фоне или она с ним сливается, то можно указать стиль рамки и заливки заднего фона:
legend.border_style = LineStyle(3, Qt.red)
legend.fill_style = PolygonStyle(49, Qt.yellow)
Окно легенды для карты
Для просмотра и редактирования легенды axipy.Legend
для карты необходимо использовать метод axipy.ViewManager.create_legendview()
,
передав в него как параметр окно ранее созданной карты:
map = Map([world])
mapview = view_manager.create_mapview(map)
legendView = view_manager.create_legendview(mapview)
При этом будут помещены все доступные для просмотра легенды слоев карты map_view.
Легенды окна можно посмотреть следующим образом:
for legend in legendView.legends:
print(legend.caption)
'''
>>> World
'''