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))
Свойства:
Возможен ли откат на один шаг вперед.
Возможен ли откат на один шаг назад.
Центр окна карты.
Система координат карты.
Система координат карты с учетом поправки цены градуса по широте.
Видимая область в координатах окна (пиксели).
Объект трансформации из координат окна в координаты карты.
Редактируемый слой на карте.
Есть ли изменения в окне.
Объект карты.
Размер и положение окна.
Размер и положение окна.
Масштаб карты.
Видимая область в координатах карты (в единицах измерения СК).
Объект трансформации из координат карты в координаты окна.
Выделенный слой на карте.
Возвращает тип состояния окна.
Включает режим привязки координат при редактировании геометрии в окне карты или отчета.
Заголовок окна просмотра.
Единицы измерения координат карты.
Виджет, соответствующий содержимому окна.
Методы:
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
()Полностью показывает все слои карты.
Перемещает карту к группе выделенных объектов, максимально увеличивая масштаб, но так, чтобы все объекты попадали.
undo
()Производит откат на один шаг назад.
zoom
([unit])Ширина окна карты.
Сигналы:
Сигнал о том, что система координат изменилась.
Сигнал о том, что редактируемый слой сменился.
Сигнал об изменении контента окна.
- 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.
- 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 rect: QRect
Размер и положение окна.
Предупреждение
Не рекомендуется, начиная с версии 4.0: Используйте
position
.
- redo()
Производит откат на один шаг вперед. При этом возвращается состояние до последней отмены.
- scale_with_center(scale: float, center: Pnt)
Установка нового центра с заданным масштабированием.
- Параметры:
scale – Коэффициент масштабирования по отношению к текущему.
center – Устанавливаемый центр.
- 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 snap_mode: bool
Включает режим привязки координат при редактировании геометрии в окне карты или отчета.
- undo()
Производит откат на один шаг назад.
- property unit: LinearUnit
Единицы измерения координат карты.
- property widget: QWidget
Виджет, соответствующий содержимому окна.
- Результат:
Qt5 виджет содержимого.
- zoom(unit: Optional[LinearUnit] = None) float
Ширина окна карты.
- Параметры:
unit – Единицы измерения. Если не заданы, берутся текущие для карты.