一、Layer
在arcpy.mapping 中,Layer是一个非常重要的类型,如果说MapDocument 是arcpy.mapping 的首要入口,那么Layer就是坐在mapping里面的VIP了。
在arcpy.mapping 中,Layer有两个地方可以进入,一是通过MapDocument –>dataFrame,二是直接通过.lyr文件进入。一般来说,第一种情况比较常用,基本上是针对某个地图文档某个或者多个图层进行自动化修改,其表现为细节修改。而通过lyr进入图层,更多的是希望通过在桌面软件完成某类图层的配置,然后整体更新或者插入到地图文档中,其表现为为粗放式修改。
Layer的属性基本上可以是跟【图层属性】的标签页对应,包括数据源信息(datasetName、dataSource、workspacePath 均为只读)、标注(labelClasses、showLabels 均为只读)、常规属性如名称、可见比例等(name、maxScale、minScale 均为读写)、图层过滤(definitionQuery 读写)、图层类型判断(isFeatureLayer、isGroupLayer、isNetworkAnalystLayer、isRasterizingLayer、isRasterLayer、isServiceLayer 均为只读)、符号系统(symbology、symbologyType 均为只读)、时态(time 只读)。当然,这只是粗劣的分类,还有一些比较常用的就是visible、transparency 。
方法其实也不多,就是简单几个诸如获取图层范围(getExtent )、选择集合范围(getSelectedExtent 、setSelectionSet )、设置数据源(findAndReplaceWorkspacePath 、replaceDataSource )、保存图层(save 、saveACopy )、更新图层操作(updateLayerFromJSON )等,方法比属性要少得多,这也跟arcpy粗粒度的定位是有关的,但尽管如此,这些方法和属性也就基本覆盖了图层的所有操作了。
#coding=gbk
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\PythonTest\change.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "图层")[0]
#对第一个图层进行修改
lyrs=arcpy.mapping.ListLayers(mxd, "", df)
for layer in lyrs:
if layer.name.lower() == "highways": #lower()函数对字符串转为小写字母
layer.showLabels = True
mxd.save()
del mxd
二、ListLayers()函数
获取图层列表,返回文件中所有土层的列表。使用通配符参数或对指定数据框的引用作参数,则可以限制返回的图层列表。
import arcpy。mapping as mapping
mxd=mapping。MapDocument("CURRENT") #引用当前活动的地图文档
for df in mapping.ListDataFrames(max): #获取当前活动的地图文档数据框列表
if df.name=='Cirme':
layers=mapping.ListLayers(mxd,'Burg',df) #返回图层名含'Burg'的图层列表。
for layer in layers:
print(layer.name)