Тематические слои

Тематическая карта отображает ваши данные в виде условных знаков, выделяя их оттенками, цветами, штриховками, а также представляя их в виде столбчатых и круговых диаграмм.

Для векторных слоев axipy.render.VectorLayer есть возможность формирования и отрисовки тематических слоев. Т.е. применить оформление на базе атрибутивной информации.

Тематические слои добавляются как дочерние к их базовому слою.

from axipy import *

world = map.layers[0]
thematic = RangeThematicLayer('Население')
world.thematic.add(thematic)

Поддерживаются следующие виды тематических слоев:

Для более удобного распределения по цветам используются различного рода алгоритмы. Выбор того или иного алгоритма обусловлен исходными требованиями к составлению тематики. Эти алгоритмы сгруппированы в базовом интерфейсе axipy.render.ReallocateThematicColor и могут быть использованы в наследниках. Поддерживаются следующие виды распределения:

Рассмотрим на примере тематики по интервалам. Построим тематику по атрибутивному полю “Население” на 6 интервалов с равномерным распределением по количеству записей. Цвета распределим градиентом от желтого до красного.

table_world = provider_manager.openfile('world.tab')
world = Layer.create(table_world)
range1 = RangeThematicLayer("Население")
range1.ranges = 6
range1.splitType = RangeThematicLayer.EQUAL_COUNT
range1.assign_two_colors(Qt.yellow, Qt.red)
world.thematic.add(range1)
../_images/output_116_0.png

Поменяем стиль оформления для первого интервала:

range1.set_style(0, PolygonStyle(45, Qt.blue))

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

iv = range1.get_interval_value(0)
print('Old values:', iv)
range1.set_interval_value(0, (iv[0], 100000.0))
print('New values:', range1.get_interval_value(0))
>>> Old values: (0.0, 66687.0)
>>> New values: (0.0, 100000.0)

Создадим тематику с отдельными значениями по полю „Страна“. Распределение по цветам случайное:

individual = IndividualThematicLayer('Страна')
individual.assign_rainbow()
world.thematic.add(individual)
individual.set_style(0, PolygonStyle(45, Qt.blue))
../_images/output_thematic.png

Изменим цвет интервала по индексу 1 на желтый.

s = individual.get_style(1)
s.polygon.fill.color = Qt.yellow
individual.set_style(1, s)

Необходимую тематику слоя можно получить по ее индексу axipy.render.Layer.thematic():

range1 = world.thematic[0]

Если необходимо просмотреть все тематики слоя:

for t in world.thematic:
    print('thematic:', t.title)
>>> thematic: Интервалы
>>> thematic: Значения