Map - Карта

class axipy.Map

Класс карты. Рассматривается как группа слоев, объединенная в единую сущность. Вне зависимости от СК входящих в карту слоев, карта отображает все слои в одной СК. Найти наиболее подходящую для этого можно с помощью get_best_coordsystem() или же установить другую.

Единицы измерения расстояний distanceUnit и площадей areaUnit берутся из настроек по умолчанию.

Параметры:

layers – Список слоев, с которым будет создана карта.

Исключение:

ValueError – Если один и тот же слой был передан несколько раз.

Пример.
table_world = provider_manager.openfile(filepath)
world = Layer.create(table_world)
map = Map([world])
print('СК:', map.get_best_coordsystem().prj)
print('Охват:', map.get_best_rect())
print('Единицы измерения расстояний:', map.distanceUnit.description)
map.distanceUnit = Unit.mi
print('Единицы измерения расстояний (изменено):', map.distanceUnit.description)
'''
>>> СК: Earth Projection 12, 62, "m", 0
>>> Охват: (-16194966.287183324 -8621185.324024437) (16789976.633236416 8326222.646170927)
>>> Единицы измерения расстояний: километры
>>> Единицы измерения расстояний (изменено): мили
'''

Свойства:

areaUnit

Единицы измерения площадей карты.

cosmetic

Косметический слой карты.

custom_labels

Пользовательские метки

distanceUnit

Единицы измерения расстояний на карте.

editable_layer

Слой, установленный для текущего редактирования в карте.

layers

Список слоев и групп слоев.

Методы:

draw(context)

Рисует карту в контексте.

get_best_coordsystem()

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

get_best_rect([coordsystem])

Определяет ограничивающий прямоугольник карты.

to_image(width, height[, coordsystem, bbox])

Рисует карту в изображение.

Сигналы:

need_redraw

Сигнал о необходимости перерисовки карты.

property areaUnit: AreaUnit

Единицы измерения площадей карты.

property cosmetic: CosmeticLayer

Косметический слой карты.

property custom_labels: CustomLabels

Пользовательские метки

Пример.
table_world = provider_manager.openfile(filepath)
world_layer = Layer.create(table_world)
map_ = Map([world_layer])
# Определим свойства
p = CustomLabelProperties()
# Переназначим выражение
p.expression = 'Новое выражение'
# Угол поворота
p.angle = 30
# Выноска будет в виде стрелки
p.endType = CustomLabelEndType.Arrow
# Положение выноски
p.position = Point(100, 200)
# Установим свойства
map_.custom_labels.set(map_.layers[0], 1, p)
# Запрос свойств
props = map_.custom_labels.get(map_.layers[0], 1)
property distanceUnit: LinearUnit

Единицы измерения расстояний на карте.

draw(context: Context)

Рисует карту в контексте.

Параметры:

context – Контекст рисования.

Пример.
# Пример получения карты как растра
map = Map([world])
image = QImage(1600, 800, QImage.Format_ARGB32_Premultiplied)
image.fill(Qt.white)
painter = QPainter(image)
context = Context(painter)
map.draw(context)
property editable_layer: VectorLayer

Слой, установленный для текущего редактирования в карте.

Исключение:

ValueError – При попытке установить слой, не принадлежащий этой карте.

get_best_coordsystem() CoordSystem

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

get_best_rect(coordsystem: Optional[CoordSystem] = None) Rect

Определяет ограничивающий прямоугольник карты.

Параметры:

coordsystem – Координатная система, в которой необходимо получить результат. Если отсутствует, будет выдан результат для наиболее подходящей координатной системы.

property layers: ListLayers

Список слоев и групп слоев.

Примечание

Не содержит косметический слой cosmetic.

Примеры доступа.
# Создадим карту с тремя слоями
map = Map([world, worldcap, russia])
print(len(map.layers))
'''
>>> 3
'''
print(map.layers[0].title)
'''
>>> world
'''
# Группировка первый двух слоев с именем "Мир"
map.layers.group([0, 1], 'Мир')
# Перечень элементов
for l in map.layers:
    if isinstance(l, Layer):
        print('Слой:', l.title)
    elif isinstance(l, ListLayers):
        print('Группа:', l.title)
'''
>>> Группа: Мир
>>> Слой: russia
'''
# Изменение позиции
map.layers.move(0, 1)
# Управление видимостью группы слоев
map.layers[1].visible = False
# Разгруппировка ранее созданной группы
map.layers.ungroup(1)
# Удаление слоя из карты
map.layers.remove(1)
# Добавление пустой группы
map.layers.add_group('Новая группа')
property need_redraw: Signal

Сигнал о необходимости перерисовки карты. Возникает при изменении контента одного или нескольких слоев карты. Это может быть обусловлено изменением данных таблиц.

Тип результата:

Signal[]

Пример.
# Смотрим активное окно.
if isinstance(view_manager.active, MapView):
    # Если это карта, подключимся к событию обновления окна этой карты.
    map_view = view_manager.active
    map_view.map.need_redraw.connect(lambda: print('Update map'))
to_image(width: int, height: int, coordsystem: Optional[CoordSystem] = None, bbox: Optional[Rect] = None) QImage

Рисует карту в изображение.

Параметры:
  • width – Ширина выходного изображения.

  • height – Высота выходного изображения.

  • coordsystem – Координатная система. Если не задана, берется наиболее подходящая.

  • bbox – Ограничивающий прямоугольник. Если не задан, берется у карты.

Результат:

Изображение.