Слой

Для отображения данных таблицы или растра необходимо создать на основе этого источника данных слой axipy.render.Layer.

from axipy.render import Layer

layer = Layer.create(table)

В зависимости от типа передаваемого объекта будет создан векторный или растровый слой.

Свойства подписей

Настройки автоматического подписывания определяются классом Label свойством label.

Пример использования
world = generate_layer_for_geometry_table()
# Зададим в качестве формулы метки атрибут "Страна" и запретим перекрытие меток друг другом:
world.label.text = "Страна"
world.label.placementPolicy = LabelOverlap.DisallowOverlap
# Задание стиля оформления слоя
style_lay = Style.from_mapinfo("Pen (1, 2, 0) Brush (8, 255) Symbol (33,255,14)")
world.overrideStyle = style_lay
# Для сброса переопределения достаточно задать значение None
world.overrideStyle = None

Настройки автоматического подписывания Label повторяют соответствующие настройки в интерфейсе ГИС Аксиома диалога «Свойства слоя» > «Подписи».

См.также

Подробнее в разделе «Подписывание» руководства пользователя для ГИС Аксиома.

Карта

Совокупность слоев образует карту axipy.render.Map. Порядок отрисовки слоев прямо зависит от их расположения в карте. То есть первый слой будет на самом верху, а последний - в самом низу.

Создадим карту с двумя слоями. Передадим в карту список таблиц - из них автоматически создадутся слои с параметрами по умолчанию.

import axipy

world = axipy.provider_manager.openfile('../path/to/datadir/example.gpkg', dataobject='world')
capital = axipy.provider_manager.openfile('../path/to/datadir/worldcap.tab')
map_ = axipy.Map([capital, world])

Карту можно вывести в изображение - PySide2.QtGui.QImage, которое, например, можно в качестве результата сохранить в файл.

image = map_.to_image(600, 300)
../_images/output_103_0.png

Полученную картинку можно сохранить как растр в файловой системе. Формат файла будет определяться его расширением:

print(image.save('../path/to/outdir/map.png'))
>>> True

Мы указали только размеры изображения. Карта вывелась в Системе Координат (СК), наиболее подходящей для отображения слоев в ней. В нашем случае обе таблицы оказались в одной СК, которая и была выбрана для отображения.

Теперь отрисуем эту же карту Азимутальной СК:

from axipy.cs import CoordSystem

azimuth = CoordSystem.from_epsg(2163)
image = map_.to_image(600, 300, coordsystem=azimuth)
../_images/output_104_0.png

Границы карты по умолчанию определились равными границам СК. Снова нарисуем нашу карту уже в Широте/Долготе в границах, примерно включающих Италию. Ограничивающий прямоугольник указываем в градусах:

longlat = CoordSystem.from_epsg(4326)
image = map_.to_image(600, 300, coordsystem=longlat, bbox=(5, 35, 15, 15))
../_images/output_105_0.png

Теперь попробуем для слоя capital задать выражение для отображаемых меток axipy.render.VectorLayer.label, и для обоих слоев переопределить стиль оформления, сделав его однообразным axipy.render.VectorLayer.overrideStyle. Заметим, что перечень доступных слоев карты доступен через свойство axipy.render.Map.layers. Т.е. помимо передачи перечня слоев в конструктор карты, также возможно управление этим списком позже.

from axipy import Label, Style

lay_capital = map_.layers[0]
lay_capital.label.text = 'Столица'
lay_capital.label.placementPolicy = Label.DisallowOverlap
lay_capital.overrideStyle = Style.from_mapinfo('Symbol (34,255,6)')
lay_world = map_.layers['world']
lay_world.overrideStyle = Style.from_mapinfo('Pen (1, 2, 0) Brush (8, 255)')
image = map_.to_image(600, 300, coordsystem=longlat, bbox=(5, 35, 15, 15))
../_images/output_106_0.png

В рамках примера по управлению слоями в конце удалим слой со столицами (самый верхний):

map_.layers.remove(0)

Создадим карту на базе растра как подложки и установим прозрачным цвет фона.

from PySide2.QtGui import QColor
from axipy import provider_manager, Layer, Map

raster = provider_manager.openfile("../path/to/datadir/TrueMarble.tab")
rasterLayer = Layer.create(raster)
rasterLayer.transparentColor = QColor("#000014")

mapRaster = Map([capital, rasterLayer])
image = mapRaster.to_image(600, 320)
../_images/output_115_0.png