Camera

摘要

Camera 对象用于对控制 MapFrameMapView 中显示的 2D 和 3D 查看器属性进行访问。

说明

ArcGIS Pro 应用程序集成了 2D 和 3D 显示,因此 Camera 对象可用于同时控制 2D 地图的比例与范围以及 MapFrameMapView 中 3D 地图的照相机位置。

MapFrameMapView 对象上的 camera 属性会返回 Camera 对象。

由于此对象上会提供 2D 和 3D 属性,因此检查 Camera 对象上的模式属性是非常重要的。如果 Camera modeMAP,则您可以设置 2D 属性。如果 Camera modeGLOBALLOCAL,则您可以设置 3D 属性。此外,您还可以检查 Map 对象上的 MapType 属性;MAP 的值表示 2D,SCENE 的值表示 3D。

由于范围并非显式属性而是派生属性,因此它并非 Camera 对象的直接属性。照相机位置不会存储范围属性,范围是从 X, Y 位置和 scale 派生的。getExtent 方法将返回派生范围。从 3D 地图视图返回范围后,范围取决于从上方竖直向下观察的照相机位置 (pitch=-90)。在 3D 地图上使用 setExtent 方法时,同样,结果显示为如同照相机从上方竖直向下观察的样子。

属性

属性说明数据类型
heading
(可读写)

用于获取或设置地图视图旋转值。同时也被称为偏航角或方位角。用于表示地图数据将从正北方向按逆时针旋转的度数。要顺时针旋转,可使用负值。对 2D 和 3D 地图类型均适用。

Double
mode
(只读)

返回照相机的查看器模式。每个查看器模式均支持不同的照相机属性集合。

  • GLOBAL支持非投影坐标系的 3D 地图。
  • LOCAL仅支持本地坐标系的 3D 地图。
  • 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 ()

返回 2D 地图框的 Extent 对象。

setExtent (extent)

在布局中设置地图框的范围

方法

getExtent ()
返回值
数据类型说明
Extent

地理处理 Extent 对象。

如果地图类型为 2D 且未旋转,返回的范围将与地图视图或地图框的 X, Y 边界框一致。 如果地图已旋转,返回的范围更大,因为已旋转包络矩形的范围大于未旋转包络矩形。 如果地图类型为 3D,返回的范围基于等于 0 的地图视图 headingpitchroll 值。

setExtent (extent)
参数说明数据类型
extent

地理处理 Extent 对象。

Extent

此范围用于控制地图框的 X,Y 边界框。如果应用于 3D 地图类型,则结果为 2D 平面视图。

代码示例

照相机示例 1

下面的脚本将设置名为约塞米蒂国家公园主要景点的布局上名为约塞米蒂国家公园的地图框范围,从而与名为 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

下面的脚本会将两个地图框的地图从 2D 更改为 3D 地图。首先,该脚本会将两个文档导入到空白项目中。然后,会引用合适的地图和地图框。最后也是最重要的一步,在将 map 属性从 2D 地图更改为 3D 地图之前,将 Camera type 属性更改为 GLOBAL

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")