Camera

Краткая информация

ОбъектCamera предоставляет доступ к свойствам 2D и 3D, которые контролируют отображение в MapFrame или MapView.

Обсуждение

Приложение ArcGIS Pro интегрирует 2D и 3D отображение и, таким образом, объект Camera используется для контроля масштаба и экстента 2D карт и позиции камеры в 3D картах в MapFrame или MapView.

Свойство camera для объекта MapFrame или MapView возвращает объект Camera.

Потому как и 2D, и 3D-свойства доступны для объекта, является важным проверить свойство mode для объекта Camera. Если Camera mode является MAP, то вы можете установить 2D-свойства. Если Camera mode является либо GLOBAL, либо LOCAL, то вы можете установить 3D-свойства. Вы можете проверить свойство MapType для объекта Map; значение MAP представляет 2D и значение SCENE представляет 3D.

Экстент не является непосредственным свойством объекта Camera, потому как он не является явным свойством, а скорее извлеченным. Позиции камеры не сохраняют свойства экстента, но экстент выводится из положения X, Y и scale. Метод getExtent будет возвращать извлеченный экстент. Когда экстент возвращается из вида 3D-карты, то он базируется на позиции камеры направленной прямо вниз (pitch=-90). Когда метод setExtent используется для 3D-карты, то результат будет являться таким, как если бы камера была направлена прямо вниз.

Свойства

СвойствоОписаниеТип данных
heading
(чтение и запись)

Дает возможность получать или задавать значение поворота для вида карты. Это также известно, как yaw или azimuth. Представляет собой значение угла в градусах, на который будут повернуты данные карты, измеренное против часовой стрелки от севера. Для вращения по часовой стрелке используйте отрицательное значение. Он применяется как к типу 2D-карт, так и к типу 3D-карт.

Double
mode
(только чтение)

Возвращает режим просмотра для камеры. Каждый режим просмотра поддерживает различный набор свойств камеры.

  • GLOBAL3D-карта, которая поддерживает не спроецированную систему координат.
  • LOCAL3D-карта, которая поддерживает только локальные системы координат.
  • MAP2D-карта.
String
pitch
(чтение и запись)

Дает возможность получать или задавать наклон для вида карты. Наклон является эквивалентом перемещения носа самолета вверх или вниз (вращающегося вдоль оси, проходящей через крылья самолета). Положительные значения, при взгляде вперед, находятся над горизонтом (направление вверх), а отрицательные значения ниже горизонта (направление вниз). Тип 2D-карта будет иметь значение -90.0 (взгляд прямо вниз).

Double
roll
(чтение и запись)

Дает возможность получать или задавать крен для вида карты. Крен является эквивалентом наклона крыльев самолета вверх или вниз (вращающегося вдоль оси, проходящей через центр самолета спереди назад). Нулевое значение соответствует строго горизонтальному положению. Положительные значения наклоняют левую сторону вверх (или правую сторону вниз). Отрицательные значения производят обратное действие. Тип 2D-карта будет иметь значение 0.0.

Double
scale
(чтение и запись)

Дает возможность получать или задавать масштаб данных во фрейме карты. Он должен быть двузначным числовым значением. Масштабы применяются в действительности только к типам 2D-карт из-за их планиметрического представления данных. Масштабы могут быть возвращены из типов 3D-карт, но только как вычисленные.

Double
X
(чтение и запись)

Дает возможность получать или задавать значение X. Для 2D-карт это базируется на центре фрейма карты. Для 3D-карт это представляет позицию X камеры относительно вида.

Double
Y
(чтение и запись)

Дает возможность получать или задавать значение Y. Для 2D-карт это базируется на центре фрейма карты. Для 3D-карт это представляет позицию Y камеры относительно вида.

Double
Z
(чтение и запись)

Дает возможность получать или задавать значение Z. Для 3D-карт это представляет позицию Z камеры относительно вида. 2D-карты не поддерживают данное значение и возвращают nan.

Double

Обзор метода

МетодОписание
getExtent ()

Возвращает объект Экстент (Extent) для фрейма 2D-карты.

setExtent (extent)

Устанавливает Экстент (Extent) фрейма карты в компоновке.

Методы

getExtent ()
Возвращаемое значение
Тип данныхОписание
Extent

Объект геообработки Extent.

Если тип карты – 2D, то возвращаемый экстент подгоняется под X,Y-ограничивающую рамку для фрейма карты. Если тип карты – 3D, то возвращаемый экстент базируется на значениях вида карты heading, pitch и roll, которые равны 0.

setExtent (extent)
ПараметрОписаниеТип данных
extent

Объект геообработки Extent.

Extent

Экстент контролирует X,Y-ограничивающую рамку для фрейма карты. При применении к типу карты 3D, результатом будет 2D, планиметрический вид.

Пример кода

Пример 1 Camera

Следующий скрипт устанавливает экстент для фрейма карты с именем Yosemite National Park (Йосемитский национальный парк) в компоновке с именем Main Attractions at Yosemite National Park (Основные достопримечательности Йосемитского национального парка) для подгонки к экстенту слоя с именем Ranger Stations (Станции рейнджеров).

import arcpy
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\YosemiteNP\Yosemite.aprx")

m = aprx.listMaps("Yose*")[0]
lyr = m.listLayers("Ranger Stations")[0]
lyt = aprx.listLayouts("Main Attr*")[0]
mf = lyt.listElements("mapframe_element", "Yosemite National Park")[0]
mf.camera.setExtent(mf.getLayerExtent(lyr, False, True))

aprx.saveACopy(r"C:\Projects\YosemiteNP\Yosemite_Updated.aprx")
del aprx
Пример 2 Camera

Следующий скрипт будет изменять две карты фрейма карты из 2D в 3D карту. Сначала скрипт импортирует два документа в пустой проект. Далее он ссылается на соответствующие карты и фреймы карт. И наконец, что самое главное, он изменяет свойство Camera type на свойство GLOBAL перед тем как изменить свойство map с 2D-карты на 3D-карту.

import arcpy
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\Blank.aprx")

#Import documents into project
aprx.importDocument(r"C:\Projects\YosemiteNP\Documents\Yosemite.mxd")
aprx.importDocument(r"C:\Projects\YosemiteNP\Documents\Yosemite_3DViews.3dd")

#Reference maps
m_scenic = aprx.listMaps("Globe layers")[0]

#Reference Layout and map frames
lyt = aprx.listLayouts()[0]
mf_inset1 = lyt.listElements("MapFrame_Element", "Inset1")[0]
mf_inset2 = lyt.listElements("MapFrame_Element", "Inset2")[0]

#Convert inset maps into Globe Views
mf_inset1.camera.type = "GLOBAL"
mf_inset1.map = m_scenic
mf_inset2.camera.type = "GLOBAL"
mf_inset2.map = m_scenic

aprx.saveACopy(r"C:\Projects\YosemiteNP\Yosemite.aprx")