MapView - Окно просмотра карты

class axipy.MapView

Базовые классы: DrawableView

Окно просмотра карты. Используется для проведения различных манипуляций с картой. Для создания экземпляра необходимо использовать axipy.ViewManager.create_mapview() через экземпляр view_manager (пример см. ниже).

Примечание

При создании „MapView“ посредством axipy.ViewManager.create_mapview() производится клонирование экземпляра карты axipy.render.Map и для последующей работы при доступе к данному объекту необходимо использовать свойство map.

Свойство device_rect определяет размер самого окна карты, а свойство scene_rect - прямоугольную область, которая умещается в этом окне в СК карты.

Преобразование между этими двумя прямоугольниками производится с помощью матриц трансформации scene_to_device_transform и device_to_scene_transform.

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

Рассмотрим пример создания карты с последующим помещением ее в окно ее просмотра. Далее, попробуем преобразовать объект типа полигон из координат окна экрана в координаты СК слоя посредством axipy.Geometry.affine_transform().

# Откроем таблицу, создадим на ее базе слой и добавим в карту
table_world = provider_manager.openfile('world.tab')
world = Layer.create(table_world)
map = Map([ world ])
# Для полученной карты создадим окно просмотра
mapview = view_manager.create_mapview(map)
# Выведем полученные параметры отображения
print('Прямоугольник экрана:', mapview.device_rect)
print('Прямоугольник карты:', mapview.scene_rect)
# Установим ширину карты и ее центр
mapview.center = (1000000, 1000000)
mapview.set_zoom(10e6 )

>>> Прямоугольник экрана: (0.0 0.0) (300.0 200.0)
>>> Прямоугольник карты: (-16194966.287183324 -8621185.324024437) (16789976.633236416 8326222.646170927)
#Создадим геометрический объект полигон в координатах экрана и преобразуем его в СК карты
poly_device = Polygon([(100,100), (100,150), (150, 150), (150,100)])
# Используя матрицу трансформации, преобразуем его в координаты карты.
poly_scene = poly_device.affine_transform(mapview.device_to_scene_transform)
# Для контроля выведем полученный полигон в виде WKT
print('WKT:', poly_scene.to_wkt())

>>> WKT: POLYGON ((-5199985.31371008 -147481.338926755, -5199985.31371008 -4384333.3314756, 297505.173026545 -4384333.3314756, 297505.173026545 -147481.338926755, -5199985.31371008 -147481.338926755))

Свойства:

can_redo

Возможен ли откат на один шаг вперед.

can_undo

Возможен ли откат на один шаг назад.

center

Центр окна карты.

coordsystem

Система координат карты.

coordsystem_visual

Система координат карты с учетом поправки цены градуса по широте.

device_rect

Видимая область в координатах окна (пиксели).

device_to_scene_transform

Объект трансформации из координат окна в координаты карты.

editable_layer

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

is_modified

Есть ли изменения в окне.

map

Объект карты.

position

Размер и положение окна.

rect

Размер и положение окна.

scale

Масштаб карты.

scene_rect

Видимая область в координатах карты (в единицах измерения СК).

scene_to_device_transform

Объект трансформации из координат карты в координаты окна.

selected_layer

Выделенный слой на карте.

show_type

Возвращает тип состояния окна.

snap_mode

Включает режим привязки координат при редактировании геометрии в окне карты или отчета.

title

Заголовок окна просмотра.

unit

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

widget

Виджет, соответствующий содержимому окна.

Методы:

close()

Закрывает окно.

mouse_moved(x, y)

Сигнал при смещении курсора мыши.

offset(dx, dy)

Производит сдвиг окна карты или отчета.

redo()

Производит откат на один шаг вперед.

scale_with_center(scale, center)

Установка нового центра с заданным масштабированием.

set_zoom(zoom[, unit])

"Задание ширины окна карты.

set_zoom_and_center(zoom, center[, unit])

"Задает новый центр и ширину окна карты.

show([type])

Показывает окно в соответствие с приведенным типом.

show_all()

Полностью показывает все слои карты.

show_selection()

Перемещает карту к группе выделенных объектов, максимально увеличивая масштаб, но так, чтобы все объекты попадали.

undo()

Производит откат на один шаг назад.

zoom([unit])

Ширина окна карты.

Сигналы:

coordsystem_changed

Сигнал о том, что система координат изменилась.

editable_layer_changed

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

scene_changed

Сигнал об изменении контента окна.

property can_redo: bool

Возможен ли откат на один шаг вперед.

property can_undo: bool

Возможен ли откат на один шаг назад.

property center: Pnt

Центр окна карты.

close()

Закрывает окно.

property coordsystem: CoordSystem

Система координат карты.

property coordsystem_changed: Signal

Сигнал о том, что система координат изменилась.

Пример:

layer_world = Layer.create(table_world)
map = Map([ layer_world ])
mapview = view_manager.create_mapview(map)
mapview.coordsystem_changed.connect(lambda: print('СК была изменена'))
csLL = CoordSystem.from_prj("1, 104")
mapview.coordsystem = csLL

>>> СК была изменена
property coordsystem_visual: CoordSystem

Система координат карты с учетом поправки цены градуса по широте. Отличается от coordsystem только лишь в случае, когда основная система координат - это широта/долгота и широта имеет ненулевое значение. При этом в диапазоне широты (-70…70) градусов вводится поправочный коэффициент, растягивающий изображение по широте и равный 1/cos(y).

property device_rect: Rect

Видимая область в координатах окна (пиксели).

Результат:

Прямоугольник в координатах окна.

property device_to_scene_transform: QTransform

Объект трансформации из координат окна в координаты карты.

Результат:

Объект трансформации.

property editable_layer: Optional[VectorLayer]

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

Результат:

Редактируемый слой. Если не определен, возвращает None.

property editable_layer_changed: Signal

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

property is_modified: bool

Есть ли изменения в окне.

property map: Map

Объект карты.

Результат:

Карта.

mouse_moved(x: float, y: float) Signal

Сигнал при смещении курсора мыши. Возвращает значения в СК карты.

Параметры:
  • x – X координата

  • y – Y координата

Пример:

mapview.mouse_moved.connect(lambda x,y: print('Coords: {} {}'.format(x, y)))

>> Coords: -5732500.0 958500.0
>> Coords: -5621900.0 847900.0
offset(dx: float, dy: float)

Производит сдвиг окна карты или отчета. Особенностью является то, что при этом сохраняется прежний центр (актуально для карты).

Параметры:
  • dx – Смещение по горизонтали в координатах экрана (пикселях)

  • dy – Смещение по вертикали в координатах экрана (пикселях)

property position: QRect

Размер и положение окна.

property rect: QRect

Размер и положение окна.

Предупреждение

Не рекомендуется, начиная с версии 4.0: Используйте position.

redo()

Производит откат на один шаг вперед. При этом возвращается состояние до последней отмены.

property scale: float

Масштаб карты.

scale_with_center(scale: float, center: Pnt)

Установка нового центра с заданным масштабированием.

Параметры:
  • scale – Коэффициент масштабирования по отношению к текущему.

  • center – Устанавливаемый центр.

property scene_changed: Signal

Сигнал об изменении контента окна.

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

Signal[]

property scene_rect: Rect

Видимая область в координатах карты (в единицах измерения СК).

Результат:

Прямоугольник в координатах карты.

property scene_to_device_transform: QTransform

Объект трансформации из координат карты в координаты окна.

Результат:

Объект трансформации.

property selected_layer: Optional[VectorLayer]

Выделенный слой на карте.

Результат:

Выделенный слой. Если выделение отсутствует, возвращает None.

set_zoom(zoom: float, unit: Optional[LinearUnit] = None)

«Задание ширины окна карты.

Параметры:
  • zoom – Значение ширины карты.

  • unit – Единицы измерения. Если не заданы, берутся текущие для карты.

set_zoom_and_center(zoom: float, center: Pnt, unit: Optional[LinearUnit] = None)

«Задает новый центр и ширину окна карты.

Параметры:
  • zoom – Значение ширины карты.

  • center – Центр карты.

  • unit – Единицы измерения. Если не заданы, берутся текущие для карты.

show(type: int = SHOW_NORMAL)

Показывает окно в соответствие с приведенным типом.

Допустимые значения:

Константа

Значение

Описание

SHOW_NORMAL

1

Обычный показ окна (по умолчанию).

SHOW_MINIMIZED

2

Показ окна в режиме минимизации.

SHOW_MAXIMIZED

3

Показ окна в режиме распахивания.

show_all()

Полностью показывает все слои карты.

show_selection()

Перемещает карту к группе выделенных объектов, максимально увеличивая масштаб, но так, чтобы все объекты попадали.

property show_type: int

Возвращает тип состояния окна. Подробнее см. show()

property snap_mode: bool

Включает режим привязки координат при редактировании геометрии в окне карты или отчета.

property title: str

Заголовок окна просмотра.

undo()

Производит откат на один шаг назад.

property unit: LinearUnit

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

property widget: QWidget

Виджет, соответствующий содержимому окна.

Результат:

Qt5 виджет содержимого.

zoom(unit: Optional[LinearUnit] = None) float

Ширина окна карты.

Параметры:

unit – Единицы измерения. Если не заданы, берутся текущие для карты.