本节书摘来自异步社区《基于ArcGIS的Python编程秘笈(第2版)》一书中的第2章,第2.9节,作者: 【美】Eric Pimpler(派普勒) 更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.9 插入图层到地图文档
AddLayer()函数可以用来将图层添加到地图文档中,图层添加到数据框中的位置可以使用自动排序方式放置,也可以使用BOTTOM或TOP参数将图层置于顶层或底层。但是,AddLayer()函数没有提供把图层插入到数据框中某个指定位置的功能。要实现该功能,可以使用InsertLayer()函数。本节将介绍如何将图层添加到数据框中的指定位置。
**
2.9.1 准备工作**
AddLayer()函数仅仅提供把图层添加到数据框或图层组中的功能,并且只可以使用自动排序方式自动地放置图层的位置,或者选择放置在顶层或底层。然而,使用InsertLayer()函数可以准确地指定图层添加到数据框或图层组中的位置。InsertLayer()函数使用一个参考图层来指定位置,新图层将会添加在指定参考图层的上方或下方。因为InsertLayer()函数需要使用参考图层,所以不能对空数据框使用该函数。如图2-7所示,“District_Crime_Join”是参考图层,“School_Districts”是将要添加的图层,使用InsertLayer()函数可以把“School_Districts”图层添加到“District_Crime_Join”图层的上方或下方。
**
2.9.2 操作方法**
下面按步骤介绍如何使用InsertLayer()函数把图层插入到数据框中。
(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数据框的引用。
df = mapping.ListDataFrames(mxd, "Crime")[0]
(6)定义参考图层。
refLayer = mapping.ListLayers(mxd, "Burglaries*", df)[0]
(7)定义相对于参考图层的插入图层。
insertLayer =
mapping.Layer(r"C:\ArcpyBook\data\CityOfSanAntonio.gdb\
Crimes2009")
(8)将图层插入到数据框中。
mapping.InsertLayer(df,refLayer,insertLayer,"BEFORE")
(9)可以通过查看 C:ArcpyBookcodeCh2InsertLayerMapDocument.py解决方案文件来检查代码。
(10)运行代码。“Crimes2009”要素类作为一个图层添加到数据框中,如图2-8所示。
2.9.3 工作原理
首先,导入arcpy.mapping模块,获取对当前的地图文档文件和Crime数据框的引用。接着,定义参考图层,通过调用ListLayers()函数,传入“Burglaries*”通配符参数和Crime数据框参数来限制返回的图层列表,使图层列表中只包含“Burglaries in 2009”图层这一项元素;使用0索引值来检索Python列表中的第1个图层,并把该图层赋值给图层对象(refLayer)。然后,定义插入图层,引用CityOfSanAntonio地理数据库中的“Crimes2009”要素类,将其赋值给新的图层对象(insertLayer)。最后,调用InsertLayer()函数,传入数据框、参考图层、插入图层和BEFORE(表明插入的图层置于参考图层的上方)4个参数。结果如图2-9所示。
2.9.4 拓展
图层在数据框或图层组中的位置是可以改变的。MoveLayer()函数提供了在数据框或图层组中移动图层位置的功能,但是图层的移动只能在同一个数据框内,而不能把一个数据框中的图层移动到另一个数据框中。同InsertLayer()函数一样,MoveLayer()函数需要引用参考图层来改变图层的位置。