通过 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 还可提供工程级别管理以及创建对象的功能,后者在 arcpy.mapping 中无法实现。
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)、场景 (.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, data_frame=df):
if lyr.supports("SHOWLABELS"):
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 中最常用的类,以及引用某一特定类所需的函数或属性的位置与名称。 该图仅为示例,不显示完整对象集。 对象的两个主要入口点是通过 ArcGISProject 类或 LayerFile 类。
已移动导出函数
独立的导出函数现已成为 Layout、MapFrame、MapSeries 和 MapView 对象的方法。 这种设计更改根据要导出的对象对可用的不同参数集合进行了区分。 例如,当您导出地图视图时,需要指定宽度和高度,但对于布局,大小会自动考虑在内。
已移动图层管理函数
独立的图层管理函数现已成为 Map 和 LayerFile 对象的方法。 其中的一些方法包括 addLayer、addLayerToGroup、insertLayer、moveLayer 和 removeLayer。
已更改图层文件
使用 ArcGIS Desktop 创作的图层文件具有 .lyr 扩展名,使用 ArcGIS Pro 创建的图层文件具有 .lyrx 扩展名。 存在明显的差异。 虽然图层组可具有多个图层或图层组,但较早的 .lyr 文件仅在根级别存储单个图层或单个图层组。 较新的 .lyrx 文件可在根级别存储多个图层和图层组。 对 .lyrx 的引用现在可以是对单个图层的引用或对图层列表的引用。 较新的 .lyrx 文件还可以包含独立表。 单独的独立表也可以导出至 .lyrx 文件。
新的 Camera、Map、MapFrame 和 MapView 对象替换了数据框的角色
ArcGIS Pro 框架引入了能够影响您与地图显示间交互方式的功能,因而引入了新对象。 这些新的 Camera、Map、MapFrame 和 MapView 对象中,每个对象都具有特定的作用且彼此间结合紧密,因此,您可以在不同的使用场景中具有更强的控制能力。
Map 中的 ArcGIS Pro 对象用于表示表格与符号化地理图层的集合,同时用于保留坐标系、默认数据视图和其他各种元数据的信息。 对地图内容进行可视化的唯一方式是在地图视图(即在具有自己的内容表的应用程序中作为选项卡)或在页面布局上的地图框中进行。 可在多个地图视图或地图框中显示同一地图。 如果已将图层添加到地图,则所有引用此地图的地图视图和地图框将显示已添加的图层。 如果希望在不同视图中显示其他图层或表集合,则需要构建和使用不同的地图。
MapFrame 对象是一个 Layout 元素,用于显示添加到 Map 的地理信息。 同时还用于在布局上控制地图框的大小与定位。 多个地图框可同时引用同一地图。 相似地,也可以通过 MapView 对象查看地图的内容。
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。
更改了更新数据源
用于更改图层或表数据源的方法和参数发生了变化。 这种改良的设计能够更好地管理数据库连接以及可能连接或关联的其他数据源。 有关详细信息,请参阅更新和修复数据源。
可以创建对象
之前使用 ArcGIS Desktop 时,脚本仅限自动化现有元素。 从 ArcGIS Pro 3.2 开始,可以创建许多常用对象。 其中包括 ArcGISProject 对象的 createMap 和 createLayout 方法,以及许多布局元素构造器,例如 createMapFrame、createMapSurroundElement、createGraphicElement、createTextElement 等。 也可以从 Map 类创建 Bookmark 对象。 有关详细信息,请参阅 ArcGISProject、Layout 和 Map 类主题。