本节书摘来自异步社区《基于ArcGIS的Python编程秘笈(第2版)》一书中的第2章,第2.2节,作者: 【美】Eric Pimpler(派普勒) 更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.2 引用当前的地图文档
在ArcGIS Python窗口或自定义的脚本工具中运行地理处理脚本时,经常需要引用当前加载在ArcMap中的地图文档。通常来讲,在对地图文档中的图层和表执行地理处理操作之前,需要引用当前的地图文档。本节将介绍如何在Python地理处理脚本中引用当前的地图文档。
2.2.1 准备工作
在对地图文档执行任何操作之前,都需要先在Python脚本中引用地图文档,可以通过调用arcpy.mapping模块中的MapDocument()函数来实现。引用地图文档的途径有两种:一是引用ArcMap中当前活动的文档;二是引用磁盘中特定位置的文档。使用CURRENT关键字作为MapDocument()函数的参数,就可以加载ArcMap中当前活动的地图文档,如下列代码所示。
mxd = mapping.MapDocument("CURRENT")
提示:
只有在ArcGIS的Python窗口或ArcToolbox的自定义脚本工具中运行脚本时,才可以使用CURRENT关键字。如果在IDLE或其他开发环境中运行脚本时使用CURRENT关键字,则无法访问当前加载在ArcGIS中的地图文档。需要指出的是,CURRENT关键字不区分大小写,所以也可以使用“current”。
引用本地或网络驱动器上的地图文档,只需提供地图文档的路径和名称作为MapDocument()函数的参数。例如,要引用C:data文件夹中的crime.mxd文件,代码为:arcpy.mapping.MapDocument("C:/data/crime.mxd")。
2.2.2 操作方法
下面按步骤介绍如何引用ArcMap中当前活动的地图文档。
(1)在ArcMap中打开C:ArcpyBookCh2Crime_Ch2.mxd。
(2)单击ArcMap“标准”工具条上的“Python”按钮。
(3)在“Python”窗口中键入如下代码,导入arcpy.mapping模块。这里将arcpy.mapping模块赋值给mapping变量,就可以不需要在所有代码中都以arcpy.mapping为前缀,而只需要引用mapping代替arcpy.mapping即可。这不仅使代码更容易阅读,而且减少了代码的编写量。本书后面的小节也使用这种方法。虽然并没有要求一定要使用这种方式,但它确实可以使代码的编写更加简洁高效。此外,可以按个人意愿为这个变量命名,例如命名为MAP、mp或其他任何合理的名字。
import arcpy.mapping as mapping
(4)在上一步添加的第一行代码下键入如下代码,可引用当前活动的地图文档(Crime_Ch2.mxd),把该引用赋值给变量。
mxd = mapping.MapDocument("CURRENT")
(5)设置地图文档标题。
mxd.title = "Crime Project"
(6)使用saveACopy()方法保存地图文档文件的副本。
mxd.saveACopy("C:/ArcpyBook/Ch2/crime_copy.mxd")
(7)单击“File | Map Document Properties”,可以查看地图文档的新标题。
(8)可以通过查看C:ArcpyBookcodeCh2ReferenceCurrentMapDocument.py解决方案文件来检查代码。
2.2.3 工作原理
MapDocument类有创建该类实例的构造函数。在面向对象编程中,实例也叫对象。MapDocument的构造函数既接受CURRENT关键字,也接受本地或网络驱动器上的地图文档文件的路径。首先使用构造函数创建一个对象,并把它赋值给mxd变量。然后可以使用点记法访问该对象的属性和方法。在本例中,使用MapDocument.title属性输出地图文档文件的标题,并使用MapDocument.saveACopy()方法保存地图文档文件的副本。