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

class axipy.gui.MapView

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

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

Примечание

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

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

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

До параметров самой карты можно доступиться через свойство map.

Рассмотрим пример создания карты с последующим помещением ее в окно ее просмотра. Далее, попробуем преобразовать объект типа полигон из координат окна экрана в координаты СК слоя посредством axipy.da.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.wkt)

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

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

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

Pnt

property coordsystem

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

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

CoordSystem

property coordsystem_changed

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

Пример:

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

>>> СК была изменена
Тип результата

Signal

property device_rect

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

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

Rect

Результат

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

property device_to_scene_transform

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

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

QTransform

Результат

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

property editable_layer

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

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

Optional[VectorLayer]

Результат

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

property editable_layer_changed

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

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

Signal

property map

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

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

Map

Результат

Карта.

mouse_moved(x, y)

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

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

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

Пример:

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

>> Coords: -5732500.0 958500.0
>> Coords: -5621900.0 847900.0
Тип результата

Signal

property scene_rect

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

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

Rect

Результат

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

property scene_to_device_transform

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

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

QTransform

Результат

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

set_zoom(v, unit=None)

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

Параметры

unit (Optional[LinearUnit]) – Единицы измерения. Если не заданы, берутся текущие для карты.

show_all()

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

zoom(unit=None)

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

Параметры

unit (Optional[LinearUnit]) – Единицы измерения. Если не заданы, берутся текущие для карты.

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

float