Map - Карта

class axipy.Map

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

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

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

  • preserve_order – Порядок слоев оставить как есть, в противном случае будет произведена попытка отсортировать слои в соответствии с контентом (растры вниз, точечные объекты наверх)

Исключение:

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)
>>> Единицы измерения расстояний: километры
>>> Единицы измерения расстояний (изменено): мили
'''

Конструктор класса:

__init__([layers, preserve_order])

Свойства:

areaUnit

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

cosmetic

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

custom_labels

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

distanceUnit

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

editable_layer

Редактируемый слой для текущей карты.

layers

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

Методы:

draw(context)

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

draw_vector(context)

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

get_best_coordsystem()

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

get_best_rect([coordsystem])

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

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

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

Сигналы:

need_redraw

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

__init__(layers: List[Layer] = [], preserve_order: bool = False)
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])
layer = map_.layers[0]
# Определим свойства
p = CustomLabelProperties()
# Переназначим выражение
p.expression = 'Новое выражение'
# Угол поворота
p.angle = 30
# Выноска будет в виде стрелки
p.endType = CustomLabelEndType.Arrow
# Положение выноски
p.position = Point(100, 200)
# Выравнивание относительно этого положения
p.position_align = LabelLayoutPosition.TopRight
# Устанавливаем стиль выноски
p.arrow_style = Style.from_mapinfo('Pen (2, 86, 16711680)')
# Устанавливаем стиль текста для метки
text_style = TextStyle("Droid Sans", 12)
text_style.color = Qt.red
text_style.bold = True
p.text_style = text_style
# Установим свойства
map_.custom_labels.set(layer, 1, p)
# Запрос свойств
props = map_.custom_labels.get(layer, 1)
# Перечень идентификаторов объектов с метками
ids = map_.custom_labels.ids(layer)
# Установка параметров по умолчанию для новых меток
s = Style.from_mapinfo('Pen (2, 86, 16711680)')
map_.custom_labels.set_default_arrow_type(layer, s)
map_.custom_labels.set_default_end_type(layer, CustomLabelEndType.Line)
property distanceUnit: LinearUnit

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

draw(context: Context)

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

Параметры:

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

Пример получения карты как растра.
in_filepath = 'world.tab'
table_world = provider_manager.openfile(in_filepath)
m = Map([table_world])
image = QImage(1600, 1000, QImage.Format_ARGB32_Premultiplied)
image.fill(Qt.transparent)
painter = QPainter(image)
context = Context(painter)
m.draw(context)
out_filepath = 'world.png'
image.save(out_filepath)
draw_vector(context: Context)

Рисует карту в контексте в виде вектора. Это может потребоваться при генерации карты в виде, к примеру, SVG

Параметры:

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

Пример получения карты в виде вектора.
in_filepath = 'world.tab'
out_filepath = 'world.svg'
table_world = provider_manager.openfile(in_filepath)
m = Map([table_world])
generator = QSvgGenerator()
generator.setFileName(out_filepath)
generator.setSize(QSize(1600,1000));
painter_svg = QPainter(generator)
context = Context(painter_svg)
m.draw_vector(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 – Ограничивающий прямоугольник. Если не задан, берется у карты.

Результат:

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