本节书摘来自异步社区《基于ArcGIS的Python编程秘笈(第2版)》一书中的第2章,第2.11节,作者: 【美】Eric Pimpler(派普勒) 更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.11 更新图层属性
在上节中,介绍了如何更新图层的符号系统。正如前文所述,UpdateLayer()可以用来更新图层的各种属性,如字段别名、定义查询等。本节将介绍如何使用UpdateLayer()函数来改变图层的各种属性。
2.11.1 准备工作
UpdateLayer()函数可以用来更新有限数量的图层属性。所有可在“图层属性”对话框中找到的属性都可使用UpdateLayer()函数进行修改,包括字段别名、符号系统、定义查询和标注字段等。一种常见的情况是,有一个图层被添加到多个地图文档中,而GIS分析人员需要在全部地图文档中改变所有该图层实例的某个特定属性。要实现这一功能,需要在ArcMap中修改特定的图层属性并将该图层保存为图层文件,然后把保存的图层文件作为源图层,用来更新update_layer图层的属性。在本节中,首先使用ArcMap改变图层属性,保存图层文件(.lyr),然后使用Python编写脚本,调用UpdateLayer()函数,把保存的图层属性应用到将要更新的图层中。
2.11.2 操作方法
下面按步骤介绍如何使用UpdateLayer()函数更新图层属性。
(1)在ArcMap中打开C:ArcpyBookCh2Crime_Ch2.mxd。在本节中,将要使用“Burglaries in 2009”要素类,如图2-12所示。
https://yqfile.alicdn.com/7a77e1766c8a6f71c7075853b90d71227316337b.png" >
(2)在数据框中双击“Burglaries in 2009”要素类,打开“Layer Properties”窗口,如图2-13所示。每个选项卡表示一个属性,可以在选项卡中设置相应的图层属性参数。
(3)单击“General”选项卡,在“Layer Name”文本框中输入文本,更改图层的名称为“Burglaries – No Forced Entry”,如图2-14所示。
https://yqfile.alicdn.com/b579d0c6212f963a544f305debef52ab83a13760.png" >
(4)单击“Definition Query”选项卡,设置定义查询,如图2-15所示。可以单击“Query Builder…”按钮构建定义查询,也可以直接键入查询表达式。
https://yqfile.alicdn.com/97c924d7ce811d3a23f648facdbd48e9871d533c.png" >
(5)更改OFFDESC字段的别名为Offense Description,如图2-16所示。
(6)在“Layer Properties”窗口单击“Fields”选项卡,如图2-16所示,已勾选的字段是可见字段,取消勾选可以使相应字段变为不可见状态。
(7)单击“OK”按钮关闭“Layer Properties”窗口。
(8)在数据框中右击“Burglaries – No Forced Entry”图层,选择“Save as Layer File”。
(9)保存文件为C:ArcpyBookdataBurglariesNoForcedEntry.lyr。
(10)右击“Burglaries – No Forced Entry”图层,选择“Remove”。
(11)在ArcMap中单击“Add Data”按钮,从CityOfSanAntonio地理数据库添加Crimes2009要素类。该要素类将添加到数据框中,如图2-17所示。
(12)在ArcMap中打开“Python”窗口。
(13)导入arcpy.mapping模块。
import arcpy.mapping as mapping
(14)引用当前活动的地图文档(Crime_Ch2.mxd),把该引用赋值给变量。
mxd = mapping.MapDocument("CURRENT")
(15)获取对Crime数据框的引用。
df = mapping.ListDataFrames(mxd, "Crime")[0]
(16)定义将要更新的图层。
updateLayer = mapping.ListLayers(mxd,"Crimes2009",df)[0]
(17)定义用于更新属性的源图层。
sourceLayer =
mapping.Layer(r"C:\ArcpyBook\data\
BurglariesNoForcedEntry.lyr")
(18)调用UpdateLayer()函数更新符号系统。
mapping.UpdateLayer(df,updateLayer,sourceLayer,False)
(19)可以通过查看 C:ArcpyBookcodeCh2UpdateLayerProperties.py解决方案文件来检查代码。
(20)运行脚本。
(21)“Crimes2009”图层中与 BurglariesNoForcedEntry.lyr 文件相关联的属性将进行更新,如图2-18 所示。可以打开图层查看定义查询,还可以打开“Layer Properties”窗口,查看“Crimes2009”要素类已改变的图层属性。