必须先修改使用 ArcGIS Desktop 创作的 Arcpy.mapping 脚本,然后才能在 ArcGIS Pro 中运行它们。更改是直接且具有逻辑性的,更改往往都可通过查找和替换操作完成。以下几节重点介绍了 arcpy.mp API 的许多重要变化以及新增的功能。
Python 3
ArcGIS Pro 使用 Python 3。您可能需要修改一些标准的 Python 语法。有关详细信息,请参阅从 10.x 到 ArcGIS Pro 的 Python 迁移。
Arcpy.mapping 现在更改为 arcpy.mp
ArcGIS Pro 中引入的变化非常重要,足以引起模块名称空间变化。新名称还会使 arcpy.mp 所提供的功能更加灵活。例如,除了地图自动化外,arcpy.mp 还可提供工程级别管理。
ArcGIS Pro 工程文件 (.aprx)
首要也是最明显的一点变化是,arcpy.mp 在 ArcGIS Pro 中需要引用工程文件 (.aprx),而不是地图文档 (.mxd)。因此,您需要将 arcpy.mapping.MapDocument(mxd_path) 替换为 arcpy.mp.ArcGISProject(aprx_path)。ArcGISProject 函数现已成为一个 ArcGISProject 对象,这是实现大多数 arcpy.mp 自动化需要的主入口点。ArcGISProject 类还有另一 importDocument 方法,允许您将地图 (.mxd)、globe (.3dd) 和 scene (.sxd) 以及其他文档文件自动导入到工程。
已移动多数列表函数
许多独立的 arcpy.mapping List 函数现已成为相应对象的方法。这种设计更改不再需要持续引用地图文档作为第一参数,并且新组织能够获得更好的面向对象的流。以下示例介绍了如何使用 List 函数引用图层标注类。就功能而言,它们很相似,但您需要修改现有 ArcGIS Desktop 脚本才能进行这种操作。
此示例说明了如何使用 ArcGIS Desktop 引用图层的标注类。
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd, "Yosemite National Park")[0]
for lyr in arcpy.mapping.ListLayers(mxd, df):
if lyr.supports("SHOWLABLES"):
lblClasses = lyr.labelClasses
此示例说明了如何使用 ArcGIS Pro 引用图层的标注类。
p = arcpy.mp.ArcGISProject("CURRENT")
m = p.listMaps("Yosemite National Park")[0]
for lyr in m.listLayers():
if lyr.supports("SHOWLABELS"):
lblClasses = lyr.listLabelClasses()
下图显示了属于 arcpy.mp 的类,以及引用某一特定类所需函数或属性的位置与名称。
已移动导出函数
独立的导出函数现已成为 Layout 和 MapFrame 对象的方法。这种设计更改根据要导出的对象对可用的不同参数集合进行了区分。例如,导出布局时,不再需要包括坐标文件信息。
已移动图层管理函数
独立的图层管理函数现已成为 Map 和 LayerFile 对象的方法。该方法包括 addLayer、addLayerToGroup、insertLayer、moveLayer 和 removeLayer。
已更改图层文件
使用 ArcGIS Desktop 创作的图层文件具有 .lyr 扩展名,使用 ArcGIS Pro 创建的图层文件具有 .lyrx 扩展名。存在明显的差异。虽然图层组可具有多个图层或图层组,但较早的 .lyr 文件仅在根级别存储单个图层或单个图层组。较新的 .lyrx 文件可在根级别存储多个图层和/或图层组。引用 .lyrx 现在既可引用单个图层又可引用图层列表。
New Map、MapFrame 以及 Camera 对象替换了数据框的角色
ArcGIS Pro 框架引入了能够影响您与地图显示间交互方式的功能,因而引入了新对象。这些新 Map、MapFrame、和 Camera 对象中,每个对象都具有特定的作用且彼此间结合紧密。
ArcGIS Pro 中的 Map 对象用于表示表格与符号化地理图层的集合,同时用于保留坐标系、默认数据视图和其他各种元数据的信息。对地图内容进行可视化的唯一方式是在地图视图(即在具有自己的内容表的应用程序中作为选项卡)或在页面布局上的地图框中进行。可在多个地图视图或地图框中显示同一地图。如果已将图层添加到地图,则所有引用此地图的地图视图和地图框将显示已添加的图层。如果您希望在其他视图中显示其他图层或表集合,则您需要构建并使用其他地图。
MapFrame 对象是一个布局元素,用于显示添加到 Map 的地理信息。同时还用于在布局上控制地图框的大小与定位。多个地图框可同时引用同一地图。
ArcGIS Pro 应用程序集成了 2D 和 3D 显示,因此 Camera 对象可用于同时控制 2D 地图的比例与范围以及地图框中 3D 地图的照相机位置。
新 Layout 对象
一个 ArcGIS Pro 工程支持多个布局。因此,新增了一个 Layout 对象,可使用 ArcGISProject 对象上的 listLayouts 方法引用布局。每个布局的页面大小和方向可以不同。与 ArcGIS Desktop 类似,您可以使用 listElements 方法获得各个布局元素。其中的每个元素都具有 visible 属性,这样您即可关闭元素的显示而不必将其移出页面。
使用 CURRENT 时应用程序将始终保持刷新状态。
若在 ArcGIS Desktop 的 Python 窗口中使用 CURRENT 关键字,有时,您必须调用 refreshActiveView 来强制屏幕刷新。但 ArcGIS Pro 却不会出现这种情况。所有 arcpy.mp API 更改都将直接更新 ArcGIS Pro。
更改了更新数据源
用于更改图层或表数据源的方法和参数发生了变化。这种改良的设计能够更好地管理数据库连接以及可能连接或关联的其他数据源。有关详细信息,请参阅更新和修复数据源。