Тематические слои¶
Тематическая карта отображает ваши данные в виде условных знаков, выделяя их оттенками, цветами, штриховками, а также представляя их в виде столбчатых и круговых диаграмм.
Для векторных слоев axipy.render.VectorLayer
есть возможность
формирования и отрисовки тематических слоев. Т.е. применить оформление на базе атрибутивной
информации.
Тематические слои добавляются как дочерние к их базовому слою.
from axipy import *
world = map.layers[0]
thematic = RangeThematicLayer('Население')
world.thematic.add(thematic)
Поддерживаются следующие виды тематических слоев:
Для более удобного распределения по цветам используются различного рода алгоритмы.
Выбор того или иного алгоритма обусловлен исходными требованиями к составлению тематики.
Эти алгоритмы сгруппированы в базовом интерфейсе axipy.render.ReallocateThematicColor
и могут быть использованы в наследниках. Поддерживаются следующие виды распределения:
По двум заданным крайним цветам
axipy.render.ReallocateThematicColor.assign_two_colors()
.По двум заданным крайним цветам и цвету разрыва
axipy.render.ReallocateThematicColor.assign_two_colors()
.По спектру
axipy.render.ReallocateThematicColor.assign_rainbow()
.Градация серого
axipy.render.ReallocateThematicColor.assign_gray()
.Монотонная заливка разной яркости
axipy.render.ReallocateThematicColor.assign_monotone()
.
Рассмотрим на примере тематики по интервалам. Построим тематику по атрибутивному полю “Население” на 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)
Поменяем стиль оформления для первого интервала:
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))
Изменим цвет интервала по индексу 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: Значения