- 本节书摘来自异步社区《基于ArcGIS的Python编程秘笈(第2版)》一书中的第2章,第2.8节,作者: 【美】Eric Pimpler(派普勒) 更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.8 添加图层到地图文档
在很多情况下都需要把图层添加到地图文档中。制图模块提供了AddLayer()函数来实现这一功能。本节将介绍如何使用AddLayer()函数把图层添加到地图文档中。
2.8.1 准备工作
arcpy.mapping模块提供了在已有的地图文档中添加图层或图层组的功能。使用ArcMap 的自动排序功能,可以自动将一个图层添加到数据框中并显示出来。这个功能本质上与ArcMap中的“Add Data”按钮实现的功能是一样的,即根据几何类型和图层权重的规则,将图层添加到数据框中的适当位置。
小技巧:
图层不能添加到图层文件(.lyr)中。
当把图层添加到地图文档中时,该图层必须引用一个已有的图层,即能够在磁盘上的图层文件、同一个地图文档和数据框、同一个地图文档但不相同的数据框或完全不同的地图文档中找到的图层。引用的图层可以是地图文档中的图层,也可以是图层文件(.lyr)中的图层。要将图层添加到地图文档中,首先创建Layer类的实例,然后调用AddLayer()函数,传入新的图层、图层要放置的数据框和图层放置的规则等参数。
2.8.2 操作方法
下面按步骤介绍如何将图层添加到地图文档中。
(1)在ArcMap中打开C:ArcpyBookCh2Crime_Ch2.mxd。
(2)单击ArcMap“标准”工具条上的“Python”按钮。
(3)导入arcpy.mapping模块。
import arcpy.mapping as mapping
(4)引用当前活动的地图文档(Crime_Ch2.mxd),把该引用赋值给变量。
mxd = mapping.MapDocument("CURRENT")
(5)获取对Crime数据框的引用,它是ListDataFrames()函数返回的数据框列表中的第1个数据框。在代码的末尾指定[0]值,用来获取ListDataFrames()函数返回的数据框列表中的第1个数据框。因为列表的索引是从0开始的,所以需要使用索引值0来检索列表的第1个数据框。
df = mapping.ListDataFrames(mxd)[0]
(6)创建Layer对象,该对象引用一个图层文件(.lyr)。
layer =
mapping.Layer(r"C:\ArcpyBook\data\School_Districts.lyr")
(7)将图层添加到数据框中。
mapping.AddLayer(df,layer,"AUTO_ARRANGE")
(8)可以通过查看C:ArcpyBookcodeCh2AddLayersMapDocument.py解决方案文件来检查代码。运行脚本,School_Districts.lyr文件即可加载在数据框中,如图2-6所示。
https://yqfile.alicdn.com/526ccffe6b5495ffed7e11bdc8a0fe83c091268c.png" >
2.8.3 工作原理
首先,导入arcpy.mapping模块,并获取对当前活动地图文档的引用。接着,创建一个新变量df来存储对Crime数据框的引用,该引用是通过ListDataFrames()函数返回数据框列表并使用[0]访问列表中的第1项元素(Crime数据框)来获取的。然后,创建一个 Layer 类的实例 layer,layer 变量引用存储在磁盘上的名为School_Districts. lyr的图层文件。最后,调用AddLayer()函数,传入3个参数:图层要添加到的数据框(df)、引用的图层(layer)和自动排序方式(auto-arrange)。对于第3个可选参数,可以使用AUTO_ARRANGE(默认值)自动地放置图层在数据框中的位置,也可以使用BOTTOM或TOP,指定图层放置在数据框或图层组的底层或顶层。
2.8.4 拓展
arcpy.mapping模块提供的AddLayerToGroup()函数可以把图层添加到图层组中。使用该函数可以将图层添加到图层组的顶层或底层,也可以使用自动排序方式来放置图层的位置,还可以将图层添加到一个空的图层组中。请读者注意,跟图层对象一样,图层组也不能添加到图层文件中。
图层也可以从数据框或图层组中移出。RemoveLayer()函数用来移除指定数据框中的图层或图层组。如果有两个图层的名字相同,只移除检索到的第1个图层。只有在脚本中设置迭代,才可以将两个图层都移除。